انتقل إلى المحتوى الرئيسي

دالة IBM Circuit

ملاحظة
  • دوال Qiskit ميزة تجريبية متاحة فقط لمستخدمي خطط IBM Quantum® Premium Plan وFlex Plan وOn-Prem (عبر IBM Quantum Platform API). وهي في مرحلة إصدار معاينة وقابلة للتغيير.

نظرة عامة

تأخذ دالة IBM® Circuit كمدخلات PUBs مجردة، وتُعيد قيم التوقع المخففة كمخرجات. تتضمن هذه الدالة خط أنابيب آلي ومخصص يُمكّن الباحثين من التركيز على اكتشاف الخوارزميات والتطبيقات.

الوصف

بعد إرسال PUB الخاص بك، يتم تحويل الدوائر والمراقِبات المجردة تلقائيًا، وتنفيذها على الجهاز الفعلي، ثم معالجتها لاحقًا لإعادة قيم التوقع المخففة. ولتحقيق ذلك، تجمع هذه الدالة بين الأدوات التالية:

دالة IBM Circuit

البدء

اتصل بالخدمة باستخدام مفتاح API واختر دالة Qiskit كما يلي. (يفترض هذا المقتطف أنك حفظت حسابك بالفعل في بيئتك المحلية.)

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

function = catalog.load("ibm/circuit-function")

مثال

لتبدأ، جرّب هذا المثال الأساسي:

from qiskit.circuit.random import random_circuit
from qiskit_ibm_runtime import QiskitRuntimeService

# You can skip this step if you have a target backend, e.g.
# backend_name = "ibm_brisbane"
# You'll need to specify the credentials when initializing QiskitRuntimeService, if they were not previously saved.
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
pubs = [(circuit, observable)]

job = function.run(
# Use `backend_name=backend_name` if you didn't initialize a backend object
backend_name=backend.name,
pubs=pubs,
)

تحقق من حالة حِمل عمل دالة Qiskit أو استرجع النتائج كما يلي:

print(job.status())
result = job.result()
QUEUED

النتائج لها نفس صيغة نتيجة Estimator:

print(f"The result of the submitted job had {len(result)} PUB\n")
print(
f"The associated PubResult of this job has the following DataBins:\n {result[0].data}\n"
)
print(f"And this DataBin has attributes: {result[0].data.keys()}")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
The result of the submitted job had 1 PUB

The associated PubResult of this job has the following DataBins:
DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>))

And this DataBin has attributes: dict_keys(['evs', 'stds', 'ensemble_standard_error'])
The expectation values measured from this PUB are:
1.02116704805492

المدخلات

راجع الجدول التالي لمعرفة جميع معاملات الإدخال التي تقبلها دالة IBM Circuit. يوضح قسم الخيارات التالي مزيدًا من التفاصيل حول options المتاحة.

الاسمالنوعالوصفمطلوبالافتراضيمثال
backend_namestrاسم الجهاز الخلفي للاستعلام منه.نعمغير متاحibm_fez
pubsIterable[EstimatorPubLike]مجموعة قابلة للتكرار من كائنات تشبه PUB المجردة (الكتلة الموحدة الأولية)، مثل صفوف (circuit, observables) أو (circuit, observables, parameter_values). راجع نظرة عامة على PUBs للمزيد من المعلومات. يمكن أن تكون الدوائر مجردة (غير ISA).نعمغير متاح(circuit, observables, parameter_values)
optionsdictخيارات الإدخال. راجع قسم الخيارات لمزيد من التفاصيل.لاراجع قسم الخيارات للتفاصيل.{"optimization_level": 3}
instancestrالاسم الموردي السحابي للمثيل المراد استخدامه بهذا الشكل.لايُختار واحد عشوائيًا إذا كان حسابك يمتلك صلاحية الوصول إلى عدة مثيلات.CRN

الخيارات

البنية

على غرار الـ primitives في Qiskit Runtime، يمكن تحديد خيارات دالة IBM Circuit كقاموس متداخل. الخيارات الأكثر استخدامًا، مثل optimization_level وmitigation_level، تكون في المستوى الأول. أما الخيارات الأخرى الأكثر تقدمًا فتُجمَّع في فئات مختلفة، مثل resilience.

القيم الافتراضية

إذا لم تحدد قيمة لأحد الخيارات، تُستخدم القيمة الافتراضية التي تحددها الخدمة.

مستوى التخفيف

تدعم دالة IBM Circuit أيضًا mitigation_level. يحدد مستوى التخفيف مقدار قمع الأخطاء وتخفيفها الذي يُطبَّق على المهمة. المستويات الأعلى تُنتج نتائج أكثر دقة، على حساب أوقات معالجة أطول. تعتمد درجة تخفيض الأخطاء على الطريقة المطبقة. يستخلص مستوى التخفيف الاختيار التفصيلي لأساليب تخفيف الأخطاء وقمعها ليتيح للمستخدمين التفكير في مقايضة التكلفة/الدقة المناسبة لتطبيقهم. يوضح الجدول التالي الأساليب المقابلة لكل مستوى.

ملاحظة

على الرغم من تشابه الأسماء، يطبّق mitigation_level تقنيات مختلفة عن تلك التي يستخدمها resilience_level في Estimator.

على غرار resilience_level في Qiskit Runtime Estimator، يحدد mitigation_level مجموعة أساسية من الخيارات المنسّقة. أي خيارات تحددها يدويًا بالإضافة إلى مستوى التخفيف تُطبَّق فوق المجموعة الأساسية من الخيارات التي يحددها مستوى التخفيف. لذلك، من حيث المبدأ، يمكنك تعيين مستوى التخفيف إلى 1 ثم إيقاف تخفيف القياس، وإن كان ذلك غير موصى به.

مستوى التخفيفالتقنية
1 [الافتراضي]الفصل الديناميكي + تقليب القياس + TREX
2المستوى 1 + تقليب البوابات + ZNE عبر طي البوابات
3المستوى 1 + تقليب البوابات + ZNE عبر PEA

يوضح المثال التالي كيفية ضبط مستوى التخفيف:

options = {"mitigation_level": 2}

job = function.run(backend_name=backend.name, pubs=pubs, options=options)

جميع الخيارات المتاحة

إضافةً إلى mitigation_level، توفر دالة IBM Circuit عددًا محددًا من الخيارات المتقدمة التي تتيح لك ضبط مقايضة التكلفة/الدقة بدقة. يوضح الجدول التالي جميع الخيارات المتاحة:

الخيارالخيار الفرعيالخيار الفرعي الثانويالوصفالخيارات المتاحةالافتراضي
default_precisionالدقة الافتراضية المستخدمة لأي PUB أو استدعاء run()
لا يحدد دقته الخاصة.
يمكن لكل PUB مدخل تحديد دقته الخاصة. إذا أُعطيت دقة لاستدعاء run()، تُستخدم تلك القيمة لجميع PUBs في استدعاء run() التي لا تحدد دقتها الخاصة.
float > 00.015625
max_execution_timeالحد الأقصى لوقت التنفيذ بالثواني، ويعتمد
على استخدام QPU (وليس وقت الساعة). استخدام QPU هو
الوقت الذي تُكرّس فيه QPU لمعالجة مهمتك. إذا تجاوزت مهمة ما هذا الحد الزمني، يُلغى تنفيذها قسرًا.
عدد صحيح بالثواني في النطاق [1, 10800]
mitigation_levelمقدار قمع الأخطاء وتخفيفها المطبّق. راجع قسم مستوى التخفيف لمزيد من المعلومات حول الأساليب المستخدمة في كل مستوى.1 / 2 / 31
optimization_levelمقدار التحسين المُجرى على الدوائر. المستويات الأعلى تُنتج دوائر أكثر تحسينًا، على حساب وقت ترانسبايل أطول.1 / 2 / 32
dynamical_decouplingenableما إذا كان يجب تفعيل الفصل الديناميكي. راجع تقنيات قمع الأخطاء وتخفيفها لشرح الطريقة.True/FalseTrue
sequence_typeتسلسل الفصل الديناميكي المراد استخدامه.
* XX: استخدام التسلسل tau/2 - (+X) - tau - (+X) - tau/2
* XpXm: استخدام التسلسل tau/2 - (+X) - tau - (-X) - tau/2
* XY4: استخدام التسلسل
tau/2 - (+X) - tau - (+Y) - tau (-X) - tau - (-Y) - tau/2
'XX'/'XpXm'/'XY4''XX'
twirlingenable_gatesما إذا كان يجب تطبيق تقليب بوابات Clifford ثنائية الكيوبت.True/FalseFalse
enable_measureما إذا كان يجب تفعيل تقليب القياسات.True/FalseTrue
resiliencemeasure_mitigationما إذا كان يجب تفعيل طريقة تخفيف أخطاء القياس TREX. راجع تقنيات قمع الأخطاء وتخفيفها لشرح الطريقة.True/FalseTrue
zne_mitigationما إذا كان يجب تفعيل طريقة تخفيف الأخطاء باستقراء الضوضاء الصفرية. راجع تقنيات قمع الأخطاء وتخفيفها لشرح الطريقة.True/FalseFalse
zneamplifierالتقنية المستخدمة لتضخيم الضوضاء. إحدى:
- gate_folding (الافتراضي) يستخدم طي البوابات ثنائية الكيوبت لتضخيم الضوضاء. إذا تطلب معامل الضوضاء تضخيم مجموعة فرعية فقط من البوابات، تُختار هذه البوابات عشوائيًا.

- gate_folding_front يستخدم طي البوابات ثنائية الكيوبت لتضخيم الضوضاء. إذا تطلب معامل الضوضاء تضخيم مجموعة فرعية فقط من البوابات، تُختار هذه البوابات من مقدمة دائرة DAG المرتبة طوبولوجيًا.

- gate_folding_back يستخدم طي البوابات ثنائية الكيوبت لتضخيم الضوضاء. إذا تطلب معامل الضوضاء تضخيم مجموعة فرعية فقط من البوابات، تُختار هذه البوابات من مؤخرة دائرة DAG المرتبة طوبولوجيًا.

- pea يستخدم تقنية تُعرف بتضخيم الخطأ الاحتمالي (PEA) لتضخيم الضوضاء. راجع تقنيات قمع الأخطاء وتخفيفها لشرح الطريقة.
gate_folding / gate_folding_front / gate_folding_back / peagate_folding
noise_factorsمعاملات الضوضاء المستخدمة لتضخيم الضوضاء.قائمة من الأعداد العشرية؛ كل عدد >= 1(1, 1.5, 2) لـ PEA، و(1, 3, 5) لغيرها.
extrapolatorمعاملات الضوضاء لتقييم نماذج الاستقراء الملائمة عندها. لا يؤثر هذا الخيار على التنفيذ أو ملاءمة النموذج بأي شكل؛ بل يحدد فقط النقاط التي تُقيَّم عندها كائنات extrapolator لتُعاد في حقول البيانات المسماة evs_extrapolated وstds_extrapolated.واحد أو أكثر من exponential، linear، double_exponential، polynomial_degree_(1 <= k <= 7)(exponential, linear)
pec_mitigationما إذا كان يجب تفعيل طريقة تخفيف الأخطاء بإلغاء الأخطاء الاحتمالي. راجع تقنيات قمع الأخطاء وتخفيفها لشرح الطريقة.True/FalseFalse
pecmax_overheadالحد الأقصى المسموح به لاستهلاك أخذ عينات الدائرة، أو None بدون حد أقصى.None/ integer >1100

في المثال التالي، يُوقف ضبط مستوى التخفيف على 1 تخفيف ZNE في البداية، لكن ضبط zne_mitigation على True يتجاوز الإعداد ذي الصلة من mitigation_level.

options = {"mitigation_level": 1, "resilience": {"zne_mitigation": True}}

المخرجات

مخرج دالة Circuit هو PrimitiveResult، الذي يحتوي على حقلين:

  • كائن PubResult واحد أو أكثر. يمكن فهرستها مباشرةً من PrimitiveResult.

  • بيانات وصفية على مستوى المهمة.

يحتوي كل PubResult على حقل data وحقل metadata.

  • يحتوي حقل data على مصفوفة قيم توقع على الأقل (PubResult.data.evs) ومصفوفة أخطاء معيارية (PubResult.data.stds). ويمكن أن يحتوي أيضًا على بيانات إضافية حسب الخيارات المستخدمة.

  • يحتوي حقل metadata على بيانات وصفية على مستوى PUB (PubResult.metadata).

يصف مقتطف الكود التالي صيغة PrimitiveResultPubResult المرتبط به).

print(f"The result of the submitted job had {len(result)} PUB")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
print(f"And the associated metadata is: \n{result[0].metadata}")
The result of the submitted job had 1 PUB
The expectation values measured from this PUB are:
1.02116704805492
And the associated metadata is:
{'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}

استرجاع رسائل الخطأ

إذا كانت حالة حِمل العمل ERROR، استخدم job.result() لاسترجاع رسالة الخطأ للمساعدة في تصحيح الأخطاء كما يلي:

job = function.run(
backend_name="bad_backend_name", pubs=pubs, options=options
)

print(job.result())

الحصول على الدعم

تواصل مع دعم IBM Quantum، وأرفق المعلومات التالية:

  • معرّف مهمة دالة Qiskit (qiskit-ibm-catalogjob.job_id
  • وصف مفصّل للمشكلة
  • أي رسائل خطأ أو رموز ذات صلة
  • خطوات إعادة إنتاج المشكلة

الخطوات التالية