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

Створення та запуск твоєї першої квантової програми

Вступ

У наступному відео Олівія Лейнс проведе тебе крізь матеріал цього уроку. Або ж ти можеш відкрити відео на YouTube для цього уроку в окремому вікні.

Ласкаво просимо до Use a quantum computer today! Мета цього курсу — допомогти тобі запустити код на справжньому квантовому комп'ютері в найкоротші терміни, без жодних попередніх знань. Почнімо.

Цей перший урок — лагідний, практичний вступ до квантових обчислень, що підходить як допитливим початківцям, так і зайнятим керівникам. Ти дізнаєшся про квантові схеми та напишеш невелику квантову програму, яка створює заплутаність (entanglement), і запустиш її на справжньому квантовому комп'ютері IBM®. Також є можливість запустити ту саму програму на симуляторі, якщо ти вирішиш пропустити запуск на справжньому квантовому комп'ютері.

Ти можеш запустити цей ноутбук від початку до кінця в новому середовищі Google Colab або локально.

Налаштування

Щоб запустити цей ноутбук у Google Colab, тобі потрібен обліковий запис Google, аби відкривати ноутбуки та виконувати клітинки в браузері.

Щоб запустити на справжньому квантовому комп'ютері IBM, тобі також знадобиться (безкоштовний) обліковий запис IBM Quantum® Platform. Ти можеш відкрити інстанцію за допомогою Open Plan, щоб отримати 10 хвилин часу квантового процесорного блоку (QPU) за ковзне вікно 28 днів — насправді це чимало! Якщо у тебе виникнуть проблеми з обліковим записом, зверни увагу на сторінку підтримки.

Також можна запустити цей ноутбук локально після встановлення Qiskit, дотримуючись інструкцій на IBM Quantum Platform.

Встановлення та імпорти

У Colab ми встановлюємо залежності всередині ноутбука, щоб усі використовували однакові інструменти. У наступній клітинці встановлюється Qiskit із модулем візуалізації та двома доповненнями: Aer (швидкі симулятори) і клієнт IBM Runtime (для запусків на квантовому комп'ютері).

Далі йде низка імпортів. Клас QuantumCircuit — це місце, де ми визначаємо наші квантові біти, або кубіти, та операції над ними. Це наш перший квантовий термін: кубіт — базовий будівельний блок квантових обчислень, так само як біт є будівельним блоком класичних обчислень. По мірі створення схеми ми дізнаємось більше про особливі властивості кубітів. plot_histogram буде використовуватися для візуалізації результатів нашої квантової схеми. AerSimulator дозволяє симулювати квантову схему на класичному комп'ютері. Але симулятори не можуть запускати квантові схеми в тому ж масштабі, що й справжні квантові комп'ютери — саме тому нам потрібні справжні квантові комп'ютери. Це може бути корисно для тестування, налагодження або навчальних цілей, або якщо твої 10 безкоштовних хвилин часу QPU вичерпані. preset_passmanagers допомагають оптимізувати схеми для ефективного запуску на апаратному забезпеченні, що стає дуже важливим по мірі ускладнення наших схем. Sampler і QiskitRuntimeService необхідні для фактичного запуску схеми на квантовому комп'ютері. Більше про це пізніше.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
!pip install 'qiskit[visualization]' qiskit-ibm-runtime qiskit-aer
# Core Qiskit imports
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit_aer import AerSimulator
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

# IBM Runtime specific imports
from qiskit_ibm_runtime import SamplerV2 as Sampler, QiskitRuntimeService

Далі ми виконаємо швидку перевірку середовища. Ми підтверджуємо версії та перевіряємо імпорти.

Якщо тут щось не спрацьовує, зазвичай це проблема з встановленням залежностей; усунення цього зараз запобігає заплутаним помилкам пізніше.

import sys

import qiskit
import qiskit_aer
import qiskit_ibm_runtime

print("Python:", sys.version.split()[0])
print("qiskit:", qiskit.__version__)
print("qiskit-aer:", qiskit_aer.__version__)
print("qiskit-ibm-runtime:", qiskit_ibm_runtime.__version__)
Python: 3.12.2
qiskit: 2.2.3
qiskit-aer: 0.17.2
qiskit-ibm-runtime: 0.41.1

Невелике відхилення: використай Composer

Перш ніж писати код, корисно побачити схеми візуально. IBM Quantum Composer дозволяє будувати схеми, перетягуючи вентилі на дроти. Це чудовий спосіб зрозуміти, що робить схема, не відволікаючись на синтаксис.

Відкрий Composer тут.

Після завантаження запусти покроковий посібник із меню: Help | Build your first circuit. Проходь його у власному темпі. По мірі просування зверни увагу на те, як кожен вентиль змінює очікуване вимірювання.

Посібник проводить через побудову схеми "Hello World". Вона візуалізується у вигляді так званої діаграми схеми, де кубіти представлені горизонтальними лініями, а вентилі, що діють на ці кубіти, — прямокутниками або іншими символами на лініях. Ця схема знайомить нас із кількома ключовими особливостями кубітів і квантових комп'ютерів:

По-перше, червоний прямокутник з позначкою "H" — це вентиль Адамара, який створює стан суперпозиції кубіта 0. На відміну від біта, який може бути лише в стані 1 або 0, стан кубіта може включати обидві можливості одночасно, з певними вагами (які називаються амплітудами), прив'язаними до кожної. Суперпозиція не означає, що ти коли-небудь побачиш обидва результати в одному вимірюванні; це означає, що стан налаштований так, що будь-який результат може статися при вимірюванні.

По-друге, кола та вертикальна лінія, що з'єднує два кубіти, — це вентиль CNOT, який генерує заплутаність між двома кубітами. Заплутаність — це особливий вид зв'язку між кубітами. Коли кубіти заплутані, результати вимірювань можуть бути сильно корельовані в спосіб, що не відповідає тому, чого ми очікували б від звичайних незалежних підкидань монети або від будь-якої класичної кореляції. Коли два кубіти заплутані, вимірювання одного миттєво повідомить тобі результат вимірювання іншого.

Ще одна ключова ідея, яку ти побачиш у посібнику, — це кількість спроб (shots). Оскільки вимірювання — це момент, коли кубіт перестає поводитися як квантовий стан і дає тобі класичний результат, стан суперпозиції ймовірнісно колапсує до 0 або 1 при вимірюванні. Тому, щоб дізнатися про цю суперпозицію, потрібно вимірювати її багато разів, запускаючи одну й ту саму схему для накопичення статистики. Це й називається кількістю спроб (shots).

Перевір своє розуміння

Подумай над кожним запитанням нижче, а потім натисни, щоб розкрити відповідь.

Чи можна безпосередньо побачити суперпозицію з одного вимірювання?

Answer

Ні. Одне вимірювання завжди повертає класичне значення: або 0, або 1. Ідея "суміші" проявляється лише в статистиці, яку ти бачиш після багатьох запусків, які також називаються кількістю спроб (shots).

Простими словами, що дає тобі заплутаність?

Answer

Вона дає тобі пов'язані результати. Вимірювання одного кубіта говорить тобі щось про інший. Цей зв'язок сильніший за незалежну випадковість і сильніший, ніж будь-яка суто класична кореляція або спільна випадковість може пояснити.

Якщо кубіт знаходиться в суперпозиції, що ти бачиш в одному вимірюванні, і чому потрібно багато спроб?

Answer

В одному вимірюванні ти бачиш лише один класичний результат: або 0, або 1. Тобі потрібно багато спроб, тому що "суперпозиція" проявляється як розподіл ймовірностей, який можна оцінити лише збираючи статистику під час повторних запусків.

Подивись на гістограму вимірювань твоєї схеми Hello World у Composer. Що ти бачиш? Чому це є ознакою заплутаності?

Answer

Вона показує 50% шанс перебування в стані 00|00\rangle та 50% шанс перебування в стані 11|11\rangle. Це означає, що якщо ти виміряєш один як 0, інший також буде 0, і якщо ти виміряєш один як 1, інший також буде 1. Це кореляція між двома кубітами, яку можна пояснити заплутаністю.

Створення та запуск квантової програми за допомогою Qiskit

Гаразд, повернімося до програмування. Ми збираємося отримати той самий заплутаний стан, що і в Composer (він називається Φ+\Phi^+ (phi-plus) стан Белла), але цього разу ми напишемо код вручну. Нам потрібно розвинути цей навик, тому що в міру масштабування до більшої кількості кубітів і складніших схем Composer не зможе нам допомогти.

Щоб побудувати схему стану Белла, ми використовуємо вентиль HH (Адамара), щоб помістити перший кубіт у рівну суперпозицію. Потім ми застосовуємо вентиль CXCX (controlled-NOT), який заплутує два стани разом. Тепер два кубіти корельовані у спосіб, що не має класичного аналога.

# --- Build the Bell circuit (phi-plus) ---
bell = QuantumCircuit(2)
bell.h(0)
bell.cx(0, 1)
bell.measure_all() # creates a classical register named "meas"

bell.draw("mpl")

Output of the previous code cell

Допоміжна функція для запуску схем

Тепер визначимо допоміжну функцію, яка обробляє процес запуску квантової схеми та отримання результатів вимірювань. Ця функція піклується про транспіляцію схеми відповідно до набору інструкцій бекенду, запуску її через примітив Sampler і вилучення лічильників із результатів.

def run_circuit_and_get_counts(circuit, backend, shots=1000):
"""
Runs a quantum circuit on a specified backend and returns the measurement counts.

Args:
circuit (QuantumCircuit): The quantum circuit to run.
backend: The Qiskit backend (real device or simulator).
shots (int): The number of shots to run the circuit.

Returns:
dict: A dictionary of measurement counts.
"""
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(circuit)

sampler = Sampler(mode=backend)

job = sampler.run([isa_circuit], shots=shots)
result = job.result()

return result[0].data.meas.get_counts()

Запуск на QPU та візуалізація результатів

Нарешті, ми запускаємо схему на квантовому процесорному блоці (QPU) IBM у хмарі для 1000 спроб і будуємо гістограму результатів. Квантові процесорні блоки IBM — це фізичні системи, які можуть зазнавати шумів, тому вентилі трохи недосконалі, вимірювання іноді можуть бути хибними, а калібрування пристрою з часом дрейфує.

Запуск на справжніх квантових комп'ютерах також вносить практичні міркування. Завдання можуть стояти в черзі, оскільки багато людей можуть використовувати один і той самий пристрій. Також потрібно вибрати кількість спроб, яка балансує між статистичними міркуваннями (більше спроб означає вищий сигнал-шум) та обмеженнями часу/вартості.

Дотримуйся інструкцій у коментарях коду наступної клітинки. Після запуску клітинки ти повинен побачити гістограму з приблизно рівними лічильниками для бітових рядків 0000 та 1111, з деякими появами 0101 або 1010 через шум. Наступна клітинка в цьому ноутбуці запускає ту саму схему на симуляторі, якщо ти вирішиш пропустити запуск на QPU.

# Syntax for first saving your token.  Delete these lines after saving your credentials.
QiskitRuntimeService.save_account(
channel="ibm_quantum_platform",
token="YOUR_TOKEN_HERE",
overwrite=True,
set_as_default=True,
)
service = QiskitRuntimeService(channel="ibm_quantum_platform")

# Load saved credentials
service = QiskitRuntimeService()

# Use the least busy backend, or uncomment the loading of a specific backend like "ibm_fez".
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
# backend = service.backend("ibm_fez")
print(backend.name)
ibm_pittsburgh
counts = run_circuit_and_get_counts(bell, backend, shots=1000)
plot_histogram(counts)

Output of the previous code cell

Запуск на симуляторі та візуалізація результатів

Симулятор — це версія квантових обчислень "у ідеальному світі". Тут ми запускаємо схему на симуляторі для 1000 спроб і будуємо гістограму результатів. Ти повинен побачити приблизно рівні лічильники для станів 0000 та 1111, без жодних появ 0101 або 1010, що є ознакою ідеальної кореляції стану Белла.

backend = AerSimulator()
counts = run_circuit_and_get_counts(bell, backend, shots=1000)

plot_histogram(counts)

Output of the previous code cell

Перевір своє розуміння

Які два вентилі створюють стан Белла тут?

Answer

Вентиль H на кубіті 0, після якого йде вентиль CX із кубітом 0 як керуючим і кубітом 1 як цільовим.

На ідеальному симуляторі які два бітові рядки мають домінувати в гістограмі?

Answer

00 та 11 повинні домінувати.

Чому ідеальний симулятор не завжди матиме точно однакову кількість лічильників 00 і 11?

Answer

Навіть якщо симулятор є "ідеальним" і приводить до ідеального стану Белла, він все одно симулює за своєю суттю випадковий процес, тому статистичні флуктуації все одно виникатимуть. Це схоже на підкидання монети 1000 разів: навіть якщо є точно 50/50 шансів, що монета впаде орлом або решкою, це не означає, що ти завжди отримаєш рівно 500 разів орла і 500 разів решки.

Чому справжній квантовий комп'ютер може показувати деякі результати 01 або 10, навіть якщо симулятор цього не показав?

Answer

Тому що справжні пристрої мають шуми. Вентилі та вимірювання не є ідеальними, і це може вносити випадкові помилки.

Яка одна практична відмінність між симуляторами та справжніми квантовими комп'ютерами, окрім шуму?

Answer

Квантові комп'ютери можуть передбачати час очікування в черзі, обмежену доступність та обмеження, специфічні для пристрою, що впливають на те, як запускаються схеми.

Висновок

Ми почали з налаштування Qiskit у новому середовищі Colab, що саме так і починаються багато реальних робочих процесів із ноутбуками. Потім ми вирушили в подорож у квантові обчислення за допомогою Composer. Далі ми побудували просту двокубітну схему, яка створює стан Белла Φ+\Phi^+, і використали повторну вибірку та візуалізували заплутаність як кореляцію в гістограмі вимірювань кубітів. Ми також побачили, як справжні квантові комп'ютери вносять шум і помилки.

Навчальна мета

Тепер, коли ми розглянули, як створити стан Белла Φ+\Phi^+, подивись, чи зможеш відредагувати код для створення одного з інших трьох станів Белла. Зокрема, стан Ψ\Psi^- буде використаний у наступному уроці, тому якщо ти зрозумієш, як його створити, ти будеш попереду.

This translation based on the English version of 7 трав. 2026 р.