ציון אפשרויות Estimator
גרסאות חבילות
הקוד בדף זה פותח תוך שימוש בדרישות הבאות. אנחנו ממליצים להשתמש בגרסאות אלה או בגרסאות חדשות יותר.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
אפשר להשתמש באפשרויות כדי להתאים אישית את הפרימיטיב Estimator. בעוד שהממשק של שיטת run() של הפרימיטיבים משותף לכל המימושים, האפשרויות שלהם אינן כך. עיין במקורות ה-API לקבלת מידע על אפשרויות qiskit.primitives.BaseEstimatorV2 ו-qiskit_aer.BaseEstimatorV2.
Notes :
- אפשר לראות את האפשרויות הזמינות ולעדכן ערכי אפשרויות במהלך אתחול Estimator או אחריו.
- השתמש בשיטת
update()להחיל שינויים על מאפיין ה-options. - אם לא מציינים ערך לאפשרות, היא מקבלת ערך מיוחד של
Unsetומשתמשים בברירות המחדל של השרת. - מאפיין ה-
optionsהוא מסוג Pythondataclass. אפשר להשתמש בשיטתasdictהמובנית כדי להמיר אותו למילון.
הגדרת אפשרויות Estimator
אפשר להגדיר אפשרויות בעת אתחול Estimator, אחרי אתחולו, או (לגבי precision בלבד) בשיטת run().
אתחול פרימיטיב
אפשר להעביר מופע של מחלקת האפשרויות או מילון בעת אתחול Estimator, שאז יוצר עותק של אפשרויות אלה. לפיכך, שינוי המילון המקורי או מופע האפשרויות אינו משפיע על האפשרויות שבבעלות הפרימיטיב.
מחלקת אפשרויות
בעת יצירת מופע של מחלקת EstimatorV2, אפשר להעביר מופע של מחלקת האפשרויות. אפשרויות אלה יוחלו בעת שימוש ב-run() לביצוע החישוב. ציין את האפשרויות בפורמט הזה: options.option.sub-option.sub-sub-option = choice. לדוגמה: options.dynamical_decoupling.enable = True
דוגמה:
# 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 EstimatorV2 as Estimator
from qiskit_ibm_runtime.options import EstimatorOptions
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
options = EstimatorOptions(
resilience_level=2,
resilience={"zne_mitigation": True, "zne": {"noise_factors": [1, 3, 5]}},
)
# or...
options = EstimatorOptions()
options.resilience_level = 2
options.resilience.zne_mitigation = True
options.resilience.zne.noise_factors = [1, 3, 5]
estimator = Estimator(mode=backend, options=options)
מילון
אפשר לציין אפשרויות כמילון בעת אתחול Estimator.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Setting options during initialization
estimator = Estimator(
backend,
options={
"resilience_level": 2,
"resilience": {
"zne_mitigation": True,
"zne": {"noise_factors": [1, 3, 5]},
},
},
)
עדכון אפשרויות לאחר אתחול
אפשר לציין את האפשרויות בפורמט הזה: estimator.options.option.sub-option.sub-sub-option = choice כדי לנצל את השלמה אוטומטית, או להשתמש בשיטת update() לעדכונים בכמות.
מחלקת האפשרויות של EstimatorV2 (EstimatorOptions) אינה צריכה להיות מופעלת אם מגדירים אפשרויות לאחר אתחול הפרימיטיב.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
estimator = Estimator(mode=backend)
# Setting options after initialization
# This uses auto-complete.
estimator.options.default_precision = 0.01
# This does bulk update.
estimator.options.update(
default_precision=0.02, resilience={"zne_mitigation": True}
)
שיטת Run()
הערכים היחידים שאפשר להעביר ל-run() הם אלה שמוגדרים בממשק. כלומר, precision עבור Estimator. זה מחליף כל ערך שנקבע עבור default_precision בריצה הנוכחית.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
observable = SparsePauliOp("Z" * 3)
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
isa_observable1 = observable.apply_layout(transpiled1.layout)
isa_observable2 = observable.apply_layout(transpiled2.layout)
estimator = Estimator(mode=backend)
# Default precision to use if not specified in run()
estimator.options.default_precision = 0.01
# Run two circuits, requiring a precision of .02 for both.
estimator.run(
[(transpiled1, isa_observable1), (transpiled2, isa_observable2)],
precision=0.02,
)
<RuntimeJobV2('d7amh42k86tc73a1sa20', 'estimator')>
מקרה מיוחד: דיוק
שיטת EstimatorV2.run מקבלת שתי ארגומנטים: רשימה של PUBs, שכל אחד מהם יכול לציין ערך דיוק ספציפי ל-PUB, וארגומנט keyword של דיוק. ערכי הדיוק האלה הם חלק מממשק הביצוע של Estimator, ועצמאיים מאפשרויות ה-Runtime Estimator. הם גוברים על כל ערך שצוין כאפשרויות כדי לציית לאבסטרקציה של Estimator.
אם precision לא צוין על ידי אף PUB ולא בארגומנט keyword של הריצה (או שכולם None), אזי ישמש ערך הדיוק מהאפשרויות, בעיקר default_precision.
פרמטרי הדיוק האלה מיועדים רק לציון דיוק יעד, והתוצאות אינן מובטחות להגיע לדיוק שצוין.
שים לב שאפשרויות Estimator מכילות הן default_shots והן default_precision. עם זאת, מכיוון שgate-twirling מופעל כברירת מחדל, מכפלת num_randomizations ו-shots_per_randomization גוברת על שתי אפשרויות אלה.
ספציפית, עבור כל Estimator PUB:
- אם ה-PUB מציין דיוק, השתמש בערך הזה.
- אם ארגומנט keyword של דיוק צוין ב-
run, השתמש בערך הזה. - אם
twirlingמופעל (True כברירת מחדל), אזי משמש מכפלתnum_randomizationsו-shots_per_randomization, כפי שצוינו ב-אפשרויותtwirling. - אם
estimator.options.default_shotsצוין, השתמש בערך הזה לשליטה בכמות הנתונים. - אם
estimator.options.default_precisionצוין, השתמש בערך הזה.
לדוגמה, אם הדיוק צוין בכל ארבעת המקומות, ישמש זה בעל העדיפות הגבוהה ביותר (דיוק שצוין ב-PUB).
למרות שדיוק שצוין ב-PUB ובארגומנט run בעל עדיפות גבוהה יותר, המשימה נכשלת אם twirling מופעל ומכפלת num_randomizations ו-shots_per_randomization קטנה ממספר ה-shots הנדרש להשגת הדיוק. בתרחיש זה, EstimatorV2 אינו מסוגל להקצות את ה-shots בין ה-num_randomizations שצוינו.
הדיוק משתנה בצורה הפוכה לשימוש. כלומר, ככל שהדיוק נמוך יותר, כך לוקח יותר זמן QPU להריץ.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
observable = SparsePauliOp("Z" * 3)
circuit = random_iqp(3)
circuit.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
isa_circuit = pass_manager.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)
# Setting precision during primitive initialization
estimator = Estimator(mode=backend, options={"default_precision": 0.05})
# Run with precision=0.02, overwriting the default.
estimator.run(
[(isa_circuit, isa_observable1)],
precision=0.02,
)
<RuntimeJobV2('d8286b00bvlc73d1vn50', 'estimator')>
כיבוי כל הפחתת השגיאות וסיפוי השגיאות
אפשר לכבות את כל הפחתת הסיפוי של שגיאות אם אתה, לדוגמה, עורך מחקר על טכניקות ההפחתה שלך עצמך. לשם כך, הגדר resilience_level = 0.
דוגמה:
from qiskit_ibm_runtime import EstimatorV2 as Estimator, QiskitRuntimeService
# Define the service. This allows you to access an IBM QPU.
service = QiskitRuntimeService()
# Get a backend
backend = service.least_busy(operational=True, simulator=False)
# Define Estimator
estimator = Estimator(backend)
options = estimator.options
# Turn off all error mitigation and suppression
options.resilience_level = 0
האפשרויות הזמינות
הטבלה הבאה מתעדת אפשרויות מהגרסה האחרונה של qiskit-ibm-runtime. כדי לראות גרסאות אפשרויות ישנות יותר, בקר ב-מקור ה-API של qiskit-ibm-runtime ובחר גרסה קודמת.
default_shots
המספר הכולל של shots לשימוש לכל מעגל לכל תצורה.
אפשרויות: מספר שלם >= 0
ברירת מחדל: None
default_precision
הדיוק הברירת-מחדל לשימוש עבור כל PUB או קריאת run() שאינה מציינת אחד.
אפשרויות: Float > 0
ברירת מחדל: 0.015625 (1 / sqrt(4096))
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
environment.callback
פונקציה קריאה המקבלת את Job ID ואת Job result.
אפשרויות: None
ברירת מחדל: None
environment.job_tags
רשימת תגיות.
אפשרויות: None
ברירת מחדל: None
environment.log_level
אפשרויות: DEBUG, INFO, WARNING, ERROR, CRITICAL
ברירת מחדל: WARNING
environment.private
אפשרויות: True, False
ברירת מחדל: False
execution
execution.init_qubits
האם לאפס את הקיוביטים למצב היסוד לכל shot.
אפשרויות: True, False
ברירת מחדל: True
execution.rep_delay
ההשהיה בין מדידה למעגל קוונטי הבא.
אפשרויות: ערך בטווח שסופק על ידי backend.rep_delay_range
ברירת מחדל: נקבע על ידי backend.default_rep_delay
max_execution_time
מגביל כמה זמן המשימה יכולה לרוץ, בשניות. ראה את המדריך זמן ביצוע מקסימלי לפרטים.
אפשרויות: מספר שלם של שניות בטווח [1, 10800]
ברירת מחדל: 10800 (3 שעות)
resilience
אפשרויות מתקדמות של חוסן לכוונון עדין של אסטרטגיית החוסן.
resilience.layer_noise_learning
אפשרויות ללמידת רעש שכבה.
resilience.layer_noise_learning.layer_pair_depths
אפשרויות: list[int] של 2-10 ערכים בטווח [0, 200]
ברירת מחדל: (0, 1, 2, 4, 16, 32)
resilience.layer_noise_learning.max_layers_to_learn
אפשרויות: None, מספר שלם >= 1
ברירת מחדל: 4
resilience.layer_noise_learning.num_randomizations
אפשרויות: מספר שלם >= 1
ברירת מחדל: 32
resilience.layer_noise_learning.shots_per_randomization
אפשרויות: מספר שלם >= 1
ברירת מחדל: 128
resilience.layer_noise_model
אפשרויות: NoiseLearnerResult, Sequence[LayerError]
ברירת מחדל: None
resilience.measure_mitigation
אפשרויות: True, False
ברירת מחדל: True
resilience.measure_noise_learning
אפשרויות ללמידת רעש מדידה.
resilience.measure_noise_learning.num_randomizations
אפשרויות: מספר שלם >= 1
ברירת מחדל: 32
resilience.measure_noise_learning.shots_per_randomization
אפשרויות: מספר שלם, auto
ברירת מחדל: auto
resilience.pec_mitigation
אפשרויות: True, False
ברירת מחדל: False
resilience.pec
אפשרויות הפחתת שגיאות הסתברותיות.
resilience.pec.max_overhead
אפשרויות: None, מספר שלם >= 1
ברירת מחדל: 100
resilience.pec.noise_gain
אפשרויות: auto, float בטווח [0, 1]
ברירת מחדל: auto
resilience.zne_mitigation
אפשרויות: True, False
ברירת מחדל: False
resilience.zne
resilience.zne.amplifier
אפשרויות: gate_folding, gate_folding_front, gate_folding_back, pea
ברירת מחדל: gate_folding
resilience.zne.extrapolated_noise_factors
אפשרויות: רשימת floats
ברירת מחדל: [0, *noise_factors]
resilience.zne.extrapolator
אפשרויות: אחד או יותר מ: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback
ברירת מחדל: (exponential, linear)
resilience.zne.noise_factors
אפשרויות: רשימת floats; כל float >= 1
ברירת מחדל: (1, 1.5, 2) עבור PEA, ו-(1, 3, 5) אחרת
resilience_level
כמות החוסן לבנות נגד שגיאות. רמות גבוהות יותר מייצרות תוצאות מדויקות יותר על חשבון זמני עיבוד ארוכים יותר. ראה את הסעיף רמות חוסן בנושא ניהול רעש למידע נוסף.
אפשרויות: 0, 1, 2
ברירת מחדל: 1
seed_estimator
simulator
אפשרויות להעברה בעת סימולציה של Backend
simulator.basis_gates
אפשרויות: רשימת שמות שערי בסיס להרחבה אליהם
ברירת מחדל: קבוצת כל שערי הבסיס הנתמכים על ידי סימולטור Qiskit Aer
simulator.coupling_map
אפשרויות: רשימת אינטראקציות של שני קיוביטים מכוונות
ברירת מחדל: None, שמשמעותו אין אילוצי קישוריות (קישוריות מלאה).
simulator.noise_model
אפשרויות: Qiskit Aer NoiseModel, או ייצוגו
ברירת מחדל: None
simulator.seed_simulator
אפשרויות: מספר שלם
ברירת מחדל: None
twirling
אפשרויות Twirling
twirling.enable_gates
אפשרויות: True, False
ברירת מחדל: False
twirling.enable_measure
אפשרויות: True, False
ברירת מחדל: True
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 מסוימות יחד במשימה אחת. לחץ על הכרטיסייה המתאימה לקבלת רשימת התכונות שאינן תואמות לתכונה הנבחרת:
שערים שברייים
לא תואם עם:
- Gate twirling
- PEA
- PEC
Gate-folding ZNE
עלול לא לעבוד בעת שימוש בשערים מותאמים אישית. לא תואם עם:
- PEA
- PEC
Gate twirling
לא תואם עם:
- שערים שברייים
- Stretches
הערות נוספות:
- Measurement twirling ניתן להחיל רק על מדידות סופיות.
- לא עובד עם משלבים שאינם Clifford.
PEA
לא תואם עם:
- שערים שברייים
- Gate-folding ZNE
- PEC
PEC
לא תואם עם:
- שערים שברייים
- Gate-folding ZNE
- PEA
השלבים הבאים
- מצא פרטים נוספים על שיטות
EstimatorV2ב-מקור ה-API של Estimator. - החלט באיזה מצב ביצוע להריץ את המשימה שלך.
- למד על ניהול רעש עם Estimator.