تحديد خيارات Estimator
إصدارات الحزم
الكود في هذه الصفحة تم تطويره باستخدام المتطلبات التالية. نوصي باستخدام هذه الإصدارات أو أحدث.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
يمكنك استخدام الخيارات لتخصيص الأداة البدائية Estimator. بينما تكون واجهة طريقة run() للأدوات البدائية مشتركة عبر جميع التطبيقات، فإن خياراتها ليست كذلك. راجع مراجع API للحصول على معلومات حول خيارات qiskit.primitives.BaseEstimatorV2 و qiskit_aer.BaseEstimatorV2.
Notes :
- يمكنك رؤية الخيارات المتاحة وتحديث قيم الخيارات أثناء تهيئة Estimator أو بعدها.
- استخدم طريقة
update()لتطبيق التغييرات على سمةoptions. - إذا لم تحدد قيمة لخيار ما، فسيتم منحه قيمة خاصة
Unsetوستُستخدم الإعدادات الافتراضية للخادم. - سمة
optionsهي نوع Pythondataclass. يمكنك استخدام طريقةasdictالمدمجة لتحويلها إلى قاموس.
ضبط خيارات Estimator
يمكنك ضبط الخيارات عند تهيئة Estimator، أو بعد تهيئته، أو (لـ precision فقط) في طريقة run().
تهيئة الأداة البدائية
يمكنك تمرير مثيل من فئة الخيارات أو قاموس عند تهيئة Estimator، مما يجعله ينشئ نسخة من تلك الخيارات. لذا، تغيير القاموس الأصلي أو مثيل الخيارات لا يؤثر على الخيارات المملوكة للأداة البدائية.
فئة الخيارات
عند إنشاء مثيل من فئة EstimatorV2، يمكنك تمرير مثيل من فئة الخيارات. ستُطبَّق تلك الخيارات عند استخدام run() لإجراء الحساب. حدد الخيارات بهذا التنسيق: options.option.sub-option.sub-sub-option = choice. على سبيل المثال: options.dynamical_decoupling.enable = True
مثال:
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime.options import EstimatorOptions
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
options = EstimatorOptions(
resilience_level=2,
resilience={"zne_mitigation": True, "zne": {"noise_factors": [1, 3, 5]}},
)
# or...
options = EstimatorOptions()
options.resilience_level = 2
options.resilience.zne_mitigation = True
options.resilience.zne.noise_factors = [1, 3, 5]
estimator = Estimator(mode=backend, options=options)
القاموس
يمكنك تحديد الخيارات كقاموس عند تهيئة Estimator.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Setting options during initialization
estimator = Estimator(
backend,
options={
"resilience_level": 2,
"resilience": {
"zne_mitigation": True,
"zne": {"noise_factors": [1, 3, 5]},
},
},
)
تحديث الخيارات بعد التهيئة
يمكنك تحديد الخيارات بهذا التنسيق: estimator.options.option.sub-option.sub-sub-option = choice للاستفادة من الإكمال التلقائي، أو استخدام طريقة update() لإجراء تحديثات مجمّعة.
لا تحتاج إلى إنشاء مثيل من فئة خيارات EstimatorV2 (EstimatorOptions) إذا كنت تضبط الخيارات بعد تهيئة الأداة البدائية.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
estimator = Estimator(mode=backend)
# Setting options after initialization
# This uses auto-complete.
estimator.options.default_precision = 0.01
# This does bulk update.
estimator.options.update(
default_precision=0.02, resilience={"zne_mitigation": True}
)
طريقة Run()
القيم الوحيدة التي يمكنك تمريرها إلى run() هي تلك المعرّفة في الواجهة. أي، precision لـ Estimator. هذا يُستبدل أي قيمة تم ضبطها لـ default_precision في التشغيل الحالي.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
observable = SparsePauliOp("Z" * 3)
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
isa_observable1 = observable.apply_layout(transpiled1.layout)
isa_observable2 = observable.apply_layout(transpiled2.layout)
estimator = Estimator(mode=backend)
# Default precision to use if not specified in run()
estimator.options.default_precision = 0.01
# Run two circuits, requiring a precision of .02 for both.
estimator.run(
[(transpiled1, isa_observable1), (transpiled2, isa_observable2)],
precision=0.02,
)
<RuntimeJobV2('d7amh42k86tc73a1sa20', 'estimator')>
الحالة الخاصة: الدقة
تقبل طريقة EstimatorV2.run وسيطتين: قائمة PUBs، يمكن لكل منها تحديد قيمة دقة خاصة بها، ووسيطة keyword للدقة. هذه القيم للدقة هي جزء من واجهة تنفيذ Estimator، وهي مستقلة عن خيارات Runtime Estimator. تأخذ الأولوية على أي قيم محددة كخيارات لتتوافق مع تجريد Estimator.
ومع ذلك، إذا لم يتم تحديد precision بواسطة أي PUB أو في وسيطة keyword للتشغيل (أو إذا كانت جميعها None)، فسيتم استخدام قيمة الدقة من الخيارات، وأبرزها default_precision.
معاملات الدقة هذه مخصصة فقط لتحديد الدقة المستهدفة، ولا يُضمن أن تصل النتائج إلى الدقة المحددة.
لاحظ أن خيارات Estimator تحتوي على كل من default_shots و default_precision. ومع ذلك، نظراً لأن gate-twirling مفعّل بشكل افتراضي، فإن حاصل ضرب num_randomizations و shots_per_randomization يأخذ الأولوية على هذين الخيارين.
تحديداً، لأي Estimator PUB:
- إذا حدد PUB الدقة، استخدم تلك القيمة.
- إذا تم تحديد وسيطة keyword للدقة في
run، استخدم تلك القيمة. - إذا كان
twirlingمفعّلاً (True بشكل افتراضي)، فسيتم استخدام حاصل ضربnum_randomizationsوshots_per_randomization، كما هو محدد في خيارات twirling. - إذا تم تحديد
estimator.options.default_shots، استخدم تلك القيمة للتحكم في كمية البيانات. - إذا تم تحديد
estimator.options.default_precision، استخدم تلك القيمة.
على سبيل المثال، إذا تم تحديد الدقة في جميع الأماكن الأربعة، فسيتم استخدام الذي يتمتع بأعلى أولوية (الدقة المحددة في PUB).
على الرغم من أن الدقة المحددة في PUB وفي run تتمتع بأولوية أعلى، إلا أن المهمة تفشل إذا كان twirling مفعّلاً وكان حاصل ضرب num_randomizations و shots_per_randomization أصغر من عدد اللقطات اللازمة لتحقيق الدقة. في هذا السيناريو، يعجز EstimatorV2 عن توزيع اللقطات على عدد num_randomizations المحدد.
الدقة تتناسب عكسياً مع الاستخدام. أي، كلما كانت الدقة أقل، كلما استغرق تشغيلها وقتاً أطول من QPU.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
observable = SparsePauliOp("Z" * 3)
circuit = random_iqp(3)
circuit.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
isa_circuit = pass_manager.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)
# Setting precision during primitive initialization
estimator = Estimator(mode=backend, options={"default_precision": 0.05})
# Run with precision=0.02, overwriting the default.
estimator.run(
[(isa_circuit, isa_observable1)],
precision=0.02,
)
<RuntimeJobV2('d8286b00bvlc73d1vn50', 'estimator')>
إيقاف تشغيل جميع تخفيف الأخطاء وقمع الأخطاء
يمكنك إيقاف تشغيل جميع تخفيف وقمع الأخطاء إذا كنت، على سبيل المثال، تجري بحثاً في تقنيات التخفيف الخاصة بك. لتحقيق ذلك، قم بضبط resilience_level = 0.
مثال:
from qiskit_ibm_runtime import EstimatorV2 as Estimator, QiskitRuntimeService
# Define the service. This allows you to access an IBM QPU.
service = QiskitRuntimeService()
# Get a backend
backend = service.least_busy(operational=True, simulator=False)
# Define Estimator
estimator = Estimator(backend)
options = estimator.options
# Turn off all error mitigation and suppression
options.resilience_level = 0
الخيارات المتاحة
يوثّق الجدول التالي الخيارات من أحدث إصدار من qiskit-ibm-runtime. لمشاهدة إصدارات الخيارات الأقدم، تفضل بزيارة مرجع API لـ qiskit-ibm-runtime واختر إصداراً سابقاً.
default_shots
إجمالي عدد الـ shots المستخدمة لكل دائرة لكل تكوين.
الخيارات: عدد صحيح >= 0
الافتراضي: None
default_precision
الدقة الافتراضية لاستخدامها لأي PUB أو استدعاء run() لا يحدد واحدة.
الخيارات: Float > 0
الافتراضي: 0.015625 (1 / sqrt(4096))
dynamical_decoupling
التحكم في إعدادات تخفيف الأخطاء بالفصل الديناميكي.
وثائق API لـ dynamical_decoupling
dynamical_decoupling.enable
الخيارات: True, False
الافتراضي: False
dynamical_decoupling.extra_slack_distribution
الخيارات: middle, edges
الافتراضي: middle
dynamical_decoupling.scheduling_method
الخيارات: asap, alap
الافتراضي: alap
dynamical_decoupling.sequence_type
الخيارات: XX, XpXm, XY4
الافتراضي: XX
dynamical_decoupling.skip_reset_qubits
الخيارات: True, False
الافتراضي: False
environment
environment.callback
دالة قابلة للاستدعاء تستقبل Job ID و Job result.
الخيارات: None
الافتراضي: None
environment.job_tags
قائمة من العلامات.
الخيارات: None
الافتراضي: None
environment.log_level
الخيارات: DEBUG, INFO, WARNING, ERROR, CRITICAL
الافتراضي: WARNING
environment.private
الخيارات: True, False
الافتراضي: False
execution
execution.init_qubits
هل يتم إعادة ضبط القبتات إلى الحالة الأساسية لكل shot.
الخيارات: True, False
الافتراضي: True
execution.rep_delay
التأخير بين قياس ودائرة كمية لاحقة.
الخيارات: قيمة في النطاق المقدَّم من backend.rep_delay_range
الافتراضي: كما هو محدد بواسطة backend.default_rep_delay
max_execution_time
يحدد المدة التي يمكن أن تعمل فيها المهمة، بالثواني. انظر دليل الحد الأقصى لوقت التنفيذ للتفاصيل.
الخيارات: عدد صحيح للثواني في النطاق [1, 10800]
الافتراضي: 10800 (3 ساعات)
resilience
خيارات متقدمة للمرونة لضبط استراتيجية المرونة بدقة.
resilience.layer_noise_learning
خيارات لتعلم ضوضاء الطبقة.
resilience.layer_noise_learning.layer_pair_depths
الخيارات: list[int] بقيمة 2-10 في النطاق [0, 200]
الافتراضي: (0, 1, 2, 4, 16, 32)
resilience.layer_noise_learning.max_layers_to_learn
الخيارات: None، عدد صحيح >= 1
الافتراضي: 4
resilience.layer_noise_learning.num_randomizations
الخيارات: عدد صحيح >= 1
الافتراضي: 32
resilience.layer_noise_learning.shots_per_randomization
الخيارات: عدد صحيح >= 1
الافتراضي: 128
resilience.layer_noise_model
الخيارات: NoiseLearnerResult, Sequence[LayerError]
الافتراضي: None
resilience.measure_mitigation
الخيارات: True, False
الافتراضي: True
resilience.measure_noise_learning
خيارات لتعلم ضوضاء القياس.
resilience.measure_noise_learning.num_randomizations
الخيارات: عدد صحيح >= 1
الافتراضي: 32
resilience.measure_noise_learning.shots_per_randomization
الخيارات: عدد صحيح، auto
الافتراضي: auto
resilience.pec_mitigation
الخيارات: True, False
الافتراضي: False
resilience.pec
خيارات تخفيف الأخطاء الاحتمالية.
resilience.pec.max_overhead
الخيارات: None، عدد صحيح >= 1
الافتراضي: 100
resilience.pec.noise_gain
الخيارات: auto، float في النطاق [0, 1]
الافتراضي: auto
resilience.zne_mitigation
الخيارات: True, False
الافتراضي: False
resilience.zne
resilience.zne.amplifier
الخيارات: gate_folding, gate_folding_front, gate_folding_back, pea
الافتراضي: gate_folding
resilience.zne.extrapolated_noise_factors
الخيارات: قائمة من الأعداد العشرية
الافتراضي: [0, *noise_factors]
resilience.zne.extrapolator
الخيارات: واحد أو أكثر من: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback
الافتراضي: (exponential, linear)
resilience.zne.noise_factors
الخيارات: قائمة من الأعداد العشرية؛ كل عدد عشري >= 1
الافتراضي: (1, 1.5, 2) لـ PEA، و (1, 3, 5) في غير ذلك
resilience_level
مقدار المرونة المبنية ضد الأخطاء. المستويات الأعلى تولّد نتائج أكثر دقة على حساب أوقات معالجة أطول. انظر قسم مستويات المرونة في موضوع إدارة الضوضاء لمزيد من المعلومات.
الخيارات: 0, 1, 2
الافتراضي: 1
seed_estimator
simulator
خيارات لتمريرها عند محاكاة Backend
simulator.basis_gates
الخيارات: قائمة من أسماء بوابات الأساس للنقل إليها
الافتراضي: مجموعة جميع بوابات الأساس المدعومة من قِبل محاكي Qiskit Aer
simulator.coupling_map
الخيارات: قائمة من التفاعلات ثنائية القبت الموجَّهة
الافتراضي: None، مما يعني عدم وجود قيود على الاتصال (اتصال كامل).
simulator.noise_model
الخيارات: Qiskit Aer NoiseModel، أو تمثيلها
الافتراضي: None
simulator.seed_simulator
الخيارات: عدد صحيح
الافتراضي: None
twirling
خيارات Twirling
twirling.enable_gates
الخيارات: True, False
الافتراضي: False
twirling.enable_measure
الخيارات: True, False
الافتراضي: True
twirling.num_randomizations
الخيارات: auto، عدد صحيح >= 1
الافتراضي: auto
twirling.shots_per_randomization
الخيارات: auto، عدد صحيح >= 1
الافتراضي: auto
twirling.strategy
الخيارات: active, active-circuit, active-accum, all
الافتراضي: active-accum
experimental
الخيارات التجريبية، عند توفرها.
توافق الميزات
لا يمكن استخدام بعض ميزات Runtime معاً في مهمة واحدة. انقر على التبويب المناسب للحصول على قائمة الميزات غير المتوافقة مع الميزة المحددة:
البوابات الكسرية
غير متوافق مع:
- Gate twirling
- PEA
- PEC
Gate-folding ZNE
قد لا يعمل عند استخدام بوابات مخصصة. غير متوافق مع:
- PEA
- PEC
Gate twirling
غير متوافق مع:
- البوابات الكسرية
- المدّات
ملاحظات أخرى:
- لا يمكن تطبيق Measurement twirling إلا على القياسات النهائية.
- لا يعمل مع المشابكات غير-Clifford.
PEA
غير متوافق مع:
- البوابات الكسرية
- Gate-folding ZNE
- PEC
PEC
غير متوافق مع:
- البوابات الكسرية
- Gate-folding ZNE
- PEA
الخطوات التالية
- ابحث عن مزيد من التفاصيل حول طرق
EstimatorV2في مرجع API لـ Estimator. - حدد وضع التنفيذ الذي ستشغّل مهمتك فيه.
- تعرف على إدارة الضوضاء مع Estimator.