דלג לתוכן הראשי

מעבר מסימולטורי ענן לסימולטורים מקומיים

בעולם המחשוב הקוונטי, הבחירה בין שימוש בסימולטורים לבין שימוש בחומרה קוונטית אמיתית היא קריטית להתקדמות בתחום. בעוד שסימולטורים שימושיים לצורכי בדיקה ואיתור שגיאות, בעידן השימושיות הקוונטית הנוכחי, פיתוח קוונטי והתקדמות תעשייתית מחייבים שימוש בחומרה אמיתית. כחלק מהמעבר לשימושיות קוונטית, סימולטורי הענן של IBM Quantum® פרשו מהשירות ב-15 במאי 2024. מדריך זה מסביר את הפרישה ביתר פירוט, וכיצד לעבור מסימולטורים מבוססי ענן, כגון ibmq_qasm_simulator, לסימולטורים מקומיים.

מדוע סימולטורי הענן פורשים?

סימולטורי הענן פורשים מכמה סיבות:

לסימולטורים יש מגבלות

סימולטורים יכולים להיות שימושיים, אך הם מוגבלים מדי לשימוש במחקר או ניסויים:

  • סימולטורים שימושיים להבנת QPUs (יחידות עיבוד קוונטיות) בקנה מידה קטן, אך יכולתם נגמרת בסביבות 50 קיוביטים, גם עם גישה למחשבי-על בעלי ביצועים גבוהים. תקרה זו נובעת מהגדילה האקספוננציאלית במשאבי המחשוב הנדרשים לסימולציה של מחשבים קוונטיים גדולים יותר (ראה Massively parallel quantum computer simulator, eleven years later להסבר מלא). חקירת מחשבים קוונטיים של 100 קיוביטים ומעלה דורשת חומרה אמיתית.

  • אמנם יש סימולטורים המציעים מודלי רעש, אך תיאור מלא של הדינמיקה של QPU אמיתי הוא בעיה קשה מאוד. חומרה קוונטית מציעה לחוקרים אפשרות להתמודד עם האתגרים הגלומים במחשבים קוונטיים, כגון רעש, שגיאות ודה-קוהרנטיות, בסביבת בדיקה ריאליסטית.

שימוש בחומרה קוונטית מפתח כישורים ייחודיים

אינטראקציה עם חומרה קוונטית מפתחת כישורים וניסיון שאי-אפשר להשיג רק באמצעות סימולטורים:

  • אינטראקציה ישירה עם חומרה קוונטית מפתחת כישורים, מכיוון שעליך ליישם או להשתמש בטכניקות הפחתת שגיאות או דיכוי שגיאות לצורך חישוב אמין.

  • ניסיון מעשי עם חומרה קוונטית מפתח הבנה עמוקה יותר של תופעות קוונטיות וכיצד להתאים אלגוריתמים למאפייני המעבדים הקוונטיים.

  • עבודה עם חומרה קוונטית מניבה תובנות מעשיות לגבי האתגרים וההזדמנויות של המחשוב הקוונטי, ומחזקת את יכולת המפתחים להניע חדשנות בתחום.

אלגוריתמים צריכים להיות מותאמים לחומרה קוונטית

אלגוריתמים קוונטיים מוצלחים חייבים להיות מותאמים לניצול יכולות החומרה הקוונטית, תוך אופטימיזציה של ביצועים ויעילות.

  • חומרה קוונטית מספקת ייצוג מדויק יותר של QPUs מהעולם האמיתי בהשוואה לסימולטורים.

  • כיוון עדין של אלגוריתמים לחומרה קוונטית כולל התאמה של ansatz, מימוש Circuit, פרמטרים ותצורה למיקסום הביצועים. תהליך זה מושג בצורה הטובה ביותר דרך ניסוי ישיר עם חומרה קוונטית.

מתי כדאי להשתמש בסימולטורים?

יש להשתמש בסימולטורים קוונטיים כדי לסייע בפיתוח ובדיקת תוכניות לפני כיוונון עדין שלהן ושליחתן לחומרה קוונטית. סימולטורים מקומיים יכולים לבצע זאת בביצועים ויעילות טובים. ניתן לסמלץ Circuit מסוג Clifford ביעילות רבה ולאמת את התוצאות, וזוהי דרך שימושית לצבור ביטחון בניסוי.

הערה

מצב הבדיקה המקומי אינו כולל הפחתת שגיאות או דיכוי שגיאות מובנים. במקום זאת, עליך לציין אפשרויות אלו במפורש. ראה הגדרת הפחתת שגיאות עבור Qiskit Runtime לפרטים.

מעבר לסימולטורים מקומיים

עם qiskit-ibm-runtime גרסה 0.22.0 ומעלה, תוכל להשתמש במצב בדיקה מקומי כתחליף לסימולטורי הענן. בהתאם לצרכים שלך, ישנן מספר דרכים להשתמש במצב בדיקה מקומי. כדי להתחיל, ציין אחד מה-fake backends ב-qiskit_ibm_runtime.fake_provider או ציין Qiskit Aer backend בעת יצירת primitive או session.

הנחיות לבחירת סימולטור

השתמש בטבלה הבאה כדי לעזור בבחירת סימולטור.

סימולטורFake BackendsAerSimulatorסימולציית Clifford
מטרהמחקה QPUs ספציפיים של IBM® באמצעות תמונות מצבסימולציה כללית בעלת ביצועים גבוהיםסימולציה יעילה עבור Circuit מסוג Clifford
מודל רעשמיישם אוטומטית מודל רעש מתמונות מצב של QPUמותאם אישית או מבוסס על נתוני כיול QPU אמיתיאידיאלי לסימולציות ללא רעש
גודל Circuitמוגבל ליכולות ה-QPU המחוקהיכול לטפל ב-Circuit גדולים יותרמתאים ל-Circuit גדולים מאוד (מאות קיוביטים)
תוצאותזמן ריצה מתון לבדיקות ספציפיות ל-QPUזמן ריצה קצר יותר למגוון רחב של סימולציותמהיר ביותר, מתאים ל-Circuit מסוג stabilizer
שימושבדיקת Transpiler והתנהגות ספציפית ל-QPUפיתוח כללי, מודלי רעש מותאמים אישיתCircuit גדולים מסוג stabilizer, תיקון שגיאות
הערה

עבור רוב המשתמשים, AerSimulator הוא בחירה טובה, בשל גמישותו וביצועיו. עם זאת, אם עבודתך מכוונת ל-QPU ספציפי, fake backend עשוי להיות בחירה טובה יותר.

Fake backends

ה-fake backends מחקים את ההתנהגות של QPUs של IBM באמצעות תמונות מצב. תמונות המצב מכילות מידע חשוב על ה-QPU, כגון מפת הצימוד, שערי הבסיס ומאפייני הקיוביטים, שהם שימושיים לבדיקת ה-Transpiler וביצוע סימולציות עם רעש של ה-QPU. מודל הרעש מתמונת המצב מיושם אוטומטית במהלך הסימולציה.

דוגמה:

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, המספק סימולציה בעלת ביצועים גבוהים יותר שיכולה לטפל ב-Circuit גדולים יותר ו-מודלי רעש מותאמים אישית. הוא תומך גם במצב סימולציית Clifford, שיכול לסמלץ ביעילות Circuit מסוג Clifford עם מספר גדול של קיוביטים.

דוגמה עם sessions, ללא רעש:

זהירות

בלוק הקוד הבא יחזיר שגיאה למשתמשים בתכנית Open Plan, מכיוון שהוא משתמש ב-sessions. עומסי עבודה ב-Open Plan יכולים לרוץ רק ב-מצב job או ב-מצב batch.

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()

לסימולציה עם רעש, ציין QPU (חומרה קוונטית) והגש אותו ל-Aer. Aer בונה מודל רעש המבוסס על נתוני הכיול של אותו QPU ויוצר 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

מכיוון ש-Circuit מסוג Clifford ניתן לסמלץ ביעילות עם תוצאות שניתן לאמת, סימולציית Clifford היא כלי שימושי מאוד. לדוגמה מעמיקה, ראה סימולציה יעילה של Circuit מסוג stabilizer עם 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()