Guida rapida all'uso di Sampler
Il compito principale del Sampler consiste nel campionare il registro di output derivante dall'esecuzione di uno o più circuiti quantistici. Sono ammessi come input circuiti dinamici e circuiti parametrizzati (se vengono inviati circuiti parametrizzati, è necessario fornire anche i valori dei parametri). Sampler supporta anche il disaccoppiamento dinamico integrato e il twirling per la soppressione degli errori.
I passaggi descritti in questa sezione spiegano come configurare Sampler, come esplorare le opzioni disponibili per la sua configurazione e come richiamarlo all'interno di un programma.
In qiskit-ibm-runtime v0.50.0 sono state introdotte nuove implementazioni delle interfacce Qiskit SamplerV2 e EstimatorV2. Queste primitive lato client eseguono la maggior parte delle operazioni di pre-elaborazione e post-elaborazione sul lato client e delegano l'esecuzione alla primitiva Executor. L'esecuzione sul lato client garantisce maggiore trasparenza, un feedback più rapido durante il debug e un controllo più preciso.
Poiché implementano la stessa API, queste primitive lato client sostituiscono in gran parte le primitive lato server legacy senza alcuna modifica, con l'unica differenza rappresentata dall'istruzione di importazione. Per ulteriori informazioni, consultare la sezione “Migrazione da Sampler e Estimator lato server a quelli lato client ”.
Il codice presente in questa pagina è stato sviluppato sulla base dei seguenti requisiti. Si consiglia di utilizzare queste versioni o quelle più recenti.
qiskit[all]~=2.5.2 qiskit-ibm-runtime~=0.47.0
Procedura per l'utilizzo della primitiva Sampler
1. Inizializza l'account
Per prima cosa devi configurare il tuo account. A questo punto è possibile selezionare la QPU che si desidera utilizzare.
Se non disponi ancora di un account, segui i passaggi descritti nell'argomento "Configurazione dell'account IBM Cloud ".
Per utilizzare i gate frazionari ora supportati, impostare use_fractional_gates=True quando si richiede un backend da QiskitRuntimeService un'istanza. Ad esempio:
service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)Si tratta di una funzionalità sperimentale che potrebbe subire modifiche in futuro.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)2. Creare un circuito
È necessario almeno un circuito come ingresso per la primitiva Sampler.
import numpy as np
from qiskit.circuit.library import efficient_su2
circuit = efficient_su2(127, entanglement="linear")
circuit.measure_all()
# The circuit is parametrized, so we will define the parameter values for execution
param_values = np.random.rand(circuit.num_parameters)Il circuito e l'osservabile devono essere trasformati in modo da utilizzare esclusivamente istruzioni supportate dalla QPU (circuiti denominati "architecture del set di istruzioni" o ISA ). Per farlo, usa il transpiler.
from qiskit.transpiler import generate_preset_pass_manager
pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")Output:
>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])
3. Inizializzare il campionatore " IBM Quantum "
Quando si inizializza Sampler, utilizzare il parametro mode per specificare la modalità in cui si desidera che venga eseguito. I valori possibili sono batch, session, oppure backend oggetti, rispettivamente per le modalità di esecuzione in batch, in sessione e per job. Per ulteriori informazioni, consultare la sezione " Introduzione alle modalità di esecuzione del servizio di calcolo di IBM Quantum ". Si noti che gli utenti di Open Plan non possono inviare lavori di sessione.
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
sampler = Sampler(mode=backend)4. Avviare Sampler e ottenere i risultati
Successivamente, chiama il run() metodo per generare l'output. Il circuito e gli insiemi di valori dei parametri opzionali vengono immessi sotto forma di tuple di blocchi unificati primitivi ( PUB ).
job = sampler.run([(isa_circuit, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")Output:
>>> Job ID: dab7lb6rrl7c7386gjgg
>>> Job Status: QUEUED
result = job.result()
# Get results for the first (and only) PUB
pub_result = result[0]
print(
f"First ten results for the 'meas' output register: "
f"{pub_result.data.meas.get_bitstrings()[:10]}"
)Output:
First ten results for the 'meas' output register: ['1110001000100100100111011000001001000101010000001100010010110011001100110111100000000110001000011001101000110100101110101010011', '1110101100010101010001010111111011000110011010100101001100110101010010101010101110001010100100000000011110101101011000100000100', '1100110011101000110000000100110111101010110001100010111100001101100001010100111001101010101110000101010001001101010101001000100', '1011001001011000000101010111111010011101001111010100001011110011000101110101011001100110011011110011101010000111001111110110011', '1110111011011111101011110101110101010110011001100110101111100100011101100011011100101100101001001111110101111010101110111111011', '0101001110001110010001010100010111011001000000011110000000000001110000010010101101011001000100000001011011101111010010110111110', '1101101001000100010000110001000101010010101011000011000011001010000111100110010101010110100110011010101100001011100110001111011', '1000110011111111100010101010101111001001100001110111101001100111010101010111110110011000110011010010010000100000100010010010101', '0101010100110011110011010000000100011001111100101100101100101111101110100001101101111010100011011000010011111010001100110000010', '0010000111011100000000110000001110001100010011000100101110111111100011001100011001101010011111111100000000011100101101111010100']
Passi successivi
- Scopri come eseguire test in locale prima di passare ai computer quantistici.
- Esamina gli esempi dettagliati.
- Esercitati con le primitive seguendo la lezione sulla funzione «Cost» disponibile su IBM Quantum Learning.
- Scopri come eseguire la transpilazione in locale nella sezione " Transpilazione ".
- Consulta la guida sulle impostazioni del transpiler.
- Scopri come utilizzare le opzioni di base.
- Visualizza l'API per le opzioni di Sampler.