Vai al contenuto principale

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:

  1. Se il PUB specifica shots, usare quel valore.
  2. Se l'argomento parola chiave shots è specificato in run, usare quel valore.
  3. Se twirling è abilitato (True per impostazione predefinita), viene utilizzato il prodotto di num_randomizations e shots_per_randomization, come specificato nelle opzioni twirling.
  4. 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).

nota

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

Documentazione API di default_shots

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)

Documentazione API di max_execution_time

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

Raccomandazioni