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

تحديد خيارات Estimator

إصدارات الحزم

الكود في هذه الصفحة تم تطويره باستخدام المتطلبات التالية. نوصي باستخدام هذه الإصدارات أو أحدث.

qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1

يمكنك استخدام الخيارات لتخصيص الأداة البدائية Estimator. بينما تكون واجهة طريقة run() للأدوات البدائية مشتركة عبر جميع التطبيقات، فإن خياراتها ليست كذلك. راجع مراجع API للحصول على معلومات حول خيارات qiskit.primitives.BaseEstimatorV2 و qiskit_aer.BaseEstimatorV2.

Notes :

ملاحظات حول تحديد الخيارات في أدوات Estimator البدائية
  • يمكنك رؤية الخيارات المتاحة وتحديث قيم الخيارات أثناء تهيئة Estimator أو بعدها.
  • استخدم طريقة update() لتطبيق التغييرات على سمة options.
  • إذا لم تحدد قيمة لخيار ما، فسيتم منحه قيمة خاصة Unset وستُستخدم الإعدادات الافتراضية للخادم.
  • سمة options هي نوع Python dataclass. يمكنك استخدام طريقة 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:

  1. إذا حدد PUB الدقة، استخدم تلك القيمة.
  2. إذا تم تحديد وسيطة keyword للدقة في run، استخدم تلك القيمة.
  3. إذا كان twirling مفعّلاً (True بشكل افتراضي)، فسيتم استخدام حاصل ضرب num_randomizations و shots_per_randomization، كما هو محدد في خيارات twirling.
  4. إذا تم تحديد estimator.options.default_shots، استخدم تلك القيمة للتحكم في كمية البيانات.
  5. إذا تم تحديد 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

وثائق API لـ default_shots

default_precision

الدقة الافتراضية لاستخدامها لأي PUB أو استدعاء run() لا يحدد واحدة.

الخيارات: Float > 0

الافتراضي: 0.015625 (1 / sqrt(4096))

وثائق API لـ default_precision

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

وثائق API لـ 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

وثائق API لـ 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

خيارات متقدمة للمرونة لضبط استراتيجية المرونة بدقة.

وثائق API لـ resilience

resilience.layer_noise_learning

خيارات لتعلم ضوضاء الطبقة.

وثائق API لـ 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

خيارات لتعلم ضوضاء القياس.

وثائق API لـ 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

خيارات تخفيف الأخطاء الاحتمالية.

وثائق API لـ 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

وثائق API لـ resilience_level

seed_estimator

الخيارات: عدد صحيح

الافتراضي: None

seed_estimator

simulator

خيارات لتمريرها عند محاكاة Backend

وثائق API لـ simulator

simulator.basis_gates

الخيارات: قائمة من أسماء بوابات الأساس للنقل إليها

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

simulator.coupling_map

الخيارات: قائمة من التفاعلات ثنائية القبت الموجَّهة

الافتراضي: None، مما يعني عدم وجود قيود على الاتصال (اتصال كامل).

simulator.noise_model

الخيارات: Qiskit Aer NoiseModel، أو تمثيلها

الافتراضي: None

simulator.seed_simulator

الخيارات: عدد صحيح

الافتراضي: None

twirling

خيارات Twirling

وثائق API لـ 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

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

توصيات