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

מדריך מהיר ל-Sampler

המשימה המרכזית של Sampler היא דגימת רגיסטר הפלט מהרצה של מעגל קוונטי אחד או יותר. מעגלים דינמיים ומעגלים פרמטריים מתקבלים כקלט (אם מוגשים מעגלים פרמטריים, יש לספק גם את ערכי הפרמטרים). Sampler תומך גם ב-dynamical decoupling ו-twirling מובנים לצורך דיכוי שגיאות.

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

גרסאות חבילות

הקוד בדף זה פותח תוך שימוש בדרישות הבאות. אנחנו ממליצים להשתמש בגרסאות אלה או חדשות יותר.

qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime

שלבים לשימוש ב-primitive של Sampler

1. אתחול החשבון

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

עקוב אחר השלבים בנושא הגדרת חשבון IBM Cloud שלך אם עוד לא הגדרת חשבון.

שערים שברים

כדי להשתמש ב-שערים שברים הנתמכים החדשים, הגדר use_fractional_gates=True בעת בקשת backend ממופע QiskitRuntimeService. לדוגמה:

service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)

זוהי תכונה ניסיונית שעשויה להשתנות בעתיד.

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)

2. יצירת Circuit

צריך לפחות Circuit אחד כקלט ל-primitive של Sampler.

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

circuit = efficient_su2(127, entanglement="linear")
circuit.measure_all()
# The circuit is parametrized, so we will define the parameter values for execution
param_values = np.random.rand(circuit.num_parameters)

ה-Circuit וה-observable צריכים להיות מוּמרים כך שישתמשו רק בהוראות הנתמכות על ידי ה-QPU (המכונות מעגלי instruction set architecture (ISA)). השתמש ב-Transpiler לשם כך.

from qiskit.transpiler import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")
>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])

3. אתחול Sampler של Qiskit Runtime

כשמאתחלים את Sampler, משתמשים בפרמטר mode כדי לציין את המצב שרוצים שהוא יפעל בו. הערכים האפשריים הם אובייקטי batch, session או backend למצב הרצת batch, session ו-job בהתאמה. למידע נוסף, ראו מבוא למצבי הרצה של Qiskit Runtime. שים לב שמשתמשי Open Plan לא יכולים להגיש עבודות session.

from qiskit_ibm_runtime import SamplerV2 as Sampler

sampler = Sampler(mode=backend)

4. הפעלת Sampler וקבלת תוצאות

לאחר מכן, הפעל את מתודת run() כדי לייצר את הפלט. ה-Circuit וסדרות ערכי הפרמטרים האופציונליות מוזנות כ-tuples מסוג primitive unified bloc (PUB).

job = sampler.run([(isa_circuit, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")
>>> Job ID: d82863mgbeec73alf9sg
>>> Job Status: QUEUED
result = job.result()

# Get results for the first (and only) PUB
pub_result = result[0]
print(
f"First ten results for the 'meas' output register: "
f"{pub_result.data.meas.get_bitstrings()[:10]}"
)
First ten results for the 'meas' output register: ['1100110011001011111111111010000010001010100100011000001011001101000110011000110100100100101010111001110100100000000011111100000', '0101001001010000100111000110110001001101010110110000110111101110001100000001000001111111101110000000010011111100100110001101000', '0111111110011011000011110111010111101100110010001010010001100000000100000000001010101010111010110000001100100001010110000101000', '0000110011001100110011101100000111011001110100001100001100110111010100101010001010000011000111001010101111110110100110001010000', '0011110011100001100110111001000011011111011110111100000110001000111011101101000110011011101011001110110000010010001100100011001', '1010001000010101011100101010101001101000100010011011100110010111010001110111110010100010111010011010110011001101100110010000010', '0001110010001011001100010000000001001101001110101100110011101111100100100110110010101000011010101000101011101011010100000101010', '1110100100001100110010000010011010111000001010110010111111011010010100110011100101110011101111100001010011100110011000101001001', '1101011100110101011001010100011001110100001011110101101110111011011001100110001011000010001100100011000000110101011100111111000', '1101000110000000101010000000110000011000000000010110011001001000001110101110010111011010101100011000100100110000000000000011001']

השלבים הבאים

המלצות