Sari la conținutul principal

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.4.0
qiskit-ibm-runtime~=0.46.1

Puteți folosi opțiunile pentru a personaliza primitivul Estimator. Deși interfața metodei run() a primitivelor este comună tuturor implementărilor, opțiunile lor nu sunt. Consultați 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 EstimatorV2, 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 — 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)

Dicționar

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

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 EstimatorV2 (EstimatorOptions) nu trebuie instanțiată dacă setezi opțiunile după inițializarea primitivului.

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

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

Caz special: precizie

Metoda EstimatorV2.run acceptă două argumente: o listă de PUB-uri, fiecare putând specifica o valoare de precizie specifică PUB-ului, și un argument cheie 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 cheie 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 rezultatele nu sunt garantate să atingă precizia specificată.

Rețineți 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 cheie precision este specificat în run, folosește această valoare.
  3. Dacă twirling este activat (True implicit), se folosește produsul dintre num_randomizations și shots_per_randomization, specificat ca opțiunile 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, EstimatorV2 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
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')>

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

Opțiuni disponibile

Tabelul următor 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.

Opțiuni: 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.

Opțiuni: 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.callback

Funcție apelabilă care primește Job ID și Job result.

Opțiuni: None

Implicit: None

environment.job_tags

Listă de etichete.

Opțiuni: None

Implicit: None

environment.log_level

Opțiuni: 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 la starea de bază pentru fiecare shot.

Opțiuni: True, False

Implicit: True

execution.rep_delay

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

Opțiuni: 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.

Opțiuni: 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_learning

Opțiuni pentru învățarea zgomotului de strat.

Documentația API resilience.layer_noise_learning

resilience.layer_noise_learning.layer_pair_depths

Opțiuni: list[int] de la 2 la 10 valori în intervalul [0, 200]

Implicit: (0, 1, 2, 4, 16, 32)

resilience.layer_noise_learning.max_layers_to_learn

Opțiuni: None, Număr întreg >= 1

Implicit: 4

resilience.layer_noise_learning.num_randomizations

Opțiuni: Număr întreg >= 1

Implicit: 32

resilience.layer_noise_learning.shots_per_randomization

Opțiuni: Număr întreg >= 1

Implicit: 128

resilience.layer_noise_model

Opțiuni: NoiseLearnerResult, Sequence[LayerError]

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

Opțiuni: Număr întreg >= 1

Implicit: 32

resilience.measure_noise_learning.shots_per_randomization

Opțiuni: Număr întreg, auto

Implicit: auto

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

Opțiuni: None, Număr întreg >= 1

Implicit: 100

resilience.pec.noise_gain

Opțiuni: 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

Opțiuni: Listă de valori float

Implicit: [0, *noise_factors]

resilience.zne.extrapolator

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

Implicit: (exponential, linear)

resilience.zne.noise_factors

Opțiuni: 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

seed_estimator

Opțiuni: Număr întreg

Implicit: None

seed_estimator

simulator

Opțiuni de transmis la simularea unui backend

Documentația API simulator

simulator.basis_gates

Opțiuni: 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

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

Implicit: None, ceea ce implică fără constrângeri de conectivitate (conectivitate completă).

simulator.noise_model

Opțiuni: Model de zgomot Qiskit Aer NoiseModel sau reprezentarea sa

Implicit: None

simulator.seed_simulator

Opțiuni: Număr întreg

Implicit: None

twirling

Opțiuni de twirling

Documentația API twirling

twirling.enable_gates

Opțiuni: True, False

Implicit: False

twirling.enable_measure

Opțiuni: True, False

Implicit: True

twirling.num_randomizations

Opțiuni: auto, Număr întreg >= 1

Implicit: auto

twirling.shots_per_randomization

Opțiuni: 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