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

الانتقال من المحاكيات السحابية إلى المحاكيات المحلية

في الحوسبة الكمية، يُعدّ الاختيار بين المحاكيات والأجهزة الكمية الحقيقية قرارًا محوريًا للتقدم في هذا المجال. رغم أن المحاكيات مفيدة للاختبار وتصحيح الأخطاء، فإن عصر الفائدة الكمية يستوجب استخدام أجهزة حقيقية لتطوير الحوسبة الكمية والنهوض بها صناعيًا. ضمن هذا التحول نحو الفائدة الكمية، تم إيقاف محاكيات 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 BackendsAerSimulatorمحاكاة 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()