انتقل إلى المحتوى الرئيسي
هذا المشروع في مرحلة تجريبية. وجدت خطأ؟ افتح مشكلة على GitHub. لديك سؤال أو فكرة؟ اسأل في Discussions — نحب سماع ملاحظاتك!
كيف جودة الترجمة في هذه الصفحة؟

وضع الاختبار المحلي

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

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

qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0
qiskit-aer~=0.17

استخدم وضع الاختبار المحلي (المتاح مع الإصدار qiskit-ibm-runtime v0.22.0 أو أحدث) لاختبار البرامج قبل ضبطها وإرسالها إلى أجهزة الكم الحقيقية. بعد التحقق من برنامجك باستخدام وضع الاختبار المحلي، كل ما تحتاج إلى تغييره هو اسم الخلفية لتشغيله على وحدة المعالجة الكمومية (QPU).

ملاحظة

تم تقديم دعم الوضع المحلي لـ primitive Executor في qiskit-ibm-runtime v0.50.0.

لاستخدام وضع الاختبار المحلي، حدد إحدى الخلفيات الوهمية من qiskit_ibm_runtime.fake_provider أو حدد خلفية Qiskit Aer عند إنشاء IBM Quantum® primitive أو جلسة.

  • الخلفيات الوهمية: تحاكي الخلفيات الوهمية في qiskit_ibm_runtime.fake_provider سلوكيات وحدات المعالجة الكمومية من IBM® باستخدام لقطات QPU. تحتوي هذه اللقطات على معلومات مهمة حول وحدة المعالجة الكمومية، مثل خريطة التوصيل والبوابات الأساسية وخصائص الكيوبت، وهي مفيدة لاختبار المحوّل وإجراء محاكاة QPU مع الضوضاء. يُطبَّق نموذج الضوضاء من اللقطة تلقائيًا أثناء المحاكاة.

  • محاكي Aer: توفر المحاكيات من Qiskit Aer محاكاة عالية الأداء تتعامل مع دوائر أكبر ونماذج ضوضاء مخصصة. تتوفر قائمة بخيارات طرق المحاكاة عند استخدام AerSimulator في وضع الاختبار المحلي. اطلع على مثال وضع محاكاة Clifford الذي يوضح كيفية محاكاة دوائر Clifford ذات عدد كبير من الكيوبتات بكفاءة.

    قائمة طرق المحاكاة المتاحة من Qiskit Aer

    راجع توثيق AerSimulator للمزيد من المعلومات.

    • "automatic": طريقة المحاكاة الافتراضية. تختار طريقة المحاكاة تلقائيًا بناءً على الدائرة ونموذج الضوضاء.

    • "statevector": محاكاة كثيفة لمتجه الحالة يمكنها أخذ عينات من نتائج القياس من الدوائر المثالية مع جميع القياسات في نهاية الدائرة. في حالة المحاكاة مع الضوضاء، تأخذ كل لقطة عينة من دائرة عشوائية مع ضوضاء من نموذج الضوضاء.

    • "density_matrix": محاكاة مصفوفة الكثافة التي يمكنها أخذ عينات من نتائج القياس من الدوائر المضوضاة مع جميع القياسات في نهاية الدائرة.

    • "stabilizer": محاكي فعّال لحالات المُثبِّت (stabilizer) من نوع Clifford يمكنه محاكاة دوائر Clifford مع الضوضاء إذا كانت جميع الأخطاء في نموذج الضوضاء هي أيضًا أخطاء Clifford.

    • "extended_stabilizer": محاكي تقريبي لدوائر Clifford + T يعتمد على تحليل الحالة إلى حالة مُثبِّت مرتبة. يزداد عدد الحدود مع عدد البوابات غير المنتمية لـ Clifford (T).

    • "matrix_product_state": محاكي متجه الحالة بالشبكة التنسورية يستخدم تمثيل Matrix Product State (MPS) للحالة. يمكن تنفيذ ذلك مع أو بدون تقليص أبعاد ربط MPS، وفقًا لخيارات المحاكي. السلوك الافتراضي هو عدم التقليص.

    • "unitary": محاكاة كثيفة للمصفوفة الوحدوية لدائرة مثالية. تحاكي المصفوفة الوحدوية للدائرة ذاتها بدلاً من تطور الحالة الكمومية الابتدائية. تدعم هذه الطريقة البوابات فقط ولا تدعم القياس أو إعادة الضبط أو الضوضاء.

    • "superop": محاكاة كثيفة لمصفوفة superoperator لدائرة مثالية أو مضوضاة. تحاكي مصفوفة superoperator للدائرة ذاتها بدلاً من تطور الحالة الكمومية الابتدائية. تدعم هذه الطريقة محاكاة البوابات وإعادة الضبط، سواء كانت مثالية أو مضوضاة، لكنها لا تدعم القياسات.

    • "tensor_network": محاكاة تعتمد على الشبكة التنسورية وتدعم كلًا من متجه الحالة ومصفوفة الكثافة. حاليًا، هذه الطريقة متاحة فقط لوحدات GPU وتعمل بتسريع باستخدام واجهات برمجة تطبيقات cuQuantum cuTensorNet.

ملاحظات
  • يمكنك تحديد جميع خيارات IBM Quantum Compute في وضع الاختبار المحلي. ومع Sampler وEstimator من جهة العميل (Sampler وEstimator، اللذين قُدِّما في qiskit-ibm-runtime v0.50.0)، تُنفَّذ خيارات قمع الأخطاء وتخفيفها محليًا، فيمكنك اختبار طرق مختلفة لتخفيف الأخطاء محليًا قبل استهلاك وقت QPU. راجع اختبار تخفيف الأخطاء محليًا للحصول على مثال.

في السابق، كانت المحاكيات المحلية تتجاهل جميع الخيارات باستثناء shots مع primitives القديمة (من جهة الخادم)، لأن تلك المعالجة كانت تحدث على الخادم فقط.

  • يُنصح بتثبيت Qiskit Aer قبل استخدام الخلفيات الوهمية أو محاكيات Aer عبر تشغيل pip install qiskit-aer. تستخدم الخلفيات الوهمية محاكيات Aer في الخلفية إذا كانت متاحة، للاستفادة من أدائها.

مثال على الخلفيات الوهمية​

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"numpy": "numpy", "qiskit": "qiskit", "qiskit_aer": "qiskit-aer", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
from qiskit_ibm_runtime.fake_provider import FakeManilaV2

# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()

# Run the Sampler job locally using FakeManilaV2
fake_manila = FakeManilaV2()
pm = generate_preset_pass_manager(backend=fake_manila, optimization_level=1)
isa_qc = pm.run(qc)

# You can use a fixed seed to get fixed results.
options = {"simulator": {"seed_simulator": 42}}
sampler = Sampler(mode=fake_manila, options=options)

result = sampler.run([isa_qc]).result()

أمثلة على AerSimulator​

مثال مع الجلسات، بدون ضوضاء:

from qiskit_aer import AerSimulator
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import Session

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler

# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()

# Run the Sampler job locally using AerSimulator.
# Session syntax is supported but ignored because local mode doesn't support sessions.
aer_sim = AerSimulator()
pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
isa_qc = pm.run(qc)
with Session(backend=aer_sim) as session:
sampler = Sampler(mode=session)
result = sampler.run([isa_qc]).result()

لمحاكاة مع الضوضاء، حدد وحدة معالجة كمومية (QPU) وأرسلها إلى Aer. يبني Aer نموذج ضوضاء بناءً على بيانات المعايرة من تلك الوحدة، ويهيئ خلفية Aer بهذا النموذج. إذا كنت تفضل ذلك، يمكنك بناء نموذج ضوضاء مخصص.

تنبيه

قد تتأثر وحدة المعالجة الكمومية بأنواع مختلفة من الضوضاء. نموذج ضوضاء Qiskit Aer المستخدم هنا يحاكي بعضها فقط، وبالتالي من المرجح أن يكون أقل حدة من الضوضاء الموجودة في وحدة المعالجة الكمومية الحقيقية.

للاطلاع على تفاصيل الأخطاء المُضمَّنة عند تهيئة نموذج ضوضاء من وحدة QPU، راجع مرجع Aer API لـ NoiseModel.

مثال مع الضوضاء:

from qiskit_aer import AerSimulator
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler

# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()

service = QiskitRuntimeService()

# Specify a QPU to use for the noise model
real_backend = service.least_busy(operational=True, simulator=False)
aer = AerSimulator.from_backend(real_backend)

# Run the Sampler job locally using AerSimulator.
pm = generate_preset_pass_manager(backend=aer, optimization_level=1)
isa_qc = pm.run(qc)
sampler = Sampler(mode=aer)
result = sampler.run([isa_qc]).result()

محاكاة Clifford​

نظرًا لإمكانية محاكاة دوائر Clifford بكفاءة مع نتائج قابلة للتحقق، تُعد محاكاة Clifford أداة مفيدة جدًا. للاطلاع على مثال تفصيلي، راجع المحاكاة الفعّالة لدوائر Stabilizer مع Qiskit Aer primitives.

مثال:

import numpy as np
from qiskit.circuit.library import efficient_su2

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler

n_qubits = 500 # <---- note this uses 500 qubits!
circuit = efficient_su2(n_qubits)
circuit.measure_all()

rng = np.random.default_rng(1234)
params = rng.choice(
[0, np.pi / 2, np.pi, 3 * np.pi / 2],
size=circuit.num_parameters,
)

# Tell Aer to use the stabilizer (Clifford) simulation method
aer_sim = AerSimulator(method="stabilizer")

pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
isa_qc = pm.run(qc)
sampler = Sampler(mode=aer_sim)
result = sampler.run([isa_qc]).result()

اختبار تخفيف الأخطاء محليًا​

مع Sampler وEstimator من جهة العميل (اللذين قُدِّما في qiskit-ibm-runtime v0.50.0)، يحدث قمع الأخطاء وتخفيفها على العميل بدلًا من الخادم. ونتيجة لذلك، تصبح هذه الخيارات فعّالة الآن في وضع الاختبار المحلي، فيمكنك تجربة طرق مختلفة لتخفيف الأخطاء على خلفية وهمية قبل استهلاك وقت QPU.

ملاحظة

مع primitives القديمة من جهة الخادم، لم يكن لضبط خيار مثل resilience.measure_mitigation على محاكٍ محلي أي تأثير، لأن معالجة التخفيف كانت تعمل على الخادم فقط. أما primitives من جهة العميل فتطبّق هذه المعالجة محليًا.

اعتبارات الذاكرة والحمل الزائد لوقت التشغيل

تنمو تكلفة المحاكاة المحلية مع الضوضاء أُسّيًا مع عدد الكيوبتات، ولا تستطيع معظم الحواسب المحمولة محاكاة أكثر من نحو 32 كيوبتًا. ولأن طرق قمع الأخطاء وتخفيفها تعمل الآن محليًا، فإنها تضيف حملًا زائدًا آخر في الذاكرة ووقت التشغيل فوق المحاكاة الأساسية. للإبقاء على الاختبار المحلي قابلًا للتنفيذ، استخدم أحد الخيارات التالية:

  • خلفية وهمية صغيرة (مثل FakeManilaV2، المستخدمة أدناه).

  • محاكٍ خالٍ من الضوضاء.

  • محاكاة Clifford، التي تتوسّع إلى عدد كبير من الكيوبتات.

يشغّل المثال التالي تخفيف أخطاء القياس باستخدام Estimator على خلفية وهمية. يُطبَّق الخيار measure_mitigation = True الآن على دوائرك محليًا.

from qiskit.circuit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler import generate_preset_pass_manager

# Legacy server-side primitive before qiskit-ibm-runtime v0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime v0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
from qiskit_ibm_runtime.fake_provider import FakeManilaV2

# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)

observable = SparsePauliOp("ZZ")

# Transpile the circuit and observable for the fake backend
fake_manila = FakeManilaV2()
pm = generate_preset_pass_manager(backend=fake_manila, optimization_level=1)
isa_qc = pm.run(qc)
isa_observable = observable.apply_layout(isa_qc.layout)

# Run the Estimator job locally using FakeManilaV2
estimator = Estimator(mode=fake_manila)

# With the client-side Estimator, this option takes effect locally
estimator.options.resilience.measure_mitigation = True

result = estimator.run([(isa_qc, isa_observable)]).result()

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

توصيات