Przejdź do głównej treści

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.

Ułamkowe bramki

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

Zalecenia