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

الحصول على معلومات Backend باستخدام Qiskit

Package versions

The code on this page was developed using the following requirements. We recommend using these versions or newer.

qiskit-ibm-runtime~=0.43.1

تشرح هذه الصفحة كيفية استخدام Qiskit للحصول على معلومات حول backends المتاحة لديك.

عرض قائمة الـ Backends

لعرض الـ backends التي تمتلك صلاحية الوصول إليها، يمكنك إما الاطلاع على قائمة في صفحة موارد الحوسبة، أو استخدام الطريقة QiskitRuntimeService.backends(). تُعيد هذه الطريقة قائمة من نسخ IBMBackend:

ملاحظات
  • إذا كنت مسجّل الدخول إلى instance أو منطقة محددة، أو إذا هيّأت الخدمة بـ instance أو منطقة محددة باستخدام QiskitRuntimeService()، فستحصل فقط على الـ backends المتاحة لك في تلك الـ instance أو المنطقة. وإلا، فستُعاد جميع الـ backends المتاحة لك على أي instance وفي أي منطقة.
  • قائمة الـ backends المُعادة قد لا تكون مطابقة لتلك الظاهرة في صفحة موارد الحوسبة على منصة IBM Quantum Platform. القائمة في صفحة موارد الحوسبة تُصفَّى دائمًا حسب المنطقة المحددة في أعلى الصفحة.

لتشغيل الكود التالي، تأكد من أنك قد سجّلت الدخول إلى الخدمة مسبقًا. راجع إعداد حسابك على IBM Cloud للمزيد من التفاصيل.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit-ibm-runtime
# Initialize your account
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()

service.backends()
[<IBMBackend('ibm_pittsburgh')>,
<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_miami')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_torino')>,
<IBMBackend('ibm_kingston')>]

الطريقة QiskitRuntimeService.backend() (لاحظ أنها مفرد: backend) تأخذ اسم الـ backend كمعامل إدخال وتُعيد نسخة من IBMBackend تمثّل ذلك الـ backend تحديدًا:

service.backend("ibm_fez")
<IBMBackend('ibm_fez')>

تصفية الـ Backends

يمكنك أيضًا تصفية الـ backends المتاحة حسب خصائصها. للتصفية الأكثر عمومية، اضبط وسيطة filters على دالة تقبل كائن backend وتُعيد True إذا كان يستوفي معاييرك. راجع توثيق الـ API للمزيد من التفاصيل.

الكود التالي يُعيد فقط الـ backends التي تستوفي هذه المعايير وهي متاحة لك على الـ instance المحددة حاليًا:

  • أجهزة كمّية حقيقية (simulator=False)
  • تعمل حاليًا (operational=True)
  • تحتوي على 5 Qubits على الأقل (min_num_qubits=5)
# Optionally pass in an instance, region, or both, to
# further filter the backends.
service = QiskitRuntimeService()

service.backends(simulator=False, operational=True, min_num_qubits=5)
[<IBMBackend('ibm_pittsburgh')>,
<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_miami')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_torino')>,
<IBMBackend('ibm_kingston')>]

استخدم وسيطات الكلمات المفتاحية هذه للتصفية حسب أي خاصية في إعداد الـ backend (JSON schema) أو حالته (JSON schema). طريقة مشابهة هي QiskitRuntimeService.least_busy()، التي تأخذ نفس مرشّحات backends() لكنها تُعيد الـ backend الذي يطابق المرشّحات ولديه أقل عدد من الوظائف المنتظرة في الطابور:

service.least_busy(operational=True, min_num_qubits=5)
<IBMBackend('ibm_torino')>

المعلومات الثابتة للـ Backend

بعض المعلومات المتعلقة بالـ backend لا تتغير بشكل منتظم، مثل اسمه وإصداره وعدد الـ Qubits فيه وأنواع الميزات التي يدعمها. هذه المعلومات متاحة كخصائص لكائن backend.

الخلية التالية تبني وصفًا للـ backend.

backend = service.backend("ibm_fez")

print(
f"Name: {backend.name}\n"
f"Version: {backend.version}\n"
f"No. of qubits: {backend.num_qubits}\n"
)
Name: ibm_fez
Version: 2
No. of qubits: 156

للاطلاع على القائمة الكاملة للخصائص، راجع توثيق IBMBackend API.

البوابات والعمليات الأصلية

لكل عائلة معالج مجموعة بوابات أصلية. بشكل افتراضي، تدعم وحدات QPU في كل عائلة تشغيل البوابات والعمليات الموجودة في المجموعة الأصلية فقط. لذلك، يجب ترجمة كل بوابة في الدائرة (بواسطة Transpiler) إلى عناصر هذه المجموعة.

يمكنك عرض البوابات والعمليات الأصلية لوحدة QPU إما باستخدام Qiskit، أو عبر صفحة موارد الحوسبة في IBM Quantum® Platform.


from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()

for backend in service.backends():
config = backend.configuration()
if "simulator" in config.backend_name:
continue
print(f"Backend: {config.backend_name}")
print(f" Processor type: {config.processor_type}")
print(f" Supported instructions:")
for instruction in config.supported_instructions:
print(f" {instruction}")
print()

المعلومات الديناميكية للـ Backend

يمكن أن تمتلك الـ backends أيضًا خصائص تتغيّر عند معايرة الـ backend، مثل تردد الـ Qubit ومعدلات أخطاء العمليات. تُعايَر الـ backends عادةً كل 24 ساعة، وتتحدث خصائصها بعد اكتمال سلسلة المعايرة. يمكن استخدام هذه الخصائص عند تحسين الدوائر الكمّية أو لبناء نماذج ضوضاء لمحاكٍ كلاسيكي.

خصائص الـ Qubit

تُعيد backend.properties().qubit_property() معلومات حول الخصائص الفيزيائية للـ Qubits. وتحتوي على قاموس يضم مختلف خصائص الـ Qubit، كل منها مقترن بقيمته وطابع الوقت الخاص بآخر معايرة.

  • T1 (وقت الاسترخاء): يمثّل وقت T1 متوسط المدة التي يبقى فيها الـ Qubit في حالته المثارة 1|1\rangle قبل أن يتحلل إلى حالته الأساسية 0|0\rangle نتيجة لاسترخاء الطاقة. يُستخدم هذا المعامل لتوصيف سلوك استرخاء الطاقة للـ Qubit، ويُعبَّر عنه بوحدة الثانية (s).

  • T2 (وقت التبدد الطوري): يدل وقت T2 على الإطار الزمني الذي يحافظ فيه الـ Qubit على تماسك الطور لحالة التراكب بين الحالتين 0|0\rangle و1|1\rangle. يأخذ في الاعتبار كلًا من استرخاء الطاقة وعمليات التبدد النقي، مما يوفر نظرة ثاقبة على خصائص تماسك الـ Qubit.

  • frequency: يحدد هذا المعامل التردد الرنيني للـ Qubit، ويشير إلى فرق الطاقة بين الحالتين 0|0\rangle و1|1\rangle، ويُعبَّر عنه بالهرتز (Hz).

  • anharmonicity: اللاتوافقية هي الفرق في الطاقة بين الحالة المثارة الأولى والثانية للـ Qubit، وتُعبَّر عنها أيضًا بالهرتز (Hz).

  • readout_error: يقيس خطأ القراءة متوسط احتمال قياس حالة الـ Qubit بشكل غير صحيح. يُحسب عادةً كمتوسط لـ prob_meas0_prep1 و prob_meas1_prep0، مما يوفر مقياسًا واحدًا لدقة القياس.

  • prob_meas0_prep1: يشير هذا المعامل إلى احتمال قياس الـ Qubit في الحالة 0 عندما كان يُفترض إعداده في الحالة 1|1\rangle، ويُرمز إليه بـ P(01)P(0 | 1). يعكس أخطاء إعداد الحالة والقياس (SPAM)، ولا سيما أخطاء القياس في الـ Qubits فائقة التوصيل.

  • prob_meas1_prep0: بالمثل، يمثّل هذا المعامل احتمال قياس الـ Qubit في الحالة 1 عندما كان يُفترض إعداده في الحالة 0|0\rangle، ويُرمز إليه بـ P(10)P(1 | 0). مثل prob_meas0_prep1، يعكس أخطاء SPAM، مع كون أخطاء القياس هي المساهم الرئيسي في الـ Qubits فائقة التوصيل.

  • readout_length: تحدد readout_length مدة عملية القراءة لـ Qubit معين. تقيس الوقت من بدء نبضة القياس حتى اكتمال رقمنة الإشارة، وبعده يصبح النظام جاهزًا للعملية التالية. فهم هذا المعامل أمر بالغ الأهمية لتحسين تنفيذ الدائرة، خاصةً عند دمج قياسات منتصف الدائرة.

# fundamental physical properties of qubit 1
backend.qubit_properties(1)
QubitProperties(t1=0.00023160183954439313, t2=0.0002759670226087048, frequency=None)
# calibration data with detailed properties of qubit 0
backend.properties().qubit_property(0)
{'T1': (5.199156952582205e-05,
datetime.datetime(2026, 1, 14, 16, 18, 26, tzinfo=tzlocal())),
'T2': (2.253552085985709e-05,
datetime.datetime(2026, 1, 14, 16, 19, 6, tzinfo=tzlocal())),
'readout_error': (0.013916015625,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal())),
'prob_meas0_prep1': (0.026123046875,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal())),
'prob_meas1_prep0': (0.001708984375,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal())),
'readout_length': (1.56e-06,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal()))}
# Retrieve qubit properties
qubit_index = 126 # Replace with your qubit index
qubit_props = backend.properties().qubit_property(qubit_index)

# Access specific properties
t1 = qubit_props.get("T1", (None,))[0]
t2 = qubit_props.get("T2", (None,))[0]
frequency = qubit_props.get("frequency", (None,))[0]
anharmonicity = qubit_props.get("anharmonicity", (None,))[0]
readout_error = qubit_props.get("readout_error", (None,))[0]
prob_meas0_prep1 = qubit_props.get("prob_meas0_prep1", (None,))[0]
prob_meas1_prep0 = qubit_props.get("prob_meas1_prep0", (None,))[0]
readout_length = qubit_props.get("readout_length", (None,))[0]

print(f"Qubit {qubit_index} Properties:")
print(f" T1: {t1} seconds")
print(f" T2: {t2} seconds")
print(f" Frequency: {frequency} Hz")
print(f" Anharmonicity: {anharmonicity} Hz")
print(f" Readout Error: {readout_error}")
print(f" P(0 | 1): {prob_meas0_prep1}")
print(f" P(1 | 0): {prob_meas1_prep0}")
print(f" Readout Length: {readout_length} seconds")
Qubit 126 Properties:
T1: 9.563335658857979e-05 seconds
T2: 6.570556299807121e-05 seconds
Frequency: None Hz
Anharmonicity: None Hz
Readout Error: 0.006591796875
P(0 | 1): 0.009765625
P(1 | 0): 0.00341796875
Readout Length: 1.56e-06 seconds

خصائص التعليمات

الخاصية backend.target هي كائن من نوع qiskit.transpiler.Target: كائن يحتوي على جميع المعلومات اللازمة لنقل (transpile) دائرة إلى ذلك الـ backend. يشمل ذلك أخطاء التعليمات ومدتها. على سبيل المثال، الخلية التالية تحصل على خصائص بوابة cz التي تعمل بين الـ Qubits 1 و 0.

backend.target["cz"][(1, 0)]
InstructionProperties(duration=6.8e-08, error=0.007831625819164134)

الخلية التالية تعرض خصائص عملية القياس (بما في ذلك خطأ القراءة) على الـ Qubit 0.

backend.target["measure"][(0,)]
InstructionProperties(duration=1.56e-06, error=0.013916015625)

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

توصيات