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

Розрізання схем

Розрізання схем — це техніка збільшення розміру схем, що можуть виконуватися на квантовому залізі, ціною додаткових витрат на вибірку. Цей аддон реалізує цю техніку, при якій певна кількість вентилів, дротів або й того й іншого розрізається, що призводить до менших схем, краще придатних для виконання на залізі. Ці менші схеми потім виконуються, а результати вихідної схеми відновлюються через класичну постобробку. Однак компроміс полягає в тому, що загальна кількість вимірів повинна збільшитись на коефіцієнт, що залежить від кількості та типу здійснених розрізів (відомий як накладні витрати на вибірку). Розрізання схем також може використовуватись для утворення вентилів між віддаленими кубітами, що інакше потребували б великих накладних витрат на 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. Усі роботи, які ти хочеш зберегти, слід розміщувати в цьому каталозі, оскільки він єдиний, що зберігається між різними запусками контейнера.

Теоретичне підґрунтя

У процесі розрізання схем існує два типи розрізів: розріз вентиля або «просторово-подібний» розріз, при якому розріз проходить через вентиль, що діє на два (або більше) кубіти, та розріз дроту або «часово-подібний» розріз, який проходить безпосередньо через дріт кубіту (по суті, однокубітний вентиль тотожності, розрізаний на дві частини).

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

Діаграма розрізання вентилів: одна велика схема розрізається на дві менші, позначені «A» та «B»

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

Хоча розрізання схем може використовуватись для виконання квантових схем, більших ніж можливо на доступному залізі, це пов'язано з певними витратами. Оскільки техніку можна сформулювати як задачу квазіймовірнісного розкладу (QPD), для відновлення результатів потрібні експоненційні накладні витрати на вибірку. Цей коефіцієнт — це те, у скільки разів повинна збільшитись загальна кількість вимірів, щоб квазіймовірнісний розклад давав ту саму величину похибки, ϵ\epsilon, яку ти отримав би при виконанні вихідної схеми. Кожен розрізаний вентиль додає до цих витрат, і величина накладних витрат залежить від типу розрізаного вентиля (більше деталей про накладні витрати на вибірку в останньому додатку [1]).

Наприклад, один розрізаний вентиль CNOT спричиняє накладні витрати на вибірку 9 [2,6], а схема з nn розрізами дротів спричиняє накладні витрати O(16n)\mathcal{O}(16^n), коли класичний зв'язок недоступний (сценарій LO). Це зменшується до O(4n)\mathcal{O}(4^n), коли класичний зв'язок стає доступним (сценарій LOCC) [4]. Однак розрізання дротів із класичним зв'язком (LOCC) не підтримується цим пакетом.

Формально задача QPD для розрізання схем може бути виражена так:

U=iaiFi, \mathcal{U} = \sum_i a_i \mathcal{F}_i,

де U\mathcal{U} — квантовий канал, що реалізує бажану операцію, а кожен aia_i — дійсний коефіцієнт, що відповідає каналу Fi\mathcal{F}_i, який може бути виконаний на залізі.

Результати, еквівалентні бажаному каналу U\mathcal{U}, отримуються спочатку генерацією коефіцієнтів aia_i, потім виконанням підекспериментів для отримання результатів різних каналів Fi\mathcal{F}_i з метою відновлення математичних сподівань, що відповідають U\mathcal{U}.

Короткий приклад: розрізання RZZGate

Як базовий явний приклад, розглянемо розклад розрізаного RZZGate (деталі можна знайти в [2]). Квантова схема, що містить RZZGate, може бути симульована шляхом виконання шести підекспериментів, де RZZGate замінено лише однокубітними операціями (це Fi\mathcal{F}_i's з рівняння вище). Результати цієї схеми відновлюються об'єднанням результатів кожного підексперименту з набором коефіцієнтів (aia_i's з рівняння вище), які можуть бути як додатніми, так і від'ємними.

Для деякого обраного параметра θ\theta для RZZGate шість підекспериментів такі:

  1. З коефіцієнтом a1=cos2(θ/2)a_1 = \cos^2(\theta/2) нічого не робити (III\otimes I)
  2. З коефіцієнтом a2=sin2(θ/2)a_2 = \sin^2(\theta/2) виконати ZGate на кожному кубіті (ZZZ\otimes Z)
  3. З коефіцієнтом a3=sin(θ)/2a_3 = -\sin(\theta)/2 виконати проєктивне вимірювання в базисі ZZ на першому кубіті та SS на другому (MzSM_z\otimes S). Якщо результат вимірювання 11, перевернути знак внеску цього результату під час відновлення.
  4. З коефіцієнтом a4=sin(θ)/2a_4 = \sin(\theta)/2 виконати проєктивне вимірювання в базисі ZZ на першому кубіті та SS^\dagger на другому (MzSM_z\otimes S^\dagger). Якщо результат вимірювання 1, перевернути знак внеску цього результату під час відновлення.
  5. Те саме, що і 3. (a5=a3a_5=a_3), але поміняти кубіти місцями (виконати SMzS\otimes M_z замість цього).
  6. Те саме, що і 4. (a6=a4a_6=a_4), але поміняти кубіти місцями (виконати SMzS^\dagger\otimes M_z замість цього).

Таблиця довідкових накладних витрат на вибірку

Наступна таблиця надає коефіцієнт накладних витрат на вибірку для різноманітних дво-кубітних інструкцій, за умови що розрізається лише одна інструкція.

ІнструкціїКути KAK-розкладуКоефіцієнт накладних витрат на вибірку
CSGate, CSdgGate, CSXGate(π/8,0,0)\left(\pi/8, 0, 0\right)3+2(2)2.8283+2\sqrt(2) \approx 2.828
CXGate, CYGate, CZGate, GHGate, ECRGate(π/4,0,0)\left(\pi/4, 0, 0\right)32=93^2=9
iSwapGate, DCXGate(π/4,π/4,0)\left(\pi/4, \pi/4, 0\right)72=497^2 = 49
SwapGate(π/4,π/4,π/4)\left(\pi/4, \pi/4, \pi/4\right)72=497^2 = 49
RXXGate, RYYGate, RZZGate, RZXGate(θ/2,0,0,)\left(\lvert\theta/2\rvert, 0, 0, \right)(1+2sin(θ))2\left(1 + 2\lvert\sin(\theta)\rvert\right)^2
CRXGate, CRYGate, CRZGate, CPhaseGate(θ/4,0,0)\left(\lvert\theta/4\rvert, 0, 0\right)(1+2sin(θ/2))2\left(1 + 2\lvert\sin(\theta/2)\rvert\right)^2
XXPlusYYGate, XXMinusYYGate(θ/4,θ/4,0)\left(\vert\theta/4\rvert, \lvert\theta/4\rvert, 0\right)(1+4sin(θ/2)+2sin2(θ/2))2\left(1 + 4\lvert\sin(\theta/2)\rvert + 2\sin^2(\theta/2)\right)^2 (не залежить від β\beta)
Move (розріз дроту в сценарії LO)N/A42=164^2 = 16

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

Посилання

[1] Christophe Piveteau, David Sutter, Circuit knitting with classical communication, https://arxiv.org/abs/2205.00016

[2] Kosuke Mitarai, Keisuke Fujii, Constructing a virtual two-qubit gate by sampling single-qubit operations, https://arxiv.org/abs/1909.07534

[3] Kosuke Mitarai, Keisuke Fujii, Overhead for simulating a non-local channel with local channels by quasiprobability sampling, https://arxiv.org/abs/2006.11174

[4] Lukas Brenner, Christophe Piveteau, David Sutter, Optimal wire cutting with classical communication, https://arxiv.org/abs/2302.03366

[5] K. Temme, S. Bravyi, and J. M. Gambetta, Error mitigation for short-depth quantum circuits, https://arxiv.org/abs/1612.02058

[6] Lukas Schmitt, Christophe Piveteau, David Sutter, Cutting circuits with multiple two-qubit unitaries, https://arxiv.org/abs/2312.11638

[7] Jun Zhang, Jiri Vala, K. Birgitta Whaley, Shankar Sastry, A geometric theory of non-local two-qubit operations, https://arxiv.org/abs/quant-ph/0209120