Розрізання схем
Розрізання схем — це техніка збільшення розміру схем, що можуть виконуватися на квантовому залізі, ціною додаткових витрат на вибірку. Цей аддон реалізує цю техніку, при якій певна кількість вентилів, дротів або й того й іншого розрізається, що призводить до менших схем, краще придатних для виконання на залізі. Ці менші схеми потім виконуються, а результати вихідної схеми відновлюються через класичну постобробку. Однак компроміс полягає в тому, що загальна кількість вимірів повинна збільшитись на коефіцієнт, що залежить від кількості та типу здійснених розрізів (відомий як накладні витрати на вибірку). Розрізання схем також може використовуватись для утворення вентилів між віддаленими кубітами, що інакше потребували б великих накладних витрат на SWAP.
Важливі терміни
-
Підсхеми (Subcircuits): Набір схем, що утворюється внаслідок розрізання вентилів у
QuantumCircuitта подальшого розділення від'єднаних підмножин кубітів на менші схеми. Ці схеми містять об'єктиSingleQubitQPDGateта використовуються для ініціалізації кожного підексперименту. -
Підексперимент (Subexperiment): Термін, що описує унікальні зразки схем, пов'язані з підсхемою, які надсилаються на QPU для виконання.
Встановлення пакету для розрізання схем
Є три способи встановити пакет для розрізання схем: через PyPI, зібравши з вихідного коду та запустивши в контейнеризованому сере довищі. Рекомендується встановлювати ці пакети у віртуальне середовище, щоб забезпечити відокремлення залежностей пакетів.
Встановлення з PyPI
Найпростіший спосіб встановити пакет qiskit-addon-cutting — через PyPI:
pip install qiskit-addon-cutting
Встановлення з вихідного коду
Натисни тут, щоб дізнатись, як встановити цей пакет вручну.
Щоб зробити внесок у цей пакет або встановити його вручну, спочатку клонуй репозиторій:
git clone git@github.com:Qiskit/qiskit-addon-cutting.git
і встанови пакет за допомогою pip. Для запуску навчальних матеріалів з репозиторію пакету встанови також залежності для ноутбуків. Встанови залежності dev, якщо плануєш розробляти в репозиторії.
pip install tox notebook -e '.[notebook-dependencies,dev]'
Використання в Docker
Dockerfile, включений у репозиторій аддону, можна використовувати для збирання Docker-образу. Включений файл compose.yaml дозволяє використовувати Docker-образ з наступними командами.
Натисни тут, щоб дізнатись, як використовувати цей пакет у Docker.
git clone git@github.com:Qiskit/qiskit-addon-cutting.git
cd qiskit-addon-cutting
docker compose build
docker compose up
Якщо ти використовуєш podman і podman-compose замість docker, команди такі:
podman machine start
podman-compose --podman-pull-args short-name-mode="permissive" build
podman-compose up
Після запуску контейнера ти побачиш повідомлення, схоже на:
notebook_1 | To access the server, open this file in a browser:
notebook_1 | file:///home/$USERNAME/.local/share/jupyter/runtime/jpserver-7-open.html
notebook_1 | Or copy and paste one of these URLs:
notebook_1 | http://e4a04564eb39:8888/lab?token=00ed70b5342f79f0a970ee9821c271eeffaf760a7dcd36ec
notebook_1 | or http://127.0.0.1:8888/lab?token=00ed70b5342f79f0a970ee9821c271eeffaf760a7dcd36ec
Остання URL у цьому повідомленні надасть тобі доступ до інтерфейсу Jupyter notebook.
Крім того, домашній каталог містить підкаталог із назвою persistent-volume. Усі роботи, які ти хочеш зберегти, слід розміщувати в цьому каталозі, оскільки він єдиний, що зберігається між різними запусками контейнера.
Теоретичне підґрунтя
У процесі розрізання схем існує два типи розрізів: розріз вентиля або «просторово-подібний» розріз, при якому розріз проходить через вентиль, що діє на два (або більше) кубіти, та розріз дроту або «часово-подібний» розріз, який проходить безпосередньо через дріт кубіту (по суті, однокубітний вентиль тотожності, розрізаний на дві частини).
Діаграма нижче зображує приклад розрізання вентилів таким чином, що схема може бути розділена на два менших фрагменти з меншою кількістю кубітів.

При підготовці робочого процесу розрізання схем є три сценарії, що стосуються наявності класичного зв'язку між виконаннями схем. Перший — коли доступні лише локальні операції (LO), тоді як два інших вводять класичний зв'язок між виконаннями, відомий як локальні операції та класичний зв'язок (LOCC). Сцен арії LOCC потім поділяються на майже реальний час, односпрямований зв'язок між виконаннями схем, або реальний час, двоспрямований зв'язок (що може зустрічатись у середовищі з декількома QPU).
Хоча розрізання схем може використовуватись для виконання квантових схем, більших ніж можливо на доступному залізі, це пов'язано з певними витратами. Оскільки техніку можна сформулювати як задачу квазіймовірнісного розкладу (QPD), для відновлення результатів потрібні експоненційні накладні витрати на вибірку. Цей коефіцієнт — це те, у скільки разів повинна збільшитись загальна кількість вимірів, щоб квазіймовірнісний розклад давав ту саму величину похибки, , яку ти отримав би при виконанні вихідної схеми. Кожен розрізаний вентиль додає до цих витрат, і величина накладних витрат залежить від типу розрізаного вентиля (більше деталей про накладні витрати на вибірку в останньому додатку [1]).
Наприклад, один розрізаний вентиль CNOT спричиняє накладні витрати на вибірку 9 [2,6], а схема з розрізами дротів спричиняє накладні витрати , коли класичний зв'язок недоступний (сценарій LO). Це зменшується до , коли класичний зв'язок стає доступним (сценарій LOCC) [4]. Однак розрізання дротів із класичним зв'язком (LOCC) не підтримується цим пакетом.
Формально задача QPD для розрізання схем може бути виражена так:
де — квантовий канал, що реалізує бажану операцію, а кожен — дійсний коефіцієнт, що відповідає каналу , який може бути виконаний на залізі.
Результати, еквівалентні бажаному каналу , отримуються спочатку генерацією коефіцієнтів , потім виконанням підекспериментів для отримання результатів різних каналів з метою відновлення математичних сподівань, що відповідають .