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

IBM Circuit function

Дивись довідник API

Примітка
  • Qiskit Functions — це експериментальна функція, доступна лише користувачам тарифних планів IBM Quantum® Premium Plan, Flex Plan та On-Prem (через IBM Quantum Platform API). Вони мають статус попереднього релізу та можуть змінюватися.

Огляд

IBM® Circuit function приймає абстрактні PUB'и як вхідні дані й повертає пом'якшені очікувані значення як результат. Ця circuit function включає автоматизований і налаштований конвеєр, що дозволяє дослідникам зосередитися на відкритті алгоритмів і застосунків.

Опис

Після надсилання свого PUB твої абстрактні схеми та спостережувані автоматично транспілюються, виконуються на апаратному забезпеченні та постобробляються для повернення пом'якшених очікуваних значень. Для цього поєднуються такі інструменти:

IBM Circuit function

Початок роботи

Автентифікуйся за допомогою свого API-ключа і вибери Qiskit Function таким чином. (Цей фрагмент коду передбачає, що ти вже зберіг свій акаунт у локальному середовищі.)

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

function = catalog.load("ibm/circuit-function")

Приклади

Щоб почати, спробуй цей базовий приклад:

from qiskit.circuit.random import random_circuit
from qiskit_ibm_runtime import QiskitRuntimeService

# You can skip this step if you have a target backend, e.g.
# backend_name = "ibm_brisbane"
# You'll need to specify the credentials when initializing QiskitRuntimeService, if they were not previously saved.
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
pubs = [(circuit, observable)]

job = function.run(
# Use `backend_name=backend_name` if you didn't initialize a backend object
backend_name=backend.name,
pubs=pubs,
)

Перевір статус завдання Qiskit Function або отримай результати таким чином:

print(job.status())
result = job.result()
QUEUED

Результати мають той самий формат, що й результат Estimator:

print(f"The result of the submitted job had {len(result)} PUB\n")
print(
f"The associated PubResult of this job has the following DataBins:\n {result[0].data}\n"
)
print(f"And this DataBin has attributes: {result[0].data.keys()}")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
The result of the submitted job had 1 PUB

The associated PubResult of this job has the following DataBins:
DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>))

And this DataBin has attributes: dict_keys(['evs', 'stds', 'ensemble_standard_error'])
The expectation values measured from this PUB are:
1.02116704805492

Приклади рівня пом'якшення

Наступний приклад демонструє встановлення рівня пом'якшення:

options = {"mitigation_level": 2}

job = function.run(backend_name=backend.name, pubs=pubs, options=options)

У наступному прикладі встановлення рівня пом'якшення рівним 1 спочатку вимикає ZNE-пом'якшення, але встановлення zne_mitigation в True перевизначає відповідні налаштування з mitigation_level.

options = {"mitigation_level": 1, "resilience": {"zne_mitigation": True}}

Приклад виводу

Наступний фрагмент коду описує формат PrimitiveResult (та пов'язаного PubResult).

print(f"The result of the submitted job had {len(result)} PUB")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
print(f"And the associated metadata is: \n{result[0].metadata}")
The result of the submitted job had 1 PUB
The expectation values measured from this PUB are:
1.02116704805492
And the associated metadata is:
{'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}

Отримання повідомлень про помилки

Якщо статус твого навантаження — ERROR, скористайся job.result(), щоб отримати повідомлення про помилку для допомоги у налагодженні:

job = function.run(
backend_name="bad_backend_name", pubs=pubs, options=options
)

print(job.result())

Отримання підтримки

Зверніться до підтримки IBM Quantum, вказавши таку інформацію:

  • Ідентифікатор завдання Qiskit Function (qiskit-ibm-catalog), job.job_id
  • Детальний опис проблеми
  • Будь-які відповідні повідомлення або коди помилок
  • Кроки для відтворення проблеми

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

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