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

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

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

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

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

אפשר להשתמש באפשרויות כדי להתאים אישית את הפרימיטיב Estimator. בעוד שהממשק של שיטת run() של הפרימיטיבים משותף לכל המימושים, האפשרויות שלהם אינן כך. עיין במקורות ה-API לקבלת מידע על אפשרויות qiskit.primitives.BaseEstimatorV2 ו-qiskit_aer.BaseEstimatorV2.

Notes :

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

  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 הנדרש להשגת הדיוק. בתרחיש זה, 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

תיעוד 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.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

תיעוד 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_learning

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

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

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

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

אפשרויות הפחתת שגיאות הסתברותיות.

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

seed_estimator

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

ברירת מחדל: None

seed_estimator

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

השלבים הבאים

המלצות