Szybki start z Samplerem
Głównym zadaniem Samplera jest próbkowanie rejestru wyjściowego z wykonania jednego lub więcej obwodów kwantowych. Dynamiczne obwody i parametryzowane obwody są akceptowane jako dane wejściowe (jeśli przesyłane są parametryzowane obwody, należy również podać wartości parametrów). Sampler obsługuje również wbudowane dynamiczne rozsprzęganie i twirling dla tłumienia błędów.
Kroki opisane w tym temacie wyjaśniają, jak skonfigurować Samplera, poznać dostępne opcje konfiguracji i wywołać go w programie.
Wersje pakietów
Kod na tej stronie został opracowany przy użyciu następujących wymagań. Zalecamy używanie tych wersji lub nowszych.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime
Kroki do użycia prymitywu Sampler
1. Zainicjuj konto
Ponieważ Qiskit Runtime jest usługą zarządzaną, musisz najpierw zainicjować swoje konto. Następnie możesz wybrać QPU, którego chcesz użyć do obliczenia wartości oczekiwanej.
Wykonaj kroki opisane w temacie Konfiguracja konta IBM Cloud, jeśli nie masz jeszcze skonfigurowanego konta.
Aby użyć nowo obsługiwanych ułamkowych bramek, ustaw use_fractional_gates=True podczas żądania backendu z instancji QiskitRuntimeService. Na przykład:
service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)
Jest to funkcja eksperymentalna i może ulec zmianie w przyszłości.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)
2. Utwórz obwód
Potrzebujesz co najmniej jednego obwodu jako danych wejściowych do prymitywu 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)
Obwód i observable muszą zostać przekształcone, aby używały tylko instrukcji obsługiwanych przez QPU (określanych jako obwody architektury zestawu instrukcji (ISA)). Użyj transpilatora, aby to zrobić.
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()}")
>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])
3. Zainicjuj Qiskit Runtime Sampler
Gdy inicjujesz Samplera, użyj parametru mode, aby określić tryb, w którym ma działać. Możliwe wartości to obiekty batch, session lub backend dla odpowiednio trybu wsadowego, sesji i zadania. Więcej informacji znajdziesz w artykule Wprowadzenie do trybów wykonywania Qiskit Runtime. Pamiętaj, że użytkownicy planu Open Plan nie mogą przesyłać zadań sesji.
from qiskit_ibm_runtime import SamplerV2 as Sampler
sampler = Sampler(mode=backend)
4. Wywołaj Samplera i uzyskaj wyniki
Następnie wywołaj metodę run(), aby wygenerować dane wyjściowe. Obwód i opcjonalne zestawy wartości parametrów są przekazywane jako krotki primitive unified bloc (PUB).
job = sampler.run([(isa_circuit, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")
>>> Job ID: d82863mgbeec73alf9sg
>>> 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]}"
)
First ten results for the 'meas' output register: ['1100110011001011111111111010000010001010100100011000001011001101000110011000110100100100101010111001110100100000000011111100000', '0101001001010000100111000110110001001101010110110000110111101110001100000001000001111111101110000000010011111100100110001101000', '0111111110011011000011110111010111101100110010001010010001100000000100000000001010101010111010110000001100100001010110000101000', '0000110011001100110011101100000111011001110100001100001100110111010100101010001010000011000111001010101111110110100110001010000', '0011110011100001100110111001000011011111011110111100000110001000111011101101000110011011101011001110110000010010001100100011001', '1010001000010101011100101010101001101000100010011011100110010111010001110111110010100010111010011010110011001101100110010000010', '0001110010001011001100010000000001001101001110101100110011101111100100100110110010101000011010101000101011101011010100000101010', '1110100100001100110010000010011010111000001010110010111111011010010100110011100101110011101111100001010011100110011000101001001', '1101011100110101011001010100011001110100001011110101101110111011011001100110001011000010001100100011000000110101011100111111000', '1101000110000000101010000000110000011000000000010110011001001000001110101110010111011010101100011000100100110000000000000011001']
Następne kroki
- Dowiedz się, jak testować lokalnie przed uruchomieniem na komputerach kwantowych.
- Przeglądaj szczegółowe przykłady.
- Ćwicz korzystanie z prymitywów, pracując przez lekcję funkcji kosztu w IBM Quantum Learning.
- Dowiedz się, jak transpilować lokalnie w sekcji Transpilacja.
- Wypróbuj przewodnik Porównywanie ustawień transpilatora.
- Dowiedz się, jak używać opcji prymitywów.
- Zapoznaj się z API dla opcji Samplera.
- Przeczytaj Migracja do prymitywów V2.