Sari la conținutul principal
Acest proiect este în versiune beta. Ai găsit o eroare? Deschide un issue pe GitHub. Ai o întrebare sau o idee? Întreabă în Discussions — ne-ar plăcea să aflăm părerea ta!
Cum este calitatea traducerii pe această pagină?

Specificarea opțiunilor Estimator

Versiuni de pachete

Codul de pe această pagină a fost dezvoltat folosind următoarele cerințe. Recomandăm utilizarea acestor versiuni sau a unora mai noi.

qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0

Poți folosi opțiunile pentru a personaliza primitiva Estimator. Deși interfața metodei run() a primitivelor este comună tuturor implementărilor, opțiunile lor nu sunt. Consultă referințele API pentru informații despre opțiunile qiskit.primitives.BaseEstimatorV2 și qiskit_aer.BaseEstimatorV2.

Note :

Note despre specificarea opțiunilor în primitivele Estimator
  • Poți vedea opțiunile disponibile și actualiza valorile opțiunilor în timpul sau după inițializarea Estimator.
  • Folosește metoda update() pentru a aplica modificări atributului options.
  • Dacă nu specifici o valoare pentru o opțiune, aceasta primește valoarea specială Unset și se utilizează valorile implicite ale serverului.
  • Atributul options este de tipul Python dataclass. Poți folosi metoda incorporată asdict pentru a-l converti într-un dicționar.

Setarea opțiunilor Estimator​

Poți seta opțiunile la inițializarea Estimator, după inițializarea Estimator sau (doar pentru precision), în metoda run().

Inițializarea primitivului​

Poți transmite o instanță a clasei de opțiuni sau un dicționar la inițializarea Estimator, care face o copie a acelor opțiuni. Astfel, modificarea dicționarului original sau a instanței de opțiuni nu afectează opțiunile deținute de primitiv.

Clasa de opțiuni​

La crearea unei instanțe a clasei Estimator, poți transmite o instanță a clasei de opțiuni. Acele opțiuni vor fi aplicate când folosești run() pentru a efectua calculul. Specifică opțiunile în acest format: options.option.sub-option.sub-sub-option = choice. De exemplu: options.dynamical_decoupling.enable = True

Exemplu:

# 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)

Dicționar​

Poți specifica opțiunile ca dicționar la inițializarea 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]},
},
},
)

Actualizarea opțiunilor după inițializare​

Poți specifica opțiunile în acest format: estimator.options.option.sub-option.sub-sub-option = choice pentru a beneficia de auto-complete, sau poți folosi metoda update() pentru actualizări în bloc.

Clasa de opțiuni Estimator (EstimatorOptions) nu trebuie instanțiată dacă setezi opțiunile după inițializarea primitivului.

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}
)

Metoda Run()​

Singurele valori pe care le poți transmite la run() sunt cele definite în interfață, adică precision pentru Estimator. Aceasta suprascrie orice valoare setată pentru default_precision pentru execuția curentă.

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')>

Caz special: precizie​

Metoda Estimator.run acceptă două argumente: o listă de PUB-uri, fiecare putând specifica o valoare de precizie specifică PUB-ului, și un argument cu nume (keyword argument) precision. Aceste valori de precizie fac parte din interfața de execuție a Estimator și sunt independente de opțiunile Estimator Runtime. Acestea au prioritate față de orice valori specificate ca opțiuni, pentru a respecta abstracția Estimator.

Cu toate acestea, dacă precision nu este specificată de niciun PUB sau în argumentul cu nume run (sau dacă toate sunt None), se utilizează valoarea preciziei din opțiuni, în special default_precision.

notă

Acești parametri de precizie sunt doar pentru specificarea preciziei țintă, iar nu este garantat că rezultatele vor atinge precizia specificată.

Reține că opțiunile Estimator conțin atât default_shots, cât și default_precision. Cu toate acestea, deoarece twirling-ul de porți este activat implicit, produsul dintre num_randomizations și shots_per_randomization are prioritate față de aceste două opțiuni.

Concret, pentru orice PUB Estimator:

  1. Dacă PUB specifică precizia, folosește această valoare.

  2. Dacă argumentul cu nume precision este specificat în run, folosește această valoare.

  3. Dacă twirling este activat (implicit True), se folosește produsul dintre num_randomizations și shots_per_randomization, specificate ca opțiuni twirling.

  4. Dacă estimator.options.default_shots este specificat, folosește această valoare pentru a controla cantitatea de date.

  5. Dacă estimator.options.default_precision este specificat, folosește această valoare.

De exemplu, dacă precizia este specificată în toate cele patru locuri, se folosește cea cu cea mai mare prioritate (precizia specificată în PUB).

notă

Deși precizia specificată în PUB și în run au prioritate mai mare, jobul eșuează dacă twirling este activat și produsul dintre num_randomizations și shots_per_randomization este mai mic decât numărul de shots necesar pentru a atinge precizia. În acest scenariu, Estimator nu poate aloca shots-urile între num_randomizations specificat.

notă

Precizia se scalează invers față de utilizare. Adică, cu cât precizia este mai mică, cu atât mai mult timp QPU durează rularea.

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')>

Dezactivarea tuturor atenuărilor și suprimărilor de erori​

Poți dezactiva toate atenuările și suprimările de erori dacă, de exemplu, faci cercetări pe propriile tehnici de atenuare. Pentru a realiza aceasta, setează resilience_level = 0.

Exemplu:

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

Opțiuni disponibile​

Informațiile următoare documentează opțiunile din cea mai recentă versiune a qiskit-ibm-runtime. Pentru a vedea versiuni mai vechi ale opțiunilor, vizitează referința API qiskit-ibm-runtime și selectează o versiune anterioară.

default_shots

Numărul total de shots de utilizat pe circuit pe configurație.

Valori posibile: Număr întreg >= 0

Implicit: None

Documentația API default_shots

default_precision

Precizia implicită de utilizat pentru orice PUB sau apel run() care nu specifică una.

Valori posibile: Float > 0

Implicit: 0.015625 (1 / sqrt(4096))

Documentația API default_precision

dynamical_decoupling

Controlează setările de atenuare a erorilor prin decuplare dinamică.

Documentația API dynamical_decoupling

dynamical_decoupling.enable

Opțiuni: True, False

Implicit: False

dynamical_decoupling.extra_slack_distribution

Opțiuni: middle, edges

Implicit: middle

dynamical_decoupling.scheduling_method

Choices: asap, alap Default: alap

dynamical_decoupling.sequence_type

Choices: XX, XpXm, XY4 Default: XX

dynamical_decoupling.skip_reset_qubits

Choices: True, False Default: False

environment

Documentația API environment

environment.job_tags

Listă de etichete.

Valori posibile: None

Implicit: None

environment.log_level

Valori posibile: DEBUG, INFO, WARNING, ERROR, CRITICAL

Implicit: WARNING

environment.private

Opțiuni: True, False

Implicit: False

execution

Documentația API execution

execution.init_qubits

Dacă se resetează qubiții în starea fundamentală pentru fiecare shot.

Opțiuni: True, False

Implicit: True

execution.rep_delay

Întârzierea dintre o măsurătoare și circuitul cuantic următor.

Valori posibile: Valoare în intervalul furnizat de backend.rep_delay_range

Implicit: Dat de backend.default_rep_delay

max_execution_time

Limitează cât timp poate rula un job, în secunde. Consultă ghidul timpul maxim de execuție pentru detalii.

Valori posibile: Număr întreg de secunde în intervalul [1, 10800]

Implicit: 10800 (3 ore)

resilience

Opțiuni avansate de reziliență pentru a ajusta fin strategia de reziliență.

Documentația API resilience

resilience.layer_noise_model

Choices: Sequence[LayerNoiseModel]

Implicit: None

resilience.measure_mitigation

Opțiuni: True, False

Implicit: True

resilience.measure_noise_learning

Opțiuni pentru învățarea zgomotului de măsurare.

Documentația API resilience.measure_noise_learning

resilience.measure_noise_learning.num_randomizations

Valori posibile: Număr întreg >= 1

Implicit: 32

resilience.pec_mitigation

Opțiuni: True, False

Implicit: False

resilience.pec

Opțiuni de atenuare prin anulare probabilistică a erorilor.

Documentația API resilience.pec

resilience.pec.max_overhead

Valori posibile: None, Număr întreg >= 1

Implicit: 100

resilience.pec.noise_gain

Valori posibile: auto, float în intervalul [0, 1]

Implicit: auto

resilience.zne_mitigation

Opțiuni: True, False

Implicit: False

resilience.zne
resilience.zne.amplifier

Opțiuni: gate_folding, gate_folding_front, gate_folding_back, pea

Implicit: gate_folding

resilience.zne.extrapolated_noise_factors

Valori posibile: Listă de valori float

Implicit: [0, *noise_factors]

resilience.zne.extrapolator

Valori posibile: Unul sau mai mulți din: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback

Implicit: (exponential, linear)

resilience.zne.noise_factors

Valori posibile: Listă de valori float; fiecare float >= 1

Implicit: (1, 1.5, 2) pentru PEA și (1, 3, 5) altfel

resilience_level

Cât de multă reziliență să construiești împotriva erorilor. Nivelurile mai ridicate generează rezultate mai precise în detrimentul unor timpi de procesare mai lungi. Consultă secțiunea niveluri de reziliență din tema Gestionarea zgomotului pentru a afla mai mult.

Opțiuni: 0, 1, 2

Implicit: 1

Documentația API resilience_level

simulator

Opțiuni de transmis la simularea unui backend

Documentația API simulator

simulator.basis_gates

Valori posibile: Listă de nume de porți de bază la care să se desfășoare

Implicit: Setul tuturor porților de bază suportate de simulatorul Qiskit Aer

simulator.coupling_map

Valori posibile: Listă de interacțiuni orientate pe doi qubiți

Implicit: None, ceea ce înseamnă că nu există constrângeri de conectivitate (conectivitate completă).

simulator.noise_model

Valori posibile: NoiseModel din Qiskit Aer sau reprezentarea sa

Implicit: None

simulator.seed_simulator

Valori posibile: Număr întreg

Implicit: None

twirling

Opțiuni de twirling

Documentația API twirling

twirling.enable_gates

Valori posibile: True, False

Implicit: False

twirling.enable_measure

Valori posibile: True, False

Implicit: True

twirling.num_randomizations

Valori posibile: auto, Număr întreg >= 1

Implicit: auto

twirling.shots_per_randomization

Valori posibile: auto, Număr întreg >= 1

Implicit: auto

twirling.strategy

Opțiuni: active, active-circuit, active-accum, all

Implicit: active-accum

experimental

Opțiuni experimentale, când sunt disponibile.

Compatibilitatea funcțiilor​

Anumite funcții runtime nu pot fi folosite împreună într-un singur job. Fă clic pe fila corespunzătoare pentru o listă de funcții incompatibile cu funcția selectată:

Porți fracționale

Incompatibil cu:

  • Twirling-ul de porți
  • PEA
  • PEC
Gate-folding ZNE

Poate să nu funcționeze când se folosesc porți personalizate. Incompatibil cu:

  • PEA
  • PEC
Twirling de porți

Incompatibil cu:

  • Porți fracționale
  • Stretch-uri

Alte note:

  • Twirling-ul de măsurători poate fi aplicat numai măsurătorilor terminale.
  • Nu funcționează cu entangleri non-Clifford.
PEA

Incompatibil cu:

  • Porți fracționale
  • Gate-folding ZNE
  • PEC
PEC

Incompatibil cu:

  • Porți fracționale
  • Gate-folding ZNE
  • PEA

Pașii următori​

Recomandări