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 :
- 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 atributuluioptions. - Dacă nu specifici o valoare pentru o opțiune, aceasta primește valoarea specială
Unsetși se utilizează valorile implicite ale serverului. - Atributul
optionseste de tipul Pythondataclass. Poți folosi metoda incorporatăasdictpentru 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.
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:
- Dacă PUB specifică precizia, folosește această valoare.
- Dacă argumentul cheie precision este specificat în
run, folosește această valoare. - Dacă
twirlingeste activat (True implicit), se folosește produsul dintrenum_randomizationsșishots_per_randomization, specificat ca opțiuniletwirling. - Dacă
estimator.options.default_shotseste specificat, folosește această valoare pentru a controla cantitatea de date. - Dacă
estimator.options.default_precisioneste 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).
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.
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
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))
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
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
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ță.
resilience.layer_noise_learning
Opțiuni pentru învățarea zgomotului de strat.
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.
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.
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
seed_estimator
simulator
Opțiuni de transmis la simularea unui backend
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
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
- Găsește mai multe detalii despre metodele
EstimatorV2în referința API Estimator. - Decide în ce mod de execuție vrei să rulezi job-ul tău.
- Află despre gestionarea zgomotului cu Estimator.