Specificarea opțiunilor Sampler
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
Poți folosi opțiunile pentru a personaliza primitivul Sampler. Această secțiune se concentrează pe modul de specificare a opțiunilor primitivelor Qiskit Runtime. Deși interfața metodei run() a primitivelor este comună tuturor implementărilor, opțiunile lor nu sunt. Consultă referințele API corespunzătoare pentru informații despre opțiunile qiskit.primitives.BackendSamplerV2 și qiskit_aer.primitives.SamplerV2.
Setarea opțiunilor Sampler
Poți seta opțiunile la inițializarea Sampler, după inițializarea Sampler sau le poți actualiza după ce Sampler a fost inițializat. Pentru instrucțiuni de utilizare a acestor tehnici, consultă tema Introducere în opțiuni.
În plus, poți seta valoarea shots în metoda run(), după cum este descris în secțiunea următoare.
Metoda Run()
Singurele valori pe care le poți transmite la run() sunt cele definite în interfață, adică shots. Aceasta suprascrie orice valoare setată pentru default_shots pentru execuția curentă.
# 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 SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
sampler = Sampler(mode=backend)
# Default shots to use if not specified in run()
sampler.options.default_shots = 500
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d8286680bvlc73d1vmu0', 'sampler')>
Cazuri speciale
Shots
Metoda SamplerV2.run acceptă două argumente: o listă de PUB-uri, fiecare putând specifica o valoare shots specifică PUB-ului, și un argument cheie shots. Aceste valori shots fac parte din interfața de execuție a Sampler și sunt independente de opțiunile Sampler Runtime. Acestea au prioritate față de orice valori specificate ca opțiuni, pentru a respecta abstracția Sampler.
Cu toate acestea, dacă shots nu este specificat de niciun PUB sau în argumentul cheie run (sau dacă toate sunt None), se utilizează valoarea shots din opțiuni, în special default_shots.
Pe scurt, aceasta este ordinea de prioritate pentru specificarea shots în Sampler, pentru orice PUB particular:
- Dacă PUB specifică shots, folosește această valoare.
- Dacă argumentul cheie
shotseste specificat înrun, folosește această valoare. - Dacă
twirlingeste activat (True implicit), se folosește produsul dintrenum_randomizationsșishots_per_randomization, specificat ca opțiunitwirling. - Dacă
sampler.options.default_shotseste specificat, folosește această valoare.
Astfel, dacă shots sunt specificate în toate locurile posibile, se folosește cel cu cea mai mare prioritate (shots specificate în PUB).
Deși shots specificate în PUB și în run au prioritate mai mare, job-ul eșuează dacă twirling este activat și produsul dintre num_randomizations și shots_per_randomization este mai mic decât valoarea shots. În acest scenariu, SamplerV2 nu poate aloca shots-urile între num_randomizations-urile specificate.
Exemplu:
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
# Setting shots during primitive initialization
sampler = Sampler(mode=backend, options={"default_shots": 4096})
# Setting options after primitive initialization
# This uses auto-complete.
sampler.options.default_shots = 2000
# This does bulk update. The value for default_shots is overridden
# if you specify shots with run() or in the PUB.
sampler.options.update(
default_shots=1024, dynamical_decoupling={"sequence_type": "XpXm"}
)
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d82868ugbeec73alfa80', 'sampler')>
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
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.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
execution.meas_type
Opțiuni: classified, kerneled, avg_kerneled
Implicit: classified
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)
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: False
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ă:
Circuite dinamice
Incompatibil cu:
- Decuplarea dinamică
Alte note:
- Twirling-ul de porți poate fi aplicat circuitelor dinamice, dar numai porților care nu se află în blocuri condiționale. Twirling-ul de măsurători poate fi aplicat numai măsurătorilor terminale.
- Compatibil cu porțile fracționale când se utilizează
qiskit-ibm-runtimev0.42.0 sau o versiune ulterioară.
Decuplare dinamică
Incompatibil cu:
- Circuite dinamice
Porți fracționale
Incompatibil cu:
- Twirling-ul de porți
Compatibil cu circuitele dinamice când se utilizează qiskit-ibm-runtime v0.42.0 sau o versiune ulterioară.
Twirling de porți
Incompatibil cu:
- Porți fracționale
- Stretch-uri
Alte note:
- Twirling-ul de porți poate fi aplicat circuitelor dinamice, dar numai porților care nu se află în blocuri condiționale.
- Twirling-ul de măsurători poate fi aplicat numai măsurătorilor terminale.
- Twirling-ul de măsurători este incompatibil cu instrucțiunea
store. - Nu funcționează cu entangleri non-Clifford.
Pașii următori
- Revizuiește ghidul Introducere în opțiuni.
- Găsește mai multe detalii despre metodele
SamplerV2în referința API Sampler. - Decide în ce mod de execuție vrei să rulezi job-ul tău.
- Află despre gestionarea zgomotului cu Sampler.