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

ציון אפשרויות Sampler

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

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

qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1

אפשר להשתמש באפשרויות כדי להתאים אישית את הפרימיטיב Sampler. החלק הזה מתמקד בדרך לציין אפשרויות פרימיטיב של Qiskit Runtime. בעוד שהממשק של שיטת run() של הפרימיטיבים משותף לכל המימושים, האפשרויות שלהם אינן כך. עיין במקורות ה-API המתאימים לקבלת מידע על אפשרויות qiskit.primitives.BackendSamplerV2 ו-qiskit_aer.primitives.SamplerV2.

הגדרת אפשרויות Sampler

אפשר להגדיר אפשרויות בעת אתחול Sampler, אחרי אתחולו, או לעדכן את האפשרויות לאחר שה-Sampler אותחל. להוראות שימוש בטכניקות אלה, ראה את הנושא מבוא לאפשרויות.

בנוסף, אפשר להגדיר את ערך shots בשיטת run(), כפי שמתואר בסעיף הבא.

שיטת Run()

הערכים היחידים שאפשר להעביר ל-run() הם אלה שמוגדרים בממשק. כלומר, shots. זה מחליף כל ערך שנקבע עבור default_shots בריצה הנוכחית.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager

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

circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)

transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)

sampler = Sampler(mode=backend)
# Default shots to use if not specified in run()
sampler.options.default_shots = 500
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d8286680bvlc73d1vmu0', 'sampler')>

מקרים מיוחדים

Shots

שיטת SamplerV2.run מקבלת שתי ארגומנטים: רשימה של PUBs, שכל אחד מהם יכול לציין ערך shots ספציפי ל-PUB, וארגומנט keyword של shots. ערכי ה-shots האלה הם חלק מממשק הביצוע של Sampler, ועצמאיים מאפשרויות ה-Runtime Sampler. הם גוברים על כל ערך שצוין כאפשרויות כדי לציית לאבסטרקציה של Sampler.

אם shots לא צוין על ידי אף PUB ולא בארגומנט keyword של הריצה (או שכולם None), אזי ישמש ערך ה-shots מהאפשרויות, בעיקר default_shots.

לסיכום, זה סדר העדיפות לציון shots ב-Sampler, עבור כל PUB מסוים:

  1. אם ה-PUB מציין shots, השתמש בערך הזה.
  2. אם ארגומנט keyword shots צוין ב-run, השתמש בערך הזה.
  3. אם twirling מופעל (True כברירת מחדל), אזי משמש מכפלת num_randomizations ו-shots_per_randomization, כפי שצוינו כ-אפשרויות twirling.
  4. אם sampler.options.default_shots צוין, השתמש בערך הזה.

לכן, אם shots צוינו בכל המקומות האפשריים, ישמש זה בעל העדיפות הגבוהה ביותר (shots שצוינו ב-PUB).

הערה

למרות ש-shots שצוינו ב-PUB וב-run בעלי עדיפות גבוהה יותר, המשימה תיכשל אם twirling מופעל ומכפלת num_randomizations ו-shots_per_randomization קטנה מערך ה-shots. בתרחיש זה, SamplerV2 אינו מסוגל להקצות את ה-shots בין ה-num_randomizations שצוינו.

דוגמה:

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager

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

circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)

transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)

# Setting shots during primitive initialization
sampler = Sampler(mode=backend, options={"default_shots": 4096})

# Setting options after primitive initialization
# This uses auto-complete.
sampler.options.default_shots = 2000

# This does bulk update. The value for default_shots is overridden
# if you specify shots with run() or in the PUB.
sampler.options.update(
default_shots=1024, dynamical_decoupling={"sequence_type": "XpXm"}
)

# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d82868ugbeec73alfa80', 'sampler')>

האפשרויות הזמינות

הטבלה הבאה מתעדת אפשרויות מהגרסה האחרונה של qiskit-ibm-runtime. כדי לראות גרסאות אפשרויות ישנות יותר, בקר ב-מקור ה-API של qiskit-ibm-runtime ובחר גרסה קודמת.

default_shots

המספר הכולל של shots לשימוש לכל מעגל לכל תצורה.

אפשרויות: מספר שלם >= 0

ברירת מחדל: None

תיעוד API של default_shots

dynamical_decoupling

שליטה בהגדרות הפחתת שגיאות של dynamical decoupling.

תיעוד API של dynamical_decoupling

dynamical_decoupling.enable

אפשרויות: True, False

ברירת מחדל: False

dynamical_decoupling.extra_slack_distribution

אפשרויות: middle, edges

ברירת מחדל: middle

dynamical_decoupling.scheduling_method

אפשרויות: asap, alap ברירת מחדל: alap

dynamical_decoupling.sequence_type

אפשרויות: XX, XpXm, XY4 ברירת מחדל: XX

dynamical_decoupling.skip_reset_qubits

אפשרויות: True, False ברירת מחדל: False

environment

תיעוד API של environment

environment.job_tags

רשימת תגיות.

אפשרויות: None

ברירת מחדל: None

environment.log_level

אפשרויות: DEBUG, INFO, WARNING, ERROR, CRITICAL

ברירת מחדל: WARNING

environment.private

אפשרויות: True, False

ברירת מחדל: False

execution

תיעוד API של execution

execution.init_qubits

האם לאפס את הקיוביטים למצב היסוד לכל shot.

אפשרויות: True, False

ברירת מחדל: True

execution.rep_delay

ההשהיה בין מדידה למעגל קוונטי הבא.

אפשרויות: ערך בטווח שסופק על ידי backend.rep_delay_range

ברירת מחדל: נקבע על ידי backend.default_rep_delay

execution.meas_type

אפשרויות: classified, kerneled, avg_kerneled

ברירת מחדל: classified

max_execution_time

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

אפשרויות: מספר שלם של שניות בטווח [1, 10800]

ברירת מחדל: 10800 (3 שעות)

תיעוד API של max_execution_time

simulator

אפשרויות להעברה בעת סימולציה של Backend

תיעוד API של simulator

simulator.basis_gates

אפשרויות: רשימת שמות שערי בסיס להרחבה אליהם

ברירת מחדל: קבוצת כל שערי הבסיס הנתמכים על ידי סימולטור Qiskit Aer

simulator.coupling_map

אפשרויות: רשימת אינטראקציות של שני קיוביטים מכוונות

ברירת מחדל: None, שמשמעותו אין אילוצי קישוריות (קישוריות מלאה).

simulator.noise_model

אפשרויות: Qiskit Aer NoiseModel, או ייצוגו

ברירת מחדל: None

simulator.seed_simulator

אפשרויות: מספר שלם

ברירת מחדל: None

twirling

אפשרויות Twirling

תיעוד API של twirling

twirling.enable_gates

אפשרויות: True, False

ברירת מחדל: False

twirling.enable_measure

אפשרויות: True, False

ברירת מחדל: False

twirling.num_randomizations

אפשרויות: auto, מספר שלם >= 1

ברירת מחדל: auto

twirling.shots_per_randomization

אפשרויות: auto, מספר שלם >= 1

ברירת מחדל: auto

twirling.strategy

אפשרויות: active, active-circuit, active-accum, all

ברירת מחדל: active-accum

experimental

אפשרויות ניסיוניות, כשזמינות.

תאימות תכונות

לא ניתן להשתמש בתכונות Runtime מסוימות יחד במשימה אחת. לחץ על הכרטיסייה המתאימה לקבלת רשימת התכונות שאינן תואמות לתכונה הנבחרת:

מעגלים דינמיים

לא תואם עם:

  • Dynamical decoupling

הערות נוספות:

  • ניתן להחיל Gate twirling על מעגלים דינמיים, אך רק על שערים שאינם בתוך בלוקים מותנים. Measurement twirling ניתן להחיל רק על מדידות סופיות.
  • תואם לשערים שברייים בעת שימוש ב-qiskit-ibm-runtime v0.42.0 ומעלה.
Dynamical decoupling

לא תואם עם:

  • מעגלים דינמיים
שערים שברייים

לא תואם עם:

  • Gate twirling

תואם למעגלים דינמיים בשימוש ב-qiskit-ibm-runtime v0.42.0 ומעלה.

Gate twirling

לא תואם עם:

  • שערים שברייים
  • Stretches

הערות נוספות:

  • ניתן להחיל Gate twirling על מעגלים דינמיים, אך רק על שערים שאינם בתוך בלוקים מותנים.
  • Measurement twirling ניתן להחיל רק על מדידות סופיות.
  • Measurement twirling אינו תואם להוראה store.
  • לא עובד עם משלבים שאינם Clifford.

השלבים הבאים

המלצות