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

Запуск квантових схем

Переглянь відео про квантові схеми та примітиви від Олівії Лейнз або відкрий відео в окремому вікні на YouTube.

Огляд уроку

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

  1. Що насправді являють собою квантові комп'ютери IBM®. Потрібно знати основи апаратних особливостей, щоб оптимально проектувати квантові схеми для запуску на них.

  2. Що таке Qiskit, що таке примітиви та як ми можемо використовувати їх для створення та виконання квантових схем.

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

Апаратне забезпечення — IBM-квантові процесори

Щоб зрозуміти, як ми можемо робити оптимальні вибори при проектуванні великомасштабних квантових схем, потрібно знати дещо про фактичне апаратне забезпечення, що буде запускати ці схеми. Тож коротко обговоримо фізичні кубіти та IBM-квантові процесори.

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

На чіпі виготовляються надвисокочастотні лінії передачі для подачі надвисокочастотних сигналів до кубітів. Коли ми застосовуємо точно відкалібровані НВЧ-імпульси — з конкретною частотою, амплітудою, формою та тривалістю — до ліній, ми можемо змусити кубіти виконувати конкретні дії. Це є основою наших квантових вентилів. Ми виготовляємо чіп так, щоб сусідні кубіти з'єднувалися у специфічній решітковій структурі, яка називається решіткою «важкого шестикутника». Ця зв'язність — так звана топологія — наших процесорів є важливим фактором при проектуванні схеми, як ми обговоримо пізніше в уроці.

Інструкції для НВЧ-імпульсу надходять від твого комп'ютера через хмару до кімнатно-температурної контрольної електроніки, яка інтерпретує ці інструкції та фізично генерує імпульси. Після того як кімнатно-температурні блоки управління створюють імпульси, вони проходять через кабелі в рефрижераторний розбавлювач і, зрештою, до квантового чіпа. Сигнал надходить у резонатори, через дротяне з'єднання і потім надходить по лінії передачі до наших кубітів.

IBM має десятки квантових комп'ютерів по всьому світу, і нещодавно оновив свій флот, щоб мати виключно процесори з більш ніж 100 кубітами. Деякі з них розташовані в IBM-квантовому дата-центрі на півночі штату Нью-Йорк та розгорнуті через хмару для використання всіма — і деякі з них є виділеними локальними системами, що підтримують партнерів у мережі IBM Quantum® Network. Ти можеш увійти на quantum.cloud.ibm.com, щоб переглянути, до яких процесорів ти маєш доступ.

Кожен процесор перераховує три метрики продуктивності, які ми обговорювали в попередньому уроці, але як нагадування, ними є: кількість кубітів, EPLG та CLOPS.

  • Кількість кубітів. Це зрозуміло: це загальна кількість кубітів, доступних для використання на одному квантовому процесорі. Для відносно великої задачі в масштабі тобі потрібно переконатися, що використовуєш процесор із достатньою кількістю кубітів для вирішення задачі. Але тільки кількість кубітів — не єдине, що важливо.

  • EPLG або «помилок на шаруватий вентиль». Це міра якості кубітів та квантових вентилів. Вимірює середню помилку, яку кожен вентиль вносить у схему, що заплутує сусідні кубіти в ланцюжку з 100 кубітів. Хочеш, щоб це значення було якомога меншим.

  • CLOPS або «операцій шарів схем за секунду». Це кількісна міра швидкості процесора. Вимірює, скільки шарів певної еталонної схеми, яка називається схемою квантового об'єму, квантовий процесор (QPU) може виконати за одиницю часу. Що більше число, то швидше ми можемо обчислювати.

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

Програмне забезпечення: Qiskit та Qiskit Runtime

Щоб перетворити свою квантову задачу в інструкції для квантового комп'ютера, ти будеш використовувати Qiskit — відкритий набір інструментів розробки програмного забезпечення, розроблений для роботи на квантових комп'ютерах компанією IBM. Є також екосистема Qiskit — колекція програмних підручників та функцій, що будуються або розширюють основні функціональні можливості Qiskit, — та Qiskit Runtime — сервіс квантових обчислень та модель програмування, що дозволяють користувачам проектувати та оптимізувати їхні квантові навантаження та ефективно виконувати їх за допомогою примітивів Qiskit Runtime.

Примітив — це маленький будівельний блок, який можна використовувати для проектування більшої схеми або завдання. Двома найважливішими для нас примітивами є семплер (sampler) та оцінювач (estimator), які ми детальніше обговоримо незабаром.

З нещодавнім випуском Qiskit v1.0 Qiskit став більш продуктивним та стабільним, ніж будь-коли раніше. Тому тим із вас, хто тільки починає, ти прийшов у ідеальний час! Тим із вас, хто вже знайомий з Qiskit, потрібно завантажити та перевстановити нову версію. Для повного посібника з встановлення відвідай посібник Встановлення Qiskit.

Квантові схеми

Тепер ми готові обговорити основу квантових програм: квантові схеми. Цей розділ служитиме лише нагадуванням — якщо ти не знайомий з квантовими схемами, рекомендуємо докладніше ознайомитись з ними, відвідавши урок Квантові схеми в курсі «Основи квантової інформації» перед продовженням.

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

Вентилі представлені різними символами на дротах залучених кубітів. Однокубітні вентилі — як вентиль Адамара, зображений нижче (прямокутник із H) — впливають лише на кубіт, на дроті якого вони розміщені. Багатокубітні вентилі — як вентиль CNOT, також показаний нижче (знак плюс у колі з лінією, що з'єднується з q0) — впливають на два або більше кубітів. На зображеному CNOT стан q1 змінюється відповідно до стану q0. Після виконання всіх вентилів ми можемо вимірювати кубіти, на що вказують чорні вентилі з символом вимірювання. Результати вимірювань записуються на класичні реєстри, подвійно-лінійну шину «meas» внизу.

Приклад простої квантової схеми

Однією важливою характеристикою схеми є її глибина. Глибина квантової схеми — це мінімальна кількість «шарів» квантових вентилів, що виконуються паралельно, необхідних для завершення схеми. Квантові вентилі можуть виконуватись паралельно (одночасно) всякий раз, коли вони не мають жодних спільних кубітів. Але якщо два або більше вентилів діють на один і той самий кубіт, ми не можемо виконувати їх паралельно — вони мають виконуватись у двох окремих шарах, один за одним.

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

Приклад дев'ятишарової схеми

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

Проектування квантової схеми: патерни Qiskit

Отже, як нам підійти до проектування та запуску квантової схеми? Найпростіший спосіб зрозуміти типовий робочий процес квантових обчислень — через патерни Qiskit. Патерни Qiskit — це концептуальний фреймворк, що дозволяє користувачам запускати квантові навантаження, реалізуючи певні кроки з модульними інструментами. Це дозволяє виконувати задачі квантових обчислень на потужній гетерогенній (CPU/GPU/QPU) обчислювальній інфраструктурі. Кроки можуть виконуватися як послуга та можуть включати управління ресурсами, що дозволяє безперешкодну компонованість нових можливостей у міру їх розробки.

Ось основні кроки, які досвідчені користувачі Qiskit, мабуть, впізнають.

  1. Відображення (Map). Цей крок формалізує, як ми беремо загальну задачу та з'ясовуємо, як відобразити її на квантовий комп'ютер у вигляді квантової схеми.

  2. Оптимізація (Optimize). На цьому кроці ми використовуємо транспілятор Qiskit для маршрутизації та компонування схеми на фактичному фізичному кубітному апаратному забезпеченні. Це включає трансляцію окремих квантових вентилів у послідовності операцій, що виконуються на апаратному забезпеченні, а також оптимізацію компонування вентилів.

  3. Виконання (Execute). Примітиви Qiskit Runtime надають інтерфейс до IBM Quantum-апаратного забезпечення, що дозволяє транспільованим схемам запускатися. Цей крок також включає використання технік придушення та пом'якшення помилок, які значною мірою можуть бути абстраговані від користувача.

  4. Постобробка (Post-process). На цьому кроці дані від самого квантового процесора обробляються, надаючи користувачеві корисні результати по вихідній задачі. В основному це охоплює будь-який подальший аналіз зібраних даних.

Відображення

Крок відображення по суті ставить питання: «Як мені перекласти свою задачу у квантову схему, яка може розумно запускатися на квантовому апаратному забезпеченні?» Без сумніву, відображення — важка задача та активна галузь досліджень. Немає надійного методу, що гарантує успіх, але є рекомендовані вказівки та приклади задач, які ми вже знаємо, як відображати.

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

Далі, переклади результати для своєї задачі, які ти хочеш виміряти або зрозуміти, у математичне сподівання або функцію вартості. Функція вартості — це задачно-специфічна функція, що визначає мету задачі як щось, що потрібно мінімізувати або максимізувати. Її можна використовувати, щоб побачити, наскільки добре пробний стан або рішення виконується відносно цієї мети. Ця ідея може застосовуватися до різних застосувань у хімії, машинному навчанні, фінансах, оптимізації тощо — не обов'язково важливо, з якої теми ти підходиш до задачі.

Також майте на увазі, що апаратне забезпечення, яке ти будеш використовувати, має специфічну топологію, як ми обговорювали в розділі про апаратне забезпечення. Деякі кубіти з'єднані, а деякі ні — тобі потрібно відобразити задачу на схему, що поважає топологію «важкого шестикутника» IBM-квантових процесорів.

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

Оптимізація

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

Потім ми оптимізуємо нашу схему для вибраного апаратного забезпечення. По-перше, потрібно ефективно розмістити та маршрутизувати нашу схему. Компонування (layout) означає відображення віртуальних кубітів у схемі на фізичні кубіти на процесорі. Маршрутизація означає налаштування схеми, щоб зв'язність між віртуальними кубітами в схемі відповідала зв'язності фізичних кубітів на процесорі. Є кілька речей, які варто мати на увазі під час компонування та маршрутизації.

  1. Не всі кубіти з'єднані. Деякі знаходяться дуже далеко один від одного на чіпі, і потрібно скорочувати або усувати далекодіючі взаємодії де можливо. Можна застосувати послідовність SWAP-вентилів між сусідніми кубітами для переміщення інформації кубітів, але SWAP-вентилі дорогі та схильні до помилок, тому, можливо, є кращі способи це зробити. Намагайся уникати занадто багатьох дорогих SWAP-вентилів.

  2. Компонування та маршрутизація — ітераційні процеси. Це можна робити вручну, але є також інструмент Qiskit під назвою mapomatic, який може давати рекомендації щодо компонування фізичних кубітів на основі приблизних рівнів помилок. Транспілятор (про який ми незабаром поговоримо) також може зробити обґрунтовану пропозицію.

Далі можна складати послідовності однокубітних вентилів, що діють на один і той самий кубіт, в одиночні вентилі — і іноді позбуватися непотрібних вентилів або комбінацій вентилів. Наприклад, деякі комбінації вентилів можуть бути зведені до простіших — а іноді комбінація вентилів може еквівалентно давати операцію тотожності, тому їх можна просто усунути. Це можна робити автоматично з допомогою транспілятора Qiskit — але також вручну, вентиль за вентилем, якщо потрібен більший контроль.

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

Транспілятор Qiskit

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

Qiskit має чотири вбудовані трубопроводи транспіляції, що відповідають різним рівням оптимізації, і якщо ти вже не знайомий з оптимізацією квантових схем, рекомендуємо використовувати один із них. За замовчуванням процес транспіляції включає ці шість кроків:

  1. Ініціалізація. Цей етап виконує будь-які початкові кроки, необхідні перед вбудовуванням схеми на серверний сервер. Зазвичай це включає розгортання кастомних інструкцій та перетворення схеми на однокубітні та двокубітні вентилі.

  2. Компонування. Цей етап відображає віртуальні кубіти в схемі на фізичні кубіти на серверному сервері. Дивись Етап компонування для детальнішої інформації.

  3. Маршрутизація. Цей етап виконується після застосування компонування та вводить вентилі (наприклад, SWAP-вентилі) у вихідну схему, щоб зробити її сумісною з зв'язністю серверного сервера. Дивись Етап маршрутизації для детальнішої інформації.

  4. Трансляція. Цей етап транслює вентилі в схемі у базовий набір вентилів цільового серверного сервера. Дивись Етап трансляції для детальнішої інформації.

  5. Оптимізація. Цей етап виконує основний цикл оптимізації повторно, поки не буде досягнута умова (наприклад, певна цільова глибина). Є чотири різних рівня оптимізації на вибір, описані нижче.

  6. Розклад (Scheduling). Цей етап призначений для будь-яких апаратно-залежних кроків планування. На загальному рівні планування можна вважати вставкою затримок у схему для врахування часу простою кубітів між виконанням інструкцій.

Є чотири рівні оптимізації від 0 до 3, де вищі рівні оптимізації займають більше часу та обчислювальних зусиль, але можуть дати кращу схему. Рівень оптимізації 0 призначений для характеристичних експериментів пристрою та, як такий, лише відображає вхідну схему на обмеження цільового серверного сервера без виконання будь-яких оптимізацій. Рівень оптимізації 3 докладає найбільше зусиль для оптимізації схеми. Однак, оскільки багато технік оптимізації в транспіляторі базуються на евристиках, більші обчислювальні зусилля не завжди призводять до покращення якості вихідної схеми. Якщо це тебе цікавить більше, дивись документацію транспілятора у документації Qiskit.

Придушення помилок

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

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

  1. Динамічне роз'єднання використовується для ефективного скасування частини екологічного шуму, що вводиться, коли кубіт простоює. Застосовуючи серію вентилів у певний час, можна зробити так, щоб шум, що накопичується в одній частині часу простою, приблизно скасовував шум в іншій частині.
  2. Скручування Паулі — це спосіб вставки випадкових вентилів не для скасування шуму, як у динамічному роз'єднанні, а для спрощення шуму. Вставка випадкових вентилів запобігає накопиченню ефектів різних помилок та спрощує характеристику шуму, оскільки він тепер має стохастичну природу. Цей метод також є основою потужної техніки пом'якшення помилок, яку ми обговоримо нижче.

Виконання

Тепер ми готові виконати квантову програму. Примітиви Qiskit Runtime надають інтерфейс до IBM Quantum-апаратного забезпечення, а також абстрагують придушення та пом'якшення помилок від користувача. Є два примітиви на вибір: Семплер та Оцінювач.

Семплер Qiskit Runtime запускає схему багато разів на квантовому пристрої, виконуючи вимірювання при кожному запуску, та відновлює розподіл ймовірностей із відновлених бітових рядків. Що більше запусків (або знімків) він виконує, то точнішими будуть результати, але це потребує більше часу та квантових ресурсів. Зокрема, він обчислює ймовірність отримання кожного можливого стандартного базисного стану шляхом вимірювання стану, підготовленого схемою.

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

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

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

На рівні стійкості 0 транспілятор нічого не робить зі схемою.

На рівні 1 він запроваджує метод під назвою Twirled Readout Error eXtinction (T-REX). T-REX використовує скручування Паулі, як обговорювалось у розділі про придушення помилок. Як згадувалось, вставка випадкових вентилів у схему може зробити навіть дуже складний, важко моделюємий шум стохастичним і значно легшим для врахування або віднімання в постобробці.

На рівні стійкості 2 додається Zero Noise Extrapolation (ZNE). Це популярна техніка, з якою ми мали багато нещодавніх успіхів. Ідея за ZNE може бути трохи несподіваною — ми фактично додаємо шум поверх того, що вже є! Але це дозволяє нам екстраполювати у зворотному напрямку, щоб передбачити, як виглядатимуть результати при меншому і меншому шумі.

Додавання шуму можна виконати кількома способами. Наприклад, можна розтягнути вентилі, щоб зробити їх довшими і, таким чином, більш схильними до помилок, або запустити більше вентилів, що в кінцевому результаті дають операцію тотожності, тому схема функціонально не змінюється, але ми навмисно беремо більше шуму. Однак це потрібно робити для кожної схеми та кожного математичного сподівання, яке потрібно відстежувати, — тому можна побачити, як це може стати обчислювально дорогим.

Одним конкретним типом ZNE є Probabilistic Error Amplification (PEA). Після того як ми дізнаємося модель шуму для вентиля, PEA працює шляхом вибірки помилок з цієї моделі шуму та навмисного їх введення в схему. Це ще недоступно в Qiskit, але буде пізніше цього року.

Остання форма пом'якшення помилок, яку ми розглянемо, — Probabilistic Error Cancellation (PEC). Замість того щоб знаходитись на 3-му рівні стійкості, PEC — це спеціальна можливість, яку потрібно вмикати вручну в Qiskit, оскільки необхідні обчислювальні ресурси не масштабуються добре порівняно з іншими техніками пом'якшення помилок. Починаєш з вивчення шуму, що впливає на твою схему — запускаєш навчальні або характеризаційні схеми шуму для кожного унікального шару двокубітних вентилів у твоїй схемі. Ці результати дозволяють описати шум у термінах операторів Паулі. Як тільки ти знаєш ці шумові члени, можна модифікувати свої схеми так, щоб вони ефективно мали протилежні вентилі Паулі, вбудовані для скасування цих шумових каналів. У певному сенсі процес схожий на те, як працюють навушники з шумопоглинанням. Однак цей спосіб скасування шуму дуже дорогий, із часом запуску, що швидко та показниково зростає з кількістю вентилів, тому він може бути не найкращим вибором для дуже великої схеми.

Постобробка

Етап постобробки — це де ми візуалізуємо та аналізуємо вихід нашої квантової схеми. Для цього є ряд інструментів Qiskit, таких як модулі візуалізації та квантової інформації. Ми не будемо розглядати їх тут, але побачимо ці модулі в дії, коли заглибимось у деякі прикладні застосування в майбутніх уроках.

Висновок

Сподіваємось, цей урок дав тобі вихровий тур по основних міркуваннях та робочому процесу, який ми використовуємо, коли хочемо запустити квантове обчислення утилітарного масштабу. Він був насичений інформацією, і більша частина з неї не засвоїться, поки ми не побачимо реальних прикладів, де ці теоретичні концепції втілюються в практику. Тож ось що залишається в курсі. Зрештою, цей курс не дарма називається «Квантові обчислення на практиці»!

Наступного разу ми розглянемо конкретний приклад того, як використовувати робочий процес патернів Qiskit для проектування та запуску квантової схеми, яка вирішує класичну задачу з теорії графів — MaxCut.