البداية السريعة مع Sampler
المهمة الأساسية لـ Sampler هي أخذ عينات من سجل الإخراج من تنفيذ دائرة كمية واحدة أو أكثر. تُقبل الـ Circuits الديناميكية والـ Circuits ذات المعاملات كمدخلات (إذا أُرسِلت Circuits ذات معاملات، يجب توفير قيم المعاملات أيضًا). يدعم Sampler أيضًا الفصل الديناميكي والتدوير المضمَّنَين لـ تثبيط الأخطاء.
توضح الخطوات في هذا الموضوع كيفية إعداد Sampler، واستكشاف الخيارات التي يمكنك استخدامها لتهيئته، واستدعائه في برنامج.
إصدارات الحزم
تم تطوير الكود في هذه الصفحة باستخدام المتطلبات التالية. نوصي باستخدام هذه الإصدارات أو أحدث.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime
خطوات استخدام Sampler primitive
1. تهيئة الحساب
بما أن Qiskit Runtime خدمة مُدارة، تحتاج أولاً إلى تهيئة حسابك. يمكنك بعد ذلك اختيار وحدة المعالجة الكمية (QPU) التي تريد استخدامها لحساب قيمة التوقع.
اتبع الخطوات في موضوع إعداد حساب IBM Cloud الخاص بك إن لم يكن لديك حساب مُعدٌّ بالفعل.
لاستخدام البوابات الكسرية المدعومة حديثًا، اضبط use_fractional_gates=True عند طلب Backend من نسخة QiskitRuntimeService. على سبيل المثال:
service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)
هذه ميزة تجريبية وقد تتغير في المستقبل.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)
2. إنشاء دائرة
تحتاج إلى دائرة واحدة على الأقل كمدخل لـ Sampler primitive.
import numpy as np
from qiskit.circuit.library import efficient_su2
circuit = efficient_su2(127, entanglement="linear")
circuit.measure_all()
# The circuit is parametrized, so we will define the parameter values for execution
param_values = np.random.rand(circuit.num_parameters)
يجب تحويل الـ دائرة والمراقب ليستخدما فقط التعليمات المدعومة من قِبَل وحدة المعالجة الكمية (المُشار إليها بـ دوائر مجموعة تعليمات المعمارية (ISA)). استخدم الـ Transpiler للقيام بذلك.
from qiskit.transpiler import generate_preset_pass_manager
pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")
>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])
3. تهيئة Qiskit Runtime Sampler
عند تهيئة Sampler، استخدم المعامل mode لتحديد الوضع الذي تريده أن يعمل فيه. القيم الممكنة هي batch أو session أو كائنات backend لأوضاع تنفيذ الدُّفعة والجلسة والمهمة على التوالي. لمزيد من المعلومات، راجع مقدمة إلى أوضاع تنفيذ Qiskit Runtime. لاحظ أن مستخدمي الخطة المجانية لا يمكنهم إرسال مهام جلسات.
from qiskit_ibm_runtime import SamplerV2 as Sampler
sampler = Sampler(mode=backend)
4. استدعاء Sampler والحصول على النتائج
بعد ذلك، استدعِ الطريقة run() لتوليد الإخراج. تُدخَل الـ دائرة ومجموعات قيم المعاملات الاختيارية كصفوف كتلة موحدة للـ Primitive (PUB).
job = sampler.run([(isa_circuit, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")
>>> Job ID: d82863mgbeec73alf9sg
>>> Job Status: QUEUED
result = job.result()
# Get results for the first (and only) PUB
pub_result = result[0]
print(
f"First ten results for the 'meas' output register: "
f"{pub_result.data.meas.get_bitstrings()[:10]}"
)
First ten results for the 'meas' output register: ['1100110011001011111111111010000010001010100100011000001011001101000110011000110100100100101010111001110100100000000011111100000', '0101001001010000100111000110110001001101010110110000110111101110001100000001000001111111101110000000010011111100100110001101000', '0111111110011011000011110111010111101100110010001010010001100000000100000000001010101010111010110000001100100001010110000101000', '0000110011001100110011101100000111011001110100001100001100110111010100101010001010000011000111001010101111110110100110001010000', '0011110011100001100110111001000011011111011110111100000110001000111011101101000110011011101011001110110000010010001100100011001', '1010001000010101011100101010101001101000100010011011100110010111010001110111110010100010111010011010110011001101100110010000010', '0001110010001011001100010000000001001101001110101100110011101111100100100110110010101000011010101000101011101011010100000101010', '1110100100001100110010000010011010111000001010110010111111011010010100110011100101110011101111100001010011100110011000101001001', '1101011100110101011001010100011001110100001011110101101110111011011001100110001011000010001100100011000000110101011100111111000', '1101000110000000101010000000110000011000000000010110011001001000001110101110010111011010101100011000100100110000000000000011001']
الخطوات التالية
- تعرَّف على كيفية الاختبار محليًا قبل التشغيل على أجهزة الكم.
- راجع أمثلة تفصيلية.
- تدرَّب على الـ Primitives من خلال درس دالة التكلفة في IBM Quantum Learning.
- تعرَّف على كيفية الـ Transpile محليًا في قسم الـ Transpile.
- جرِّب دليل مقارنة إعدادات الـ Transpiler.
- تعرَّف على كيفية استخدام خيارات الـ Primitive.
- اطَّلع على API لخيارات Sampler.
- اقرأ الانتقال إلى V2 primitives.