Вступ до Qiskit Functions
- Qiskit Functions — це експериментальна функція, доступна лише користувачам планів IBM Quantum® Premium Plan, Flex Plan та On-Prem (через IBM Quantum Platform API). Вона перебуває у статусі попереднього релізу та може змінюватися.
Версії пакетів
Код на цій сторінці розроблено з використанням наведених нижче вимог. Рекомендуємо використовувати ці або новіші версії.
qiskit[all]~=1.4.1
qiskit-ibm-runtime~=0.37.0
qiskit-ibm-catalog~=0.4
Qiskit Functions спрощують і прискорюють пошук алгоритмів та розробку застосунків масштабу utility, абстрагуючи окремі частини робочого процесу квантової розробки програмного забезпечення. Таким чином, Qiskit Functions вивільняють час, який зазвичай витрачається на написання коду вручну та тонке налаштування експериментів.
Функції існують у двох формах:
| Тип | Що вона робить? | Приклади входів та виходів | Для кого? |
|---|---|---|---|
| Circuit function | Спрощений інтерфейс для запуску Circuit. Абстрагує транспіляцію, придушення та пом'якшення помилок | Вхід: Абстрактні об'єкти PUB Вихід: Пом'якшені значення математичного сподівання | Дослідники, що використовують Qiskit для відкриття нових алгоритмів і застосунків, без необхідності зосереджуватись на оптимізації під апаратне забезпечення чи обробці помилок. Circuit functions можна використовувати для побудови власних application functions. |
| Application function | Охоплює завдання вищого рівня, наприклад, дослідження алгоритмів і предметно-специфічні сценарії використання. Абстрагує квантовий робочий процес для вирішення задач з класичними входами та виходами | Вхід: Молекули, графи Вихід: Енергії основного та збудженого стану, оптимальні значення для цільової функції | Дослідники в неквантових галузях, які інтегрують квантові обчислення у наявні великомасштабні класичні робочі процеси, без необхідності відображати класичні дані на квантові Circuit. |
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
Функції надаються IBM® та сторонніми партнерами. Кожна з них ефективна для певних характеристик робочого навантаження та має унікальні параметри налаштування продуктивності.
Огляд доступних функцій
Circuit functions
| Назва | Постачальник | Рекомендоване використання | Унікальні переваги |
|---|---|---|---|
| Tensor-Network Error Mitigation | Algorithmiq | Робочі навантаження з малими за вагою спостережуваними та Circuit без циклів. | Знижує накладні витрати на вимірювання та дисперсію, перевершуючи стандартні базові методи пом'якшення помилок, такі як Zero Noise Extrapolation (ZNE) та Probabilistic Error Cancellation (PEC) для відповідних класів Circuit. |
| QESEM: Error Suppression and Error Mitigation | Qedma | Робочі навантаження, що включають Circuit з дробовими або параметризованими Gate, важкими за вагою спостережуваними, а також робочі процеси, що вимагають незміщених значень математичного сподівання та точних оцінок часу виконання. | Видає незміщені значення математичного сподівання з меншою дисперсією та витратами ресу рсів, перевершуючи ZNE та PEC для відповідних класів Circuit. |
| Performance Management | Q-CTRL | Робочі навантаження, що містять параметричні Circuit, глибокі Circuit або вимагають багатьох виконань Circuit. | Автоматично застосовує придушення помилок на основі ШІ до квантових алгоритмів, максимізуючи продуктивність пристроїв IBM для досягнення точних результатів при зменшенні кількості shots, часу обчислень та витрат. Метод без накладних витрат, що підвищує точність виконання для примітивів Sampler та Estimator, сумісний з будь-якою вагою спостережуваних. |
Application functions
| Назва | Постачальник | Рекомендоване використання | Унікальні переваги |
|---|---|---|---|
| QUICK-PDE | ColibriTD | Використання квантових обчислень для мультифізичних диференціальних рівнянь у частинних похідних (PDE). Підготовка робочих процесів симуляції для квантового апаратного забезпечення зі збереженням повного контролю над параметрами квантового та фізичного моделювання. | Пропонує надійну гібридну VQA-структуру, яка надає точні, масштабовані рішення PDE завдяки просунутому кодуванню рішень та спектральним методам, що робить її ідеальною відправною точкою для команд, які прагнуть розвивати можливості квантово-готової симуляції. |
| Quantum Portfolio Optimizer | Global Data Quantum | Робочі навантаження для фінансової оптимізації: пошук оптимальних портфельних стратегій з часом при мінімізації ризику та максимізації прибутку, що забезпечує зворотне тестування торгових стратегій. | Вирішує комбінаторні задачі оптимізації через вузькоспеціалізовану адаптацію квантового алгоритму VQE для цього фінансового сценарію, вико ристовуючи оптимізовані стратегії виконання та оптимізатори, а також шумоврахувальні методи пом'якшення помилок, адаптовані до портфельної оптимізації. |
| HI-VQE Chemistry | Qunova Computing | Робочі навантаження в обчислювальній хімії, молекулярному моделюванні, матеріалознавстві або будь-якій симуляції гамільтоніана, що вимагають вирішення задач електронної структури багатьох тіл. | Вирішує задачі електронної структури молекул за допомогою вдосконаленого SQD, досягаючи хімічної точності (1 ккал/моль, 1,6 мГа) для задач, змодельованих з 40 до 60 Qubit, перевершуючи деякі класичні рішення на суперкомп'ютерах або стандартний SQD за швидкістю збіжності чи точністю відповідно на порядки величин. |
| Iskay Quantum Optimizer | Kipu Quantum | Задачі оптимізації, такі як планування, логістика, маршрутизація та QUBO/HUBO задачі. | Інтегровані на лаштовувані класичні методи попередньої та постобробки для процедури квантової оптимізації. Забезпечує перевагу у часі виконання над класичними вирішувачами (CPLEX, simulated annealing та tabu search) на вибраних HUBO-бенчмарках. Market Split ms_5_100, складна задача, розв'язана за години (дивись цей туторіал). |
| Singularity Machine Learning | Multiverse Computing | Класичні робочі процеси класифікації машинного навчання, які можуть отримати користь від підвищеної точності або обчислювальної ефективності завдяки використанню квантової оптимізації, що виконується на апаратному забезпеченні IBM. | Забезпечує точність, порівнянну з класичними моделями або таку, що їх перевершує, наприклад, Random Forest або XGBoost, при цьому працюючи зі значно меншою кількістю учнів та більш компактним ансамблем. Завдяки квантово-оптимізованому голосуванню відбирає найбільш інформативних учнів та уточнює межі рішень, що призводить до вищої ефективності, зниження складності моделі та більш надійної продуктивності. |
| Optimization Solver | Q-CTRL | Задачі бінарної оптимізації або будь-яка комбінаторна задача, що може бути відображена на бінарну цільову функцію. Підтримуються цільові функції будь-якого порядку та розміри задач до максимального масштабу пристрою. | Шумоврахувальне наскрізне квантове рішення оптимізації, що дозволяє подавати визначення задач високого рівня та автоматично знаходить точні рішення класично складних комбінаторних задач на квантовому апаратному забезпеченні масштабу utility. Абстрагує складність, обробляючи придушення помилок, ефективне відображення та гібридну квантово-класичну оптимізацію для вирішення задач оптимізації в повному масштабі пристрою без глибоких квантових знань. |
Початок роботи з Qiskit Functions
Користувачі планів Premium, Flex та On-Prem (через IBM Quantum Platform API) можуть безкоштовно розпочати роботу з IBM Qiskit Functions або придбати ліцензію в одного з партнерів, які додали функцію до каталогу.
Запит безкоштовного пробного доступу до сторонніх Qiskit Functions
Щоб запросити новий безкоштовний пробний доступ, перейди до Qiskit Functions Catalog і відкрий панель деталей. Натисни Request a free trial та заповни інформацію, яку вимагає партнер Functions, включаючи IBM Cloud AccessGroupId:
- Перейди до IBM Cloud IAM.
- Перевір відповідність вимогам.
- Переключи свій акаунт у верхній панелі на такий, що має формат:
XXXXXXX - [Назва організації] - П ереконайся, що організація збігається з тією, що пов'язана з твоїм Premium-акаунтом.
- Якщо ти бачиш "[Твоє ім'я]'s Account", то використовуєш особистий акаунт, який не має права на преміум-доступ.
- Переключи свій акаунт у верхній панелі на такий, що має формат:
- Знайди ID своєї групи доступу.
- Натисни на назву групи.
- Натисни Details.
- Скопіюй ID групи доступу. Він має починатися з
AccessGroup-.
Встановлення клієнта Qiskit Functions Catalog
-
Щоб почати використовувати Qiskit Functions, встанови клієнт IBM Qiskit Functions Catalog:
pip install qiskit-ibm-catalog -
Отримай свій API ключ з панелі управління IBM Quantum Platform та активуй своє віртуальне середовище Python. Переглянь інструкції з встановлення, якщо у тебе ще немає налаштованого віртуального середовища.
Якщо ти працюєш у надійному середовищі Python (наприклад, на особистому ноутбуці або робочій станції), використай метод
save_account(), щоб зберегти свої облікові дані локально. (Перейди до наступного кроку, якщо ти не використовуєш надійне середовище, наприклад, на спільному або публічному комп'ютері, для автентифікації в IBM Quantum Platform.)Щоб використати
save_account(), запустиpythonу своїй оболонці, а потім введи таке:from qiskit_ibm_catalog import QiskitFunctionsCatalog
QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")Введи
exit(). Відтепер, щоразу коли тобі потрібно автентифікуватись у сервісі, ти можеш завантажити свої облікові дані за допомогоюfrom qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog()
# Load saved credentials
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
-
Уникай виконання коду на ненадійній машині або у зовнішньому хмарному середовищі Python, щоб мінімізувати ризики безпеки. Якщо тобі все ж потрібно використати ненадійне середовище (наприклад, на публічному комп'ютері), змінюй свій API ключ після кожного використання, видаляючи його на сторінці IBM Cloud API keys, щоб знизити ризик. Дізнайся більше у розділі Managing user API keys. Щоб ініціалізувати сервіс у цій ситуації, розгорни наступний розділ для перегляду коду, який можна використати:
Ініціалізація сервісу у ненадійному середовищі
from qiskit_ibm_catalog import QiskitFunctionsCatalog
# After using the following code, delete your API key on the IBM Quantum Platform home dashboard
catalog = QiskitFunctionsCatalog(token="<YOUR_API_KEY>") # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboardобережноЗахищай свій API ключ! Ніколи не включай свій ключ у вихідний код, Python-скрипт або файл notebook. Ділячись кодом з іншими, переконайся, що твій API ключ не вбудований безпосередньо у Python-скрипт. Натомість поділись скриптом без ключа та надай інструкції для його безпечного налаштування.
Якщо ти випадково поділився своїм ключем з кимось або включив йо го у систему контролю версій, наприклад Git, негайно відкликай свій ключ, видаливши його на сторінці IBM Cloud API keys, щоб знизити ризик. Дізнайся більше у розділі Managing user API keys.
-
Після автентифікації ти можеш переглянути список функцій з Qiskit Functions Catalog, до яких маєш доступ:
catalog.list()
[QiskitFunction(qunova/hivqe-chemistry),
QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),
QiskitFunction(algorithmiq/tem),
QiskitFunction(qedma/qesem),
QiskitFunction(multiverse/singularity),
QiskitFunction(ibm/circuit-function),
QiskitFunction(q-ctrl/optimization-solver),
QiskitFunction(colibritd/quick-pde),
QiskitFunction(q-ctrl/performance-management),
QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]
Запуск увімкнених функцій
Після створення об'єкта каталогу ти можеш вибрати функцію за допомогою catalog.load(provider/function-name):
ibm_cf = catalog.load("ibm/circuit-function")
Кожна Qiskit Function має власні входи, параметри та виходи. Перевір конкретні сторінки документації для функції, яку хочеш запустити, щоб отримати більше інформації. За замовчуванням усі користувачі можуть запускати лише одне завдання функції одночасно:
# This cell is hidden from users
# It gets these details programmatically so we can test this notebook
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.circuit.random import random_circuit
service = QiskitRuntimeService()
instance = service.active_account()["instance"]
backend_name = service.least_busy().name
circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
job = ibm_cf.run(
pubs=[(circuit, observable)],
instance=instance,
backend_name=backend_name, # E.g. "ibm_fez"
)
job.job_id
'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'
Перевірка статусу завдання
Наразі таблиця робочих навантажень IBM Quantum відображає лише робочі навантаження Qiskit Runtime. Використовуй job.status() для перегляду поточного статусу свого робочого навантаження Qiskit Function.
За наявності job_id своєї Qiskit Function ти можеш перевірити статус запущених завдань. Він включає такі стани:
QUEUED: Віддалена програма перебуває в черзі Qiskit Function. Пріоритет черги визначається тим, скільки ти вже використовував Qiskit Functions.INITIALIZING: Віддалена програма запускається; це включає налаштування віддаленого середовища та встановлення залежностей.RUNNING: Програма виконується. Це також включає кілька більш детальних статусів, якщо вони підтримуються конкретними функціями:RUNNING: MAPPING": Функція наразі відображає твої класичні входи н а квантові входиRUNNING: OPTIMIZING_FOR_HARDWARE": Функція оптимізується для вибраного QPU. Це може включати транспіляцію Circuit, характеризацію QPU, зворотне поширення спостережуваних тощоRUNNING: WAITING_FOR_QPU: Функція надіслала завдання до Qiskit Runtime та очікує в черзіRUNNING: EXECUTING_QPU: Функція має активне завдання Qiskit RuntimeRUNNING: POST_PROCESSING: Функція виконує постобробку результатів. Це може включати пом'якшення помилок, відображення квантових результатів на класичні тощо
DONE: Програма завершена, і ти можеш отримати дані результатів за допомогоюjob.results().ERROR: Програма зупинила виконання через проблему. Використайjob.result(), щоб отримати повідомлення про помилку.CANCELED: Програму було скасовано: користувачем, сервісом або сервером.
job.status()
'QUEUED'
Отримання результатів
Після того як програма набуде стану DONE, ти можеш використати job.results() для отримання результату. Формат виводу відрізняється для кожної функції, тому обов'язково дотримуйся конкретної документації:
result = job.result()
print(result)
PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': True, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})
Ти також можеш скасувати завдання в будь-який час:
job.stop()
'Job has been stopped.'
Список раніше запущених завдань через Qiskit Functions
Ти можеш використати jobs(), щоб переглянути список усіх завдань, надісланих до Qiskit Functions:
old_jobs = catalog.jobs()
old_jobs
[<Job | f6c29f49-4d5f-4fff-aca6-2e9a115b9763>,
<Job | 7f08c9d5-471b-4da2-92e7-4f2cb94c23a8>,
<Job | 62fe9176-d1e5-467e-b2bd-7a3f3c7be4e5>,
<Job | af525b2e-16b1-45a1-80bb-dbd94ce30258>,
<Job | b95a7a57-c1ad-4958-b7ac-953e4e1ee824>,
<Job | 7bfa33da-0f17-4e67-84b6-f556f7eeb436>,
<Job | ca46c191-9eb9-4de6-bfa7-b60d7eb29b5e>,
<Job | 6ac0ba93-3831-43fb-9fb9-760da2225e06>,
<Job | f0e38071-060d-47e8-988d-9cc1f69358e3>,
<Job | 629cf110-e490-4675-8a07-f6d298d166b0>]
Якщо у тебе вже є ID завдання для певного завдання, ти можеш отримати його за допомогою catalog.get_job_by_id():
# First, get the most recent job that has been executed.
latest_job = old_jobs[0]
# We can also get that same job with get_job_by_id
job_by_id = catalog.get_job_by_id(latest_job.job_id)
# Verify that the job is the same using both retrieval methods.
assert job_by_id.job_id == latest_job.job_id
# Print the job_id for this job.
print(job_by_id.job_id)
f6c29f49-4d5f-4fff-aca6-2e9a115b9763
Отримання повідомлень про помилки
Якщо статус програми — ERROR, використай job.error_message() для отримання повідомлення про помилку таким чином:
job.error_message()
qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'
Наступні кроки
- Досліджуй circuit functions, щоб будувати нові алгоритми та застосунки без необхідності керувати транспіляцією або обробкою помилок.
- Досліджуй application functions, щоб вирішувати предметно-специфічні задачі з класичними входами та виходами.
- Переглянь довідкову документацію API для Qiskit Functions.
- Для практичного досвіду спробуй деякі туторіали, що демонструють Qiskit Functions.