דלג לתוכן הראשי
פרויקט זה בשלב בטא. מצאת באג? פתח issue ב-GitHub. יש שאלה או רעיון? שאל ב-Discussions — נשמח לשמוע ממך!
מה איכות התרגום בדף זה?

ציון אפשרויות 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
  • אפשר לראות את האפשרויות הזמינות ולעדכן ערכי אפשרויות במהלך אתחול Estimator או אחריו.
  • השתמשו בשיטת update() כדי להחיל שינויים על מאפיין ה-options.
  • אם לא מציינים ערך לאפשרות, היא מקבלת ערך מיוחד של Unset ומשתמשים בברירות המחדל של השרת.
  • מאפיין ה-options הוא מסוג Python dataclass. אפשר להשתמש בשיטת 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:

  1. אם ה-PUB מציין דיוק, נעשה שימוש בערך הזה.

  2. אם ארגומנט keyword של דיוק צוין ב-run, השתמשו בערך הזה.

  3. אם twirling מופעל (True כברירת מחדל), נעשה שימוש במכפלה של num_randomizations ו-shots_per_randomization, כפי שצוינו ב-אפשרויות twirling.

  4. אם estimator.options.default_shots צוין, השתמשו בערך הזה לשליטה בכמות הנתונים.

  5. אם 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

תיעוד API של default_shots

default_precision

ברירת המחדל של הדיוק לשימוש עבור כל PUB או קריאת run() שלא מצוין בהם דיוק.

אפשרויות: Float > 0

ברירת מחדל: 0.015625 (1 / sqrt(4096))

תיעוד API של default_precision

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

max_execution_time

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

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

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

resilience

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

תיעוד API של resilience

resilience.layer_noise_model

Choices: Sequence[LayerNoiseModel]

ברירת מחדל: None

resilience.measure_mitigation

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

ברירת מחדל: True

resilience.measure_noise_learning

אפשרויות ללמידת רעש מדידה.

תיעוד API של resilience.measure_noise_learning

resilience.measure_noise_learning.num_randomizations

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

ברירת מחדל: 32

resilience.pec_mitigation

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

ברירת מחדל: False

resilience.pec

אפשרויות להפחתת שגיאות בשיטת ביטול שגיאות הסתברותי (PEC).

תיעוד API של 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

תיעוד API של resilience_level

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

ברירת מחדל: 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

השלבים הבאים​

המלצות