Circuit cutting
Circuit cutting adalah teknik untuk memperbesar ukuran Circuit yang bisa dijalankan di hardware kuantum, dengan konsekuensi overhead sampling tambahan. Addon ini mengimplementasikan teknik tersebut, di mana sejumlah gate, wire, atau keduanya dipotong, menghasilkan Circuit yang lebih kecil dan lebih cocok untuk dieksekusi di hardware. Circuit-circuit yang lebih kecil ini kemudian dieksekusi, dan hasil dari Circuit asli direkonstruksi melalui post-processing klasik. Namun, trade-offnya adalah total jumlah shot harus ditingkatkan dengan faktor yang bergantung pada jumlah dan jenis pemotongan yang dilakukan (dikenal sebagai sampling overhead). Circuit cutting juga bisa digunakan untuk membuat gate antara qubit-qubit yang berjauhan yang seharusnya membutuhkan overhead SWAP yang besar.
Istilah penting
-
Subcircuit: Sekumpulan Circuit yang dihasilkan dari memotong gate dalam sebuah
QuantumCircuitlalu memisahkan subset qubit yang terputus menjadi Circuit yang lebih kecil. Circuit-circuit ini berisi objekSingleQubitQPDGatedan digunakan untuk menginstansiasi setiap subeksperimen. -
Subeksperimen: Istilah yang digunakan untuk mendeskripsikan sampel Circuit unik yang terkait dengan sebuah subcircuit, yang dikirim ke QPU untuk dieksekusi.
Instal paket circuit cutting
Ada tiga cara untuk menginstal paket circuit cutting: PyPI, membangun dari sumber, dan menjalankan dalam lingkungan container. Disarankan untuk menginstal paket-paket ini dalam virtual environment untuk memastikan pemisahan antar dependensi paket.
Instal dari PyPI
Cara paling langsung untuk menginstal paket qiskit-addon-cutting adalah dengan PyPI:
pip install qiskit-addon-cutting
Instal dari sumber
Klik di sini untuk membaca cara menginstal paket ini secara manual.
Untuk berkontribusi pada paket ini atau menginstalnya secara manual, pertama clone repositorinya:
git clone git@github.com:Qiskit/qiskit-addon-cutting.git
dan instal paket dengan pip. Untuk menjalankan tutorial yang ada di repositori paket, instal juga dependensi notebook. Instal dependensi dev jika kamu berencana untuk mengembangkan di repositori tersebut.
pip install tox notebook -e '.[notebook-dependencies,dev]'
Gunakan dalam Docker
Dockerfile yang disertakan dalam repositori addon bisa digunakan untuk membangun image Docker. File compose.yaml yang disertakan memungkinkan kamu menggunakan image Docker dengan perintah-perintah berikut.
Klik di sini untuk membaca cara menggunakan paket ini dalam Docker.
git clone git@github.com:Qiskit/qiskit-addon-cutting.git
cd qiskit-addon-cutting
docker compose build
docker compose up
Jika kamu menggunakan podman dan podman-compose alih-alih docker, perintahnya adalah:
podman machine start
podman-compose --podman-pull-args short-name-mode="permissive" build
podman-compose up
Setelah container berjalan, kamu akan melihat pesan seperti:
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 terakhir dalam pesan ini akan memberimu akses ke antarmuka Jupyter notebook.
Selain itu, direktori home menyertakan subdirektori bernama persistent-volume. Semua pekerjaan yang ingin kamu simpan harus ditempatkan di direktori ini, karena hanya direktori ini yang akan disimpan antar berbagai jalannya container.
Latar belakang teoritis
Dalam proses circuit cutting, ada dua jenis pemotongan: potongan gate atau "space-like", di mana pemotongan melewati gate yang beroperasi pada dua (atau lebih) qubit, dan potongan wire atau "time-like", yang memotong langsung melalui wire qubit (pada dasarnya sebuah identity gate single-qubit yang telah dipotong menjadi dua bagian).
Diagram di bawah menggambarkan contoh pemotongan gate sehingga Circuit bisa dibagi menjadi dua bagian yang lebih kecil dengan qubit yang lebih sedikit.

Ada tiga skenario yang perlu dipertimbangkan saat menyiapkan workflow circuit cutting, yang berpusat pada ketersediaan komunikasi klasik antar eksekusi Circuit. Yang pertama adalah skenario di mana hanya operasi lokal (LO) yang tersedia, sementara dua lainnya memperkenalkan komunikasi klasik antar eksekusi yang dikenal sebagai local operations and classical communication (LOCC). Skenario LOCC kemudian dikelompokkan menjadi komunikasi near-time satu arah antar eksekusi Circuit, atau komunikasi real-time dua arah (yang mungkin kamu temui dalam lingkungan multi-QPU).
Meskipun circuit cutting bisa digunakan untuk mengeksekusi Circuit kuantum yang lebih besar dari yang mungkin dilakukan pada hardware yang tersedia saat ini, teknik ini memiliki konsekuensi. Karena teknik ini bisa dirumuskan sebagai masalah quasi-probability decomposition (QPD), ada overhead sampling eksponensial yang diperlukan untuk merekonstruksi hasilnya. Overhead ini adalah faktor di mana total jumlah shot harus ditingkatkan agar quasi-probability decomposition menghasilkan jumlah error yang sama, , seperti yang akan kamu dapatkan dengan mengeksekusi Circuit asli. Setiap gate yang dipotong berkontribusi pada overhead ini, dan jumlah overhead yang ditambahkan bergantung pada jenis gate yang dipotong (detail lebih lanjut tentang sampling overhead bisa ditemukan di lampiran akhir [1]).
Misalnya, satu gate CNOT yang dipotong menimbulkan sampling overhead sebesar 9 [2,6] dan sebuah Circuit dengan pemotongan wire menimbulkan sampling overhead sebesar ketika komunikasi klasik tidak tersedia (skenario LO). Ini berkurang menjadi ketika komunikasi klasik tersedia (skenario LOCC) [4]. Namun, wire cutting dengan komunikasi klasik (LOCC) tidak didukung oleh paket ini.
Secara formal, masalah QPD dari circuit cutting bisa diekspresikan sebagai berikut:
di mana adalah channel kuantum yang mengimplementasikan operasi yang diinginkan, dan setiap adalah koefisien real yang bersesuaian dengan channel, , yang dapat dieksekusi di hardware.
Hasil yang setara dengan channel yang diinginkan diperoleh dengan pertama-tama menghasilkan koefisien, , kemudian mengeksekusi subeksperimen untuk mendapatkan hasil dari berbagai channel guna merekonstruksi nilai ekspektasi yang bersesuaian dengan .
Contoh singkat: memotong sebuah RZZGate
Sebagai contoh eksplisit dasar, pertimbangkan dekomposisi sebuah RZZGate yang dipotong (detail bisa ditemukan di [2]). Sebuah Circuit kuantum yang berisi RZZGate bisa disimulasikan dengan melakukan enam subeksperimen di mana RZZGate telah digantikan hanya dengan operasi single-qubit (ini adalah dari persamaan di atas). Hasil Circuit ini direkonstruksi dengan menggabungkan hasil setiap subeksperimen bersama dengan sekumpulan koefisien (yang dari persamaan di atas), yang bisa positif atau negatif.
Untuk parameter tertentu yang dipilih untuk RZZGate, enam subeksperimen adalah sebagai berikut:
- Dengan koefisien , tidak melakukan apa-apa ()
- Dengan koefisien , lakukan ZGate pada setiap qubit ()
- Dengan koefisien , lakukan pengukuran proyektif dalam basis pada qubit pertama dan pada qubit kedua (). Jika hasil pengukuran adalah , balik tanda kontribusi hasil tersebut selama rekonstruksi.
- Dengan koefisien