الانتقال إلى المحاكيات المحلية
في الحوسبة الكمية، يُعدّ الاختيار بين المحاكيات والأجهزة الكمية الحقيقية قرارًا محوريًا للتقدم في هذا المجال. رغم أن المحاكيات مفيدة للاختبار وتصحيح الأخطاء، فإن عصر الفائدة الكمية يستوجب استخدام أجهزة حقيقية لتطوير الحوسبة الكمية والنهوض بها صناعيًا. ضمن هذا التحول نحو الفائدة الكمية، تم إيقاف محاكيات IBM Quantum® السحابية في 15 مايو 2024. يشرح هذا الدليل تفاصيل هذا الإيقاف وكيفية الانتقال من المحاكيات السحابية، كـ ibmq_qasm_simulator، إلى المحاكيات المحلية.
لماذا يُوقَف استخدام المحاكيات السحابية؟
يُوقَف استخدام المحاكيات السحابية لعدة أسباب:
للمحاكيات قيود
المحاكيات مفيدة، لكنها محدودة جدًا للبحث العلمي أو التجريب:
-
تُعدّ المحاكيات قيّمة لفهم وحدات المعالجة الكمية صغيرة الحجم (QPUs)، غير أن جدواها تبلغ حدّها الأقصى عند نحو 50 كيوبت حتى مع توافر الحواسيب العملاقة عالية الأداء. ينبثق هذا السقف من التضاعف الأسي في الموارد الحسابية اللازمة لمحاكاة حواسيب كمية أكبر (راجع Massively parallel quantum computer simulator, eleven years later للاطلاع على الشرح الكامل). يستلزم استكشاف حواسيب كمية بمئة كيوبت وما فوق استخدامَ الأجهزة الحقيقية.
-
رغم أن بعض المحاكيات توفر نماذج ضوضاء، يظل التقاط الديناميكيات الكاملة لوحدة معالجة كمية حقيقية مسألةً بالغة الصعوبة. تمنح الأجهزة الكمية الباحثين فرصة مواجهة التحديات المتأصلة في الحواسيب الكمية، كالضوضاء والأخطاء وفقدان الترابط الكمي، في بيئة اختبار واقعية.
التعامل مع الأجهزة الكمية يبني مهارات فريدة
يُنمّي التفاعل المباشر مع الأجهزة الكمية مهارات وخبرات لا يمكن اكتسابها بالاعتماد على المحاكيات وحدها:
-
يبني التفاعل المباشر مع الأجهزة الكمية مهاراتك، إذ يستوجب تطبيق تقنيات تخفيف الأخطاء أو قمعها لضمان موثوقية الحسابات.
-
يُعمّق العمل الميداني مع الأجهزة الكمية فهم الظواهر الكمية وكيفية تكييف الخوارزميات لتناسب خصائص المعالجات الكمية.
-
يُسفر الانخراط مع الأجهزة الكمية عن رؤى عملية حول تحديات الحوسبة الكمية وفرصها، مما يعزز قدرة المطورين على قيادة الابتكار في هذا المجال.
ينبغي تكييف الخوارزميات للعمل على الأجهزة الكمية
يجب تكييف الخوارزميات الكمية الناجحة لاستثمار إمكانات الأجهزة الكمية وتحقيق أفضل أداء وكفاءة.
-
توفر الأجهزة الكمية تمثيلًا أكثر دقة لوحدات المعالجة الكمية الحقيقية مقارنةً بالمحاكيات.
-
تضبيط الخوارزميات للعمل على الأجهزة الكمية يعني ضبط الـ ansatz وتنفيذات الدوائر والمعاملات والضبط الإعدادي لتحقيق أقصى أداء. يتحقق هذا بأفضل صورة من خلال التجريب المباشر على الأجهزة الكمية.
متى يجب استخدام المحاكيات؟
ينبغي استخدام المحاكيات الكمية لمساعدتك في تطوير البرامج واختبارها قبل ضبطها الدقيق وإرسالها إلى الأجهزة الكمية. تؤدي المحاكيات المحلية هذه المهمة بأداء وكفاءة جيدين. يمكن محاكاة دوائر Clifford بكفاءة عالية والتحقق من نتائجها، وهو أسلوب مفيد لاكتساب الثقة في التجربة.
وضع الاختبار المحلي لا يتضمن تخفيف الأخطاء أو قمعها بشكل مدمج. بدلًا من ذلك، يجب تحديد هذه الخيارات بصراحة. راجع ضبط تخفيف الأخطاء لـ Qiskit Runtime للتفاصيل.
الانتقال إلى المحاكيات المحلية
باستخدام qiskit-ibm-runtime 0.22.0 أو إصدار أحدث، يمكنك استخدام وضع الاختبار المحلي بديلًا عن المحاكيات السحابية. تتوفر عدة طرق لاستخدام وضع الاختبار المحلي حسب احتياجاتك. للبدء، حدد أحد الـ fake backends في qiskit_ibm_runtime.fake_provider أو حدد Qiskit Aer backend عند إنشاء primitive أو session.
إرشادات اختيار المحاكي
استعن بالجدول التالي لاختيار المحاكي المناسب.
| المحاكي | Fake Backends | AerSimulator | محاكاة Clifford |
|---|---|---|---|
| الغرض | يحاكي وحدات معالجة IBM® الكمية المحددة باستخدام لقطات | محاكاة عامة عالية الأداء | محاكاة فعّالة لدوائر Clifford |
| نموذج الضوضاء | يُطبّق نموذج الضوضاء تلقائيًا من لقطات وحدة المعالجة | مخصص أو مبني على بيانات معايرة وحدة معالجة حقيقية | مثالي للمحاكاة الخالية من الضوضاء |
| حجم الدائرة | محدود بإمكانات وحدة المعالجة المُحاكاة | يتعامل مع دوائر أكبر | مناسب للدوائر الكبيرة جدًا (مئات الكيوبتات) |
| النتائج | وقت تشغيل معتدل لاختبارات وحدات معالجة محددة | وقت تشغيل أقصر لمجموعة واسعة من المحاكاة | سريع للغاية، مناسب لدوائر المثبِّت |
| حالة الاستخدام | اختبار المُحوِّل والسلوك الخاص بوحدة المعالجة | التطوير العام، نماذج ضوضاء مخصصة | دوائر المثبِّت الكبيرة، تصحيح الأخطاء |
لمعظم المستخدمين، يُعدّ AerSimulator خيارًا جيدًا نظرًا لمرونته وأدائه. غير أنه إذا كان عملك يستهدف وحدة معالجة كمية معينة، فقد يكون الـ fake backend خيارًا أفضل.
الـ Fake Backends
تُحاكي الـ fake backends سلوك وحدات معالجة IBM الكمية باستخدام لقطات. تحتوي هذه اللقطات على معلومات مهمة حول وحدة المعالجة الكمية، كخريطة الاقتران وبوابات الأساس وخصائص الكيوبتات، وهي مفيدة لاختبار المُحوِّل وإجراء محاكاة مع ضوضاء. يُطبَّق نموذج الضوضاء من اللقطة تلقائيًا أثناء المحاكاة.
مثال:
from qiskit.circuit.library import RealAmplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
from qiskit_ibm_runtime import SamplerV2 as Sampler, QiskitRuntimeService
service = QiskitRuntimeService()
# 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
يمكنك استخدام وضع الاختبار المحلي مع محاكيات من Qiskit Aer، الذي يوفر محاكاة أعلى أداءً تتعامل مع دوائر أكبر ونماذج ضوضاء مخصصة. كما يدعم وضع محاكاة Clifford الذي يُحاكي دوائر Clifford ذات عدد كبير من الكيوبتات بكفاءة عالية.
مثال باستخدام sessions، بدون ضوضاء:
كتلة الكود التالية ستُعيد خطأً للمستخدمين على الخطة المجانية (Open Plan)، لأنها تستخدم sessions. يمكن لأعباء العمل على الخطة المجانية التشغيل فقط في وضع الوظيفة أو وضع الدُفعة.
from qiskit_aer import AerSimulator
from qiskit.circuit.library import RealAmplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import Session, SamplerV2 as Sampler, QiskitRuntimeService
service = QiskitRuntimeService()
# 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()
result = sampler.run([isa_qc]).result()
للمحاكاة مع ضوضاء، حدد وحدة معالجة كمية (جهاز كمي حقيقي) وأرسلها إلى Aer. سيبني Aer نموذج ضوضاء بناءً على بيانات المعايرة من وحدة المعالجة تلك وينشئ Aer backend مزودًا بهذا النموذج. يمكنك أيضًا بناء نموذج ضوضاء بنفسك إذا أردت.
مثال مع الضوضاء:
from qiskit_aer import AerSimulator
from qiskit.circuit.library import RealAmplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
service = QiskitRuntimeService()
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Specify a QPU to use for the noise model
real_backend = service.backend("ibm_brisbane")
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 أداةً بالغة الفائدة. للاطلاع على مثال تفصيلي، راجع المحاكاة الفعّالة لدوائر المثبِّت باستخدام Qiskit Aer primitives.
مثال:
import numpy as np
from qiskit.circuit.library import EfficientSU2
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
service = QiskitRuntimeService()
n_qubits = 500 # <---- note this uses 500 qubits!
circuit = EfficientSU2(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_circuit = pm.run(circuit)
sampler = Sampler(mode=aer_sim)
result = sampler.run([(isa_circuit, params)]).result()