Перейти до основного вмісту
Цей проєкт у бета-версії. Знайшов(-ла) помилку? Відкрити issue на GitHub. Є запитання чи ідея? Запитати в Discussions — будемо раді твоєму відгуку!
Яка якість перекладу на цій сторінці?

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

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

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

Нова реалізація Sampler

Нові реалізації інтерфейсів Qiskit SamplerV2 та EstimatorV2 було представлено в qiskit-ibm-runtime v0.50.0. Ці клієнтські примітиви виконують більшість попередньої обробки та постобробки на стороні клієнта та делегують виконання примітиву Executor. Виконання на стороні клієнта забезпечує більшу прозорість, швидший зворотний зв'язок під час налагодження та точніший контроль.

Оскільки вони реалізують той самий API, ці клієнтські примітиви значною мірою є прямою заміною застарілих серверних примітивів, з єдиною зміною — оператором імпорту. Докладніше див. Міграція з серверних на клієнтські Sampler та Estimator.

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

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

qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0

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

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

Спочатку тобі потрібно ініціалізувати свій акаунт. Потім можна обрати QPU, який хочеш використовувати.

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

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

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

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

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

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"numpy": "numpy", "qiskit": "qiskit", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
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. Ініціалізація IBM Quantum Sampler​

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

# 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. Виклик 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: 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]}"
)
First ten results for the 'meas' output register: ['1110001000100100100111011000001001000101010000001100010010110011001100110111100000000110001000011001101000110100101110101010011', '1110101100010101010001010111111011000110011010100101001100110101010010101010101110001010100100000000011110101101011000100000100', '1100110011101000110000000100110111101010110001100010111100001101100001010100111001101010101110000101010001001101010101001000100', '1011001001011000000101010111111010011101001111010100001011110011000101110101011001100110011011110011101010000111001111110110011', '1110111011011111101011110101110101010110011001100110101111100100011101100011011100101100101001001111110101111010101110111111011', '0101001110001110010001010100010111011001000000011110000000000001110000010010101101011001000100000001011011101111010010110111110', '1101101001000100010000110001000101010010101011000011000011001010000111100110010101010110100110011010101100001011100110001111011', '1000110011111111100010101010101111001001100001110111101001100111010101010111110110011000110011010010010000100000100010010010101', '0101010100110011110011010000000100011001111100101100101100101111101110100001101101111010100011011000010011111010001100110000010', '0010000111011100000000110000001110001100010011000100101110111111100011001100011001101010011111111100000000011100101101111010100']

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

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