Перейти до основного вмісту

Швидкий старт з Sampler

Основне завдання Sampler — вибірка вихідного регістра з виконання одної або кількох квантових схем. Динамічні схеми та параметризовані схеми приймаються як вхідні дані (якщо надаються параметризовані схеми, потрібно також надати значення параметрів). Sampler також підтримує вбудоване динамічне роз'єднання та twirling для придушення помилок.

Кроки в цій темі описують, як налаштувати Sampler, вивчити доступні опції для його конфігурації та викликати його в програмі.

Версії пакетів

Код на цій сторінці було розроблено з використанням таких вимог. Рекомендуємо використовувати ці або новіші версії.

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

Кроки для використання примітива Sampler

1. Ініціалізація акаунту

Оскільки Qiskit Runtime є керованим сервісом, спочатку потрібно ініціалізувати свій акаунт. Потім можна обрати QPU, який хочеш використовувати для обчислення очікуваного значення.

Виконай кроки в темі Налаштування акаунту IBM Cloud, якщо акаунт ще не налаштовано.

Дробові вентилі

Щоб використовувати нещодавно підтримані дробові вентилі, встанови use_fractional_gates=True при запиті backend від екземпляра QiskitRuntimeService. Наприклад:

service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)

Це є експериментальною функцією та може змінитися в майбутньому.

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)

2. Створення схеми

Тобі потрібна щонайменше одна схема як вхідні дані для примітива 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)

Схема та спостережуваний потребують перетворення для використання лише інструкцій, підтримуваних QPU (що називаються схемами instruction set architecture (ISA)). Використовуй 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()}")
>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])

3. Ініціалізація Qiskit Runtime Sampler

При ініціалізації Sampler використовуй параметр mode, щоб вказати режим, в якому хочеш запускати. Можливі значення: об'єкти batch, session або backend для пакетного, сесійного та режиму виконання завдання відповідно. Докладніше див. у Вступ до режимів виконання Qiskit Runtime. Зверни увагу, що користувачі Open Plan не можуть надсилати завдання в режимі Session.

from qiskit_ibm_runtime import SamplerV2 as Sampler

sampler = Sampler(mode=backend)

4. Виклик Sampler та отримання результатів

Далі викличи метод run() для генерації виходу. Схема та необов'язкові набори значень параметрів передаються як кортежі 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']

Наступні кроки

Рекомендації