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.
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.1 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. È quindi possibile selezionare la QPU che si desidera utilizzare per calcolare il valore atteso.
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.
from qiskit_ibm_runtime import SamplerV2 as 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: d9mq9og8csec73fagt7g
>>> 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: ['1010011011000000000000000000000000001111111111001010101010001110011000011101100100011100111111111010010110000011010100110111100', '0111100001100000011011101000000111111001011010110000101100011000000011010001000100000111001110011001111010100001100010100000000', '0111010101001110000110100000000110011000011011001111000110101101010100010010111111101011000000010000101111000001010110001000000', '1100111011000010011001100100001101111000101111110110011001011001100110000000000110111100110011000001100000100100001000000000000', '0011111010101101001111111110011000111000000010100011011111111011100110101010111111111101111110100011101101011100110010011010100', '1011111111011010000000000111000000010101001001000110011101100010010001100110100101111111110010001000001000101111100100011000000', '1110101101101011111111000010101010111100110011001010101111110110101010101111110000001110001111101101010100111011110001000000000', '1001010011111010000001010100011000101110111110111101100001010100011110000001000001000110000000000001101010110010110000011001000', '0000101010100000111000100001010101100101011101010110000001100110011001111011111110111010101000011001000011001001101101001010110', '1001001011000000010011101100010011101100010001001100100110011101100100000000111101010010000101011011011110110110001000111101100']
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.