Sari la conținutul principal

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:

  1. Dacă PUB specifică shots, folosește această valoare.
  2. Dacă argumentul cheie shots 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țiuni twirling.
  4. Dacă sampler.options.default_shots este 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).

notă

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

Documentația API default_shots

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.

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

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)

Documentația API max_execution_time

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: 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-runtime v0.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

Recomandări