Specificare le opzioni del Sampler
Versioni dei pacchetti
Il codice di questa pagina è stato sviluppato con i seguenti requisiti. Si consiglia di utilizzare queste versioni o versioni più recenti.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
Puoi usare le opzioni per personalizzare la primitiva Sampler. Questa sezione si concentra su come specificare le opzioni della primitiva Qiskit Runtime. Sebbene l'interfaccia del metodo run() delle primitive sia comune a tutte le implementazioni, le loro opzioni non lo sono. Consulta i riferimenti API corrispondenti per informazioni sulle opzioni di qiskit.primitives.BackendSamplerV2 e qiskit_aer.primitives.SamplerV2.
Impostare le opzioni del Sampler
Puoi impostare le opzioni durante l'inizializzazione del Sampler, dopo l'inizializzazione del Sampler, oppure aggiornare le opzioni dopo che il Sampler è stato inizializzato. Per istruzioni su come usare queste tecniche, consulta l'argomento Introduzione alle opzioni.
Inoltre, puoi impostare il valore shots nel metodo run(), come descritto nella sezione seguente.
Metodo Run()
Gli unici valori che puoi passare a run() sono quelli definiti nell'interfaccia, ovvero shots. Questo sovrascrive qualsiasi valore impostato per default_shots per l'esecuzione corrente.
# 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')>
Casi speciali
Shots
Il metodo SamplerV2.run accetta due argomenti: un elenco di PUB, ognuno dei quali può specificare un valore di shots specifico per il PUB, e un argomento parola chiave shots. Questi valori di shots fanno parte dell'interfaccia di esecuzione del Sampler e sono indipendenti dalle opzioni del Sampler Runtime. Hanno la precedenza su qualsiasi valore specificato come opzione per conformarsi all'astrazione del Sampler.
Tuttavia, se shots non è specificato da alcun PUB né nell'argomento parola chiave run (o se sono tutti None), viene utilizzato il valore di shots dalle opzioni, in particolare default_shots.
In sintesi, questo è l'ordine di precedenza per specificare gli shots nel Sampler, per qualsiasi PUB particolare:
- Se il PUB specifica shots, usare quel valore.
- Se l'argomento parola chiave
shotsè specificato inrun, usare quel valore. - Se
twirlingè abilitato (True per impostazione predefinita), viene utilizzato il prodotto dinum_randomizationseshots_per_randomization, come specificato nelle opzionitwirling. - Se
sampler.options.default_shotsè specificato, usare quel valore.
Quindi, se gli shots sono specificati in tutti i posti possibili, viene utilizzato quello con la precedenza più alta (shots specificati nel PUB).
Sebbene gli shots specificati nel PUB e in run abbiano una precedenza più alta, il job fallisce se twirling è abilitato e il prodotto di num_randomizations e shots_per_randomization è inferiore al valore di shots. In questo scenario, SamplerV2 non è in grado di distribuire gli shots tra i num_randomizations specificati.
Esempio:
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')>
Opzioni disponibili
La seguente tabella documenta le opzioni dell'ultima versione di qiskit-ibm-runtime. Per vedere versioni precedenti delle opzioni, visita il riferimento API di qiskit-ibm-runtime e seleziona una versione precedente.
default_shots
Il numero totale di shots da utilizzare per circuito per configurazione.
Opzioni: Intero >= 0
Predefinito: None
dynamical_decoupling
Controlla le impostazioni di mitigazione degli errori per decoupling dinamico.
Documentazione API di dynamical_decoupling
dynamical_decoupling.enable
Opzioni: True, False
Predefinito: False
dynamical_decoupling.extra_slack_distribution
Opzioni: middle, edges
Predefinito: middle
dynamical_decoupling.scheduling_method
Opzioni: asap, alap
Predefinito: alap
dynamical_decoupling.sequence_type
Opzioni: XX, XpXm, XY4
Predefinito: XX
dynamical_decoupling.skip_reset_qubits
Opzioni: True, False
Predefinito: False
environment
Documentazione API di environment
environment.job_tags
Elenco di tag.
Opzioni: None
Predefinito: None
environment.log_level
Opzioni: DEBUG, INFO, WARNING, ERROR, CRITICAL
Predefinito: WARNING
environment.private
Opzioni: True, False
Predefinito: False
execution
Documentazione API di execution
execution.init_qubits
Se reimpostare i qubit allo stato fondamentale per ogni shot.
Opzioni: True, False
Predefinito: True
execution.rep_delay
Il ritardo tra una misurazione e il circuito quantistico successivo.
Opzioni: Valore nell'intervallo fornito da backend.rep_delay_range
Predefinito: Fornito da backend.default_rep_delay
execution.meas_type
Opzioni: classified, kerneled, avg_kerneled
Predefinito: classified
max_execution_time
Limita il tempo di esecuzione di un job, in secondi. Consulta la guida sul tempo massimo di esecuzione per i dettagli.
Opzioni: Numero intero di secondi nell'intervallo [1, 10800]
Predefinito: 10800 (3 ore)
simulator
Opzioni da passare durante la simulazione di un Backend
Documentazione API di simulator
simulator.basis_gates
Opzioni: Elenco dei nomi delle porte base su cui eseguire l'unrolling
Predefinito: L'insieme di tutte le porte base supportate dal simulatore Qiskit Aer
simulator.coupling_map
Opzioni: Elenco di interazioni dirette tra due qubit
Predefinito: None, che implica l'assenza di vincoli di connettività (connettività completa).
simulator.noise_model
Opzioni: Qiskit Aer NoiseModel, o la sua rappresentazione
Predefinito: None
simulator.seed_simulator
Opzioni: Intero
Predefinito: None
twirling
Opzioni di twirling
Documentazione API di twirling
twirling.enable_gates
Opzioni: True, False
Predefinito: False
twirling.enable_measure
Opzioni: True, False
Predefinito: False
twirling.num_randomizations
Opzioni: auto, Intero >= 1
Predefinito: auto
twirling.shots_per_randomization
Opzioni: auto, Intero >= 1
Predefinito: auto
twirling.strategy
Opzioni: active, active-circuit, active-accum, all
Predefinito: active-accum
experimental
Opzioni sperimentali, quando disponibili.
Compatibilità delle funzionalità
Alcune funzionalità di runtime non possono essere usate insieme in un singolo job. Fai clic sulla scheda appropriata per un elenco delle funzionalità incompatibili con quella selezionata:
Circuiti dinamici
Incompatibile con:
- Decoupling dinamico
Altre note:
- Il twirling dei gate può essere applicato ai circuiti dinamici, ma solo ai gate che non si trovano all'interno di blocchi condizionali. Il twirling delle misurazioni può essere applicato solo alle misurazioni terminali.
- Compatibile con i gate frazionari quando si utilizza
qiskit-ibm-runtimev0.42.0 o versione successiva.
Decoupling dinamico
Incompatibile con:
- Circuiti dinamici
Gate frazionari
Incompatibile con:
- Twirling dei gate
Compatibile con i circuiti dinamici quando si utilizza qiskit-ibm-runtime v0.42.0 o versione successiva.
Twirling dei gate
Incompatibile con:
- Gate frazionari
- Stretching
Altre note:
- Il twirling dei gate può essere applicato ai circuiti dinamici, ma solo ai gate che non si trovano all'interno di blocchi condizionali.
- Il twirling delle misurazioni può essere applicato solo alle misurazioni terminali.
- Il twirling delle misurazioni è incompatibile con l'istruzione
store. - Non funziona con entangler non-Clifford.
Prossimi passi
- Consulta la guida Introduzione alle opzioni.
- Trova ulteriori dettagli sui metodi di
SamplerV2nel riferimento API di Sampler. - Decidi in quale modalità di esecuzione eseguire il tuo job.
- Scopri la gestione del rumore con Sampler.