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

Вступ до транспіляції

Огляд транспіляції та відповідних інструментів — локально або у хмарі.

Транспіляція — це процес перетворення заданої вхідної схеми відповідно до топології конкретного квантового пристрою та оптимізації інструкцій схеми для виконання на шумних квантових комп'ютерах. Ця документація охоплює інструменти та робочі процеси для локальної транспіляції, доступної всім користувачам Qiskit, а також для хмарного Сервісу транспілятора Qiskit, доступного користувачам планів Premium Plan, Flex Plan та On-Prem (через IBM Quantum Platform API). Якщо ти використовуєш примітиви та цікавишся лише стандартними параметрами транспіляції, наданими сервісом Qiskit Runtime, прочитай розділ Налаштування компіляції під час виконання для Qiskit Runtime.

Процес транспіляції приймає схему, що містить твої інструкції:

Двокубітна квантова схема, що містить вентиль Адамара та два вентилі CNOT.

Потім транспіляція перетворює її так, що використовуються лише інструкції, доступні на вибраному бекенді, і оптимізує ці інструкції для мінімізації ефектів шуму:

Та сама двокубітна квантова схема після транспіляції. Вона містить вентилі RZ, X, SX та ECR.


Центральний компонент Qiskit SDK, транспілятор розроблений з урахуванням модульності та розширюваності. Його основне призначення — писати нові перетворення схем (відомі як проходи транспілятора) і комбінувати їх з іншими наявними проходами, що значно зменшує глибину та складність квантових схем. Те, які проходи поєднуються разом і в якому порядку, суттєво впливає на кінцевий результат. Цей конвеєр визначається об'єктами PassManager та StagedPassManager. StagedPassManager організовує виконання одного або декількох PassManager і визначає порядок їх виконання, тоді як об'єкт PassManager є просто колекцією одного або декількох проходів. Уявляй StagedPassManager як диригента оркестру, PassManager — як різні секції інструментів, а об'єкти Pass — як окремих музикантів. Таким чином, ти можеш компонувати апаратно-ефективні квантові схеми, що дозволяють виконувати роботу рівня корисності, утримуючи шум під контролем.

Більше інформації про етапи менеджера проходів дивись у розділі Етапи транспілятора.

Архітектура набору інструкцій

Крім зменшення глибини та складності квантових схем, транспілятор призначений для перетворення інструкцій, що містяться в заданій QuantumCircuit, відповідно до Архітектури набору інструкцій (ISA) конкретного бекенду. Схеми, що відповідають ISA, містять лише інструкції, підтримувані Target бекенду, такі як доступні базові вентилі апаратного забезпечення, вимірювання, скидання та операції управляючого потоку, і відповідають обмеженням, заданим зв'язністю апаратного забезпечення, тобто CouplingMap цілі. При поданні завдання на бекенд IBM Quantum® схеми повинні відповідати ISA бекенду.

Етапи транспілятора

Вбудований конвеєр транспілятора Qiskit складається з шести основних етапів:

  1. init — цей прохід виконує всі початкові проходи, необхідні перед вбудовуванням схеми. Зазвичай це передбачає розгортання кастомних інструкцій та перетворення схеми до однокубітних і двокубітних вентилів. За замовчуванням перевіряються інструкції схеми та багатокубітні вентилі перетворюються на однокубітні та двокубітні.
  2. layout — цей прохід застосовує розмітку, відображаючи віртуальні кубіти в твоїй схемі на фізичні кубіти QPU.
  3. routing — цей прохід виконується після застосування розмітки та вставляє вентилі (тобто SWAP) у вихідну схему, щоб зробити її сумісною зі зв'язністю QPU (картою зв'язків).
  4. translation — цей прохід перекладає вентилі в схемі до базового набору інструкцій QPU.
  5. optimization — цей прохід виконує цикл оптимізації для пошуку більш ефективних розкладень квантової схеми до виконання умови (наприклад, фіксованої глибини).
  6. scheduling — цей етап призначений для будь-яких апаратно-обізнаних проходів планування. Якщо користувач задає метод планування, цей етап враховує весь час простою в схемі.

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

Транспіляція за допомогою менеджерів проходів

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

Більш досвідчені користувачі можуть налаштовувати набір об'єктів PassManager та StagedPassManager і визначати порядок виконання кожного етапу. Це може суттєво змінити кінцеву вихідну схему. Фактично кастомний підхід до транспіляції квантового алгоритму часто дає більш ефективне придушення помилок, ніж стандартний підхід. Кастомний підхід передбачає переписування квантових схем відповідно до обмежень апаратного забезпечення та придушення ефектів шуму. Логіка цього ланцюжка інструментів є настроюваною і не повинна бути лінійною. Процес транспіляції може готувати ітеративні цикли, умовні гілки та інші складні поведінки. Гарна відправна точка при розробці набору кастомних проходів — вивчити стандартну послідовність перетворень.

Огляд транспіляції за допомогою менеджерів проходів дивись у розділі Транспіляція за допомогою менеджерів проходів.

Стандартна транспіляція

Для простішого, але менш настроюваного способу використання транспілятора "з коробки" використовуй функцію qiskit.compiler.transpile. Вона генерує та запускає один з наперед визначених об'єктів StagedPassManager на основі, зокрема, прапорця optimization_level, який можна встановити на 0, 1, 2 або 3. Вищі рівні генерують більш оптимізовані схеми ціною збільшення часу транспіляції.

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

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