מדריך מהיר ל-Executor
גרסאות חבילות
הקוד בדף זה פותח תוך שימוש בדרישות הבאות. אנחנו ממליצים להשתמש בגרסאות אלה או חדשות יותר.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
samplomatic~=0.18.0
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime samplomatic
בדומה ל-primitive של Sampler, Executor דוגם רגיסטרי פלט מהרצות מעגלים קוונטיים, אך אין לו דיכוי שגיאות או הפחתת שגיאות מובנים. במקום זאת, הוא חלק ממודל ההרצה המכוונת שמספק את הרכיבים ללכידת כוונות עיצוב בצד הלקוח, ומעביר את הייצור היקר של וריאנטי מעגלים לצד השרת. Executor עוקב אחר ההנחיות שניתנו ב-annotations של המעגל ובאפשרויות, מייצר ומקשר ערכי פרמטרים, מריץ את המעגלים המחוברים על החומרה, ומחזיר את תוצאות ההרצה ומטא-הנתונים. הוא לא מקבל עבורך שום החלטות מרומזות ונותן לך שליטה ושקיפות מלאה.
לחבילת Qiskit עדיין אין מחלקת בסיס עבור ה-primitive של Executor.
לפני שמתחילים
חלק מדוגמאות הקוד בדף זה משתמשות ב-samplex, שהוא חלק מחבילת Samplomatic. לכן, לפני הרצת בלוקי קוד אלה, חייבים להתקין את Samplomatic, כפי שמוצג בבלוק הקוד הבא. למידע נוסף, ראו את תיעוד Samplomatic.
pip install samplomatic
# For visualization support, include the visualization dependencies.
# pip install samplomatic[vis]
שלבים לשימוש ב-primitive של Executor
1. אתחול החשבון
מכיוון ש-Qiskit Runtime הוא שירות מנוהל, קודם צריך לאתחל את החשבון שלך. לאחר מכן אפשר לבחור את ה-QPU שרוצים להשתמש בו לחישוב ערך הציפייה.
עקוב אחר השלבים בהגדרת חשבון IBM Cloud® שלך אם עוד לא הגדרת חשבון.
from qiskit_ibm_runtime import QiskitRuntimeService, Executor
from qiskit_ibm_runtime.quantum_program import QuantumProgram
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from samplomatic.transpiler import generate_boxing_pass_manager
from samplomatic import build
# Initialize the service and choose a backend
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend)
<IBMBackend('ibm_fez')>
2. יצירה ו-transpile של Circuit
צריך לפחות Circuit אחד כדי להשתמש ב-primitive של Executor. הוא יכול לכלול פרמטרים אופציונלית.
# Generate the circuit
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.h(1)
circuit.cz(0, 1)
circuit.h(1)
# Using `measure_all` automatically creates the necessary
# classical registers.
circuit.measure_all()
ה-Circuit צריך להיות מוּמר כך שישתמש רק בהוראות הנתמכות על ידי ה-QPU (המכונות מעגלי instruction set architecture (ISA)). השתמש ב-Transpiler לשם כך.
# Transpile the circuit
preset_pass_manager = generate_preset_pass_manager(
backend=backend, optimization_level=0
)
isa_circuit = preset_pass_manager.run(circuit)
3. אתחול QuantumProgram
אתחל QuantumProgram עם עומס העבודה שלך. QuantumProgram מורכב מ-QuantumProgramItems. בדרך כלל, כל פריט מורכב ממעגל, סדרת ערכי פרמטרים, ואפשרית samplex לאקראיות תוכן המעגל. לפרטים מלאים, ראו קלטים ופלטים של Executor.
התא הבא מאתחל QuantumProgram ומציין לבצע 25 shots. לאחר מכן הוא מוסיף את מעגל ה-transpile היעד.
# Initialize an empty program
program = QuantumProgram(shots=25)
# Append the circuit to the program
program.append_circuit_item(isa_circuit)
4. אופציונלי: קיבוץ שערים ומדידות ל-boxes מסומנים
קיבוץ הוראות ל-boxes וסימונן הוא הדרך העיקרית לציין את הכוונה שלך. בדוגמה הבאה, אנחנו משתמשים ב-generate_boxing_pass_manager ובפרמטרי ה-twirling שלו כדי לקבץ שערים דו-Qubit ומדידות ל-boxes ולהוסיף annotation של twirling.
# Generate a boxing pass manager to group gates
# and measurements into boxes and add
# a`Twirl` annotation.
boxes_pm = generate_boxing_pass_manager(
# Add gate twirling
enable_gates=True,
# Add measurement twirling
enable_measures=True,
)
boxed_circuit = boxes_pm.run(isa_circuit)
boxed_circuit.draw("mpl", idle_wires=False)
5. אופציונלי: בניית מעגל template ו-samplex והוספתם לתוכנית
לאחר מכן, השתמש בשיטת build של Samplomatic כדי לייצר את זוג מעגל ה-template וה-samplex. מעגל ה-template שקול מבנית למעגל המקורי. עם זאת, שעריו החד-Qubit מוחלפים בשערים פרמטריים כדי ליישם את ה-annotations שנקבעו (gate ו-measurement twirling, בדוגמה זו). ה-samplex מקודד את כל המידע הנדרש לייצור פרמטרים אקראיים עבור מעגל ה-template.
לאחר ייצור זוג מעגל ה-template וה-samplex, השתמש בשיטת append_samplex_item כדי להוסיף את הזוג לתוכנית.
ראו את תיעוד ה-API של Samplomatic לפרטים מלאים על samplomatic.samplex.Samplex וארגומנטיו.
# Build the template circuit and the samplex
template_circuit, samplex = build(boxed_circuit)
# Append the template circuit and samplex as a `samplex_item`
program.append_samplex_item(
template_circuit,
samplex=samplex,
shape=(num_randomizations := 20,),
)
6. הפעלת Executor וקבלת תוצאות
הרץ את QuantumProgram על Backend של IBM® על ידי שימוש ב-primitive של Executor עם אפשרויות ברירת מחדל. ראו אפשרויות Executor כדי ללמוד על האפשרויות הזמינות.
# Initialize an Executor with the default options
executor = Executor(mode=backend)
# Submit the job
job = executor.run(program)
job
<RuntimeJobV2('d8286580bvlc73d1vmsg', 'executor')>
# Retrieve the result
result = job.result()
התוצאה היא מסוג QuantumProgramResult. ראו קלט ופלט של Executor כדי ללמוד על אובייקט התוצאה.
השלבים הבאים
- נסה כמה דוגמאות Executor.
- הבן קלט ופלט של Executor.
- למד על סמנטיקת שידור של Executor.