ציון אפשרויות Estimator
Package versions
הקוד בעמוד זה פותח באמצעות הדרישות הבאות. אנחנו ממליצים להשתמש בגרסאות אלה או חדשות יותר.
qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0
תוכלו להשתמש באפשרויות כדי להתאים אישית את ה-primitive Estimator. בעוד שהממשק של השיטה run() של ה-primitives משותף לכל המימושים, האפשרויות שלהם אינן משותפות. עיינו בהפניות ה-API למידע על האפשרויות של qiskit.primitives.BaseEstimatorV2 ו-qiskit_aer.BaseEstimatorV2.
Notes :
- אפשר לראות את האפשרויות הזמינות ולעדכן ערכי אפשרויות במהלך אתחול Estimator או אחריו.
- השתמשו בשיטת
update()כדי להחיל שינויים על מאפיין ה-options. - אם לא מציינים ערך לאפשרות, היא מקבלת ערך מיוחד של
Unsetומשתמשים בברירות המחדל של השרת. - מאפיין ה-
optionsהוא מסוג Pythondataclass. אפשר להשתמש בשיטתasdictהמובנית כדי להמיר אותו למילון.
הגדרת אפשרויות Estimator
אפשר להגדיר אפשרויות בעת אתחול Estimator, אחרי אתחולו, או (לגבי precision בלבד) בשיטת run().
אתחול פרימיטיב
אפשר להעביר מופע של מחלקת האפשרויות או מילון בעת אתחול Estimator, שאז יוצר עותק של אפשרויות אלה. לפיכך, שינוי המילון המקורי או מופע האפשרויות אינו משפיע על האפשרויות שבבעלות הפרימיטיב.
מחלקת אפשרויות
בעת יצירת מופע של מחלקת Estimator, אפשר להעביר מופע של מחלקת האפשרויות. אפשרויות אלה יוחלו בעת שימוש ב-run() לביצוע החישוב. ציינו את האפשרויות בפורמט הזה: options.option.sub-option.sub-sub-option = choice. לדוגמה: options.dynamical_decoupling.enable = True
דוגמה:
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit": "qiskit", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# from qiskit_ibm_runtime.options import EstimatorOptions
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
from qiskit_ibm_runtime.options_models 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
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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() לעדכונים בכמות.
מחלקת האפשרויות של Estimator (EstimatorOptions): אין צורך ליצור לה מופע אם מגדירים אפשרויות לאחר אתחול הפרימיטיב.
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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('dab7lhjvpcac73ddekcg', 'estimator')>
מקרה מיוחד: דיוק
שיטת Estimator.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 הנדרש להשגת הדיוק. בתרחיש זה, Estimator אינו מסוגל להקצות את ה-shots בין ה-num_randomizations שצוינו.
הדיוק משתנה בצורה הפוכה לשימוש. כלומר, ככל שהדיוק נמוך יותר, כך לוקח יותר זמן QPU להריץ.
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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('dab7ljjvpcac73ddekgg', 'estimator')>
כיבוי כל הפחתת השגיאות ודיכוי השגיאות
אפשר לכבות את כל הפחתת השגיאות ודיכוי השגיאות אם, לדוגמה, אתם חוקרים טכניקות הפחתה משלכם. לשם כך, הגדירו resilience_level = 0.
דוגמה:
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
# 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.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_model
Choices: Sequence[LayerNoiseModel]
ברירת מחדל: None
resilience.measure_mitigation
אפשרויות: True, False
ברירת מחדל: True
resilience.measure_noise_learning
אפשרויות ללמידת רעש מדידה.
resilience.measure_noise_learning.num_randomizations
אפשרויות: מספר שלם >= 1
ברירת מחדל: 32
resilience.pec_mitigation
אפשרויות: True, False
ברירת מחדל: False
resilience.pec
אפשרויות להפחתת שגיאות בשיטת ביטול שגיאות הסתברותי (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
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
השלבים הבאים
- מצאו פרטים נוספים על שיטות
Estimatorב-תיעוד ה-API של Estimator. - החליטו באיזה מצב ביצוע להריץ את המשימה שלכם.
- למדו על ניהול רעש עם Estimator.