Aller au contenu principal

Découpe de circuits

La découpe de circuits est une technique permettant d'augmenter la taille des circuits pouvant s'exécuter sur du matériel quantique, au prix d'un surcoût d'échantillonnage supplémentaire. Cette extension implémente cette technique, dans laquelle un petit nombre de portes, de fils ou les deux sont coupés, ce qui donne des circuits plus petits mieux adaptés à l'exécution sur le matériel. Ces circuits plus petits sont ensuite exécutés, et les résultats du circuit original sont reconstruits via un post-traitement classique. Cependant, le compromis est que le nombre total de shots doit augmenter d'un facteur dépendant du nombre et du type de coupes effectuées (appelé surcoût d'échantillonnage). La découpe de circuits peut également être utilisée pour créer des portes entre des qubits distants qui nécessiteraient sinon un important surcoût de SWAP.

Termes importants

  • Sous-circuits : L'ensemble des circuits résultant de la découpe de portes dans un QuantumCircuit, puis de la séparation des sous-ensembles de qubits déconnectés en circuits plus petits. Ces circuits contiennent des objets SingleQubitQPDGate et sont utilisés pour instancier chaque sous-expérience.

  • Sous-expérience : Terme utilisé pour décrire les échantillons de circuits uniques associés à un sous-circuit, qui sont envoyés à un QPU pour exécution.

Installer le paquet de découpe de circuits

Il existe trois façons d'installer le paquet de découpe de circuits : PyPI, la compilation depuis les sources et l'exécution dans un environnement conteneurisé. Il est recommandé d'installer ces paquets dans un environnement virtuel pour assurer la séparation entre les dépendances.

Installer depuis PyPI

La façon la plus simple d'installer le paquet qiskit-addon-cutting est via PyPI :

pip install qiskit-addon-cutting

Installer depuis les sources

Clique ici pour savoir comment installer ce paquet manuellement.

Pour contribuer à ce paquet ou l'installer manuellement, commence par cloner le dépôt :

git clone git@github.com:Qiskit/qiskit-addon-cutting.git

puis installe le paquet avec pip. Pour exécuter les tutoriels du dépôt, installe également les dépendances notebook. Installe les dépendances dev si tu prévois de contribuer au dépôt.

pip install tox notebook -e '.[notebook-dependencies,dev]'

Utiliser avec Docker

Le dockerfile inclus dans le dépôt de l'extension peut être utilisé pour construire une image Docker. Le fichier compose.yaml inclus te permet d'utiliser l'image Docker avec les commandes suivantes.

Clique ici pour savoir comment utiliser ce paquet avec Docker.

git clone git@github.com:Qiskit/qiskit-addon-cutting.git
cd qiskit-addon-cutting
docker compose build
docker compose up
Remarque

Si tu utilises podman et podman-compose au lieu de docker, les commandes sont :

podman machine start
podman-compose --podman-pull-args short-name-mode="permissive" build
podman-compose up

Une fois le conteneur lancé, tu devrais voir un message similaire à :

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

La dernière URL de ce message te donnera accès à l'interface Jupyter notebook.

De plus, le répertoire personnel inclut un sous-répertoire nommé persistent-volume. Tout travail que tu souhaites sauvegarder doit être placé dans ce répertoire, car c'est le seul qui sera conservé entre les différentes exécutions du conteneur.

Contexte théorique

Dans le processus de découpe de circuits, il existe deux types de coupes : une coupe de porte ou « spatiale », où la coupe passe par une porte opérant sur deux qubits (ou plus), et une coupe de fil ou « temporelle », qui passe directement par un fil de qubit (essentiellement une porte identité à un qubit découpée en deux parties).

Le diagramme ci-dessous illustre un exemple de découpe de portes permettant de diviser un circuit en deux parties plus petites avec moins de qubits.

Diagramme de découpe de portes en prenant un circuit plus grand et en le découpant en deux circuits plus petits étiquetés « A » et « B »

Il y a trois scénarios à considérer lors de la préparation d'un flux de travail de découpe de circuits, qui tournent autour de la disponibilité de la communication classique entre les exécutions de circuits. Le premier est celui où seules les opérations locales (LO) sont disponibles, tandis que les deux autres introduisent une communication classique entre les exécutions, connue sous le nom d'opérations locales et communication classique (LOCC). Les scénarios LOCC sont ensuite regroupés en communication quasi-temps-réel, unidirectionnelle entre les exécutions de circuits, ou en communication en temps réel, bidirectionnelle (que tu pourrais rencontrer dans un environnement multi-QPU).

Bien que la découpe de circuits puisse être utilisée pour exécuter des circuits quantiques plus grands que ce qui est possible sur le matériel actuel, cela a un coût. Parce que la technique peut être formulée comme un problème de décomposition quasi-probabiliste (QPD), un surcoût d'échantillonnage exponentiel est requis pour reconstruire les résultats. Ce surcoût est le facteur par lequel le nombre total de shots doit augmenter pour que la décomposition quasi-probabiliste aboutisse au même niveau d'erreur, ϵ\epsilon, que celui qu'on obtiendrait en exécutant le circuit original. Chaque porte coupée contribue à ce surcoût, et la quantité de surcoût ajoutée dépend du type de porte découpée (plus de détails sur le surcoût d'échantillonnage se trouvent dans le dernier appendice de [1]).

Par exemple, une seule porte CNOT coupée entraîne un surcoût d'échantillonnage de 9 [2,6] et un circuit avec nn coupes de fils entraîne un surcoût d'échantillonnage de O(16n)\mathcal{O}(16^n) lorsque la communication classique n'est pas disponible (le scénario LO). Ce surcoût est réduit à O(4n)\mathcal{O}(4^n) lorsque la communication classique devient disponible (scénario LOCC) [4]. Cependant, la découpe de fils avec communication classique (LOCC) n'est pas prise en charge par ce paquet.

Formellement, le problème QPD de la découpe de circuits peut s'exprimer comme suit :

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

U\mathcal{U} est le canal quantique implémentant l'opération souhaitée, et chaque aia_i est un coefficient réel correspondant à un canal, Fi\mathcal{F}_i, exécutable sur le matériel.

Les résultats équivalents au canal souhaité U\mathcal{U} sont obtenus en générant d'abord les coefficients aia_i, puis en exécutant des sous-expériences pour obtenir les résultats des différents canaux Fi\mathcal{F}_i afin de reconstruire les valeurs d'espérance correspondant à U\mathcal{U}.

Un exemple rapide : découpe d'un RZZGate

Comme exemple explicite de base, considère la décomposition d'un RZZGate coupé (les détails se trouvent dans [2]). Un circuit quantique contenant un RZZGate peut être simulé en effectuant six sous-expériences où le RZZGate a été remplacé par des opérations à un seul qubit (ce sont les Fi\mathcal{F}_i de l'équation ci-dessus). Les résultats de ce circuit sont reconstruits en combinant les résultats de chaque sous-expérience avec un ensemble de coefficients (les aia_i de l'équation ci-dessus), qui peuvent être positifs ou négatifs.

Pour un paramètre θ\theta choisi pour le RZZGate, les six sous-expériences sont les suivantes :

  1. Avec le coefficient a1=cos2(θ/2)a_1 = \cos^2(\theta/2), ne rien faire (III\otimes I)
  2. Avec le coefficient a2=sin2(θ/2)a_2 = \sin^2(\theta/2), appliquer un ZGate sur chaque qubit (ZZZ\otimes Z)
  3. Avec le coefficient a3=sin(θ)/2a_3 = -\sin(\theta)/2, effectuer une mesure projective dans la base ZZ sur le premier qubit et un SS sur le second (MzSM_z\otimes S). Si le résultat de la mesure est 11, inverser le signe de la contribution de ce résultat lors de la reconstruction.
  4. Avec le coefficient a4=sin(θ)/2a_4 = \sin(\theta)/2, effectuer une mesure projective dans la base ZZ sur le premier qubit et un SS^\dagger sur le second (MzSM_z\otimes S^\dagger). Si le résultat de la mesure est 1, inverser le signe de la contribution de ce résultat lors de la reconstruction.
  5. Identique à 3. (a5=a3a_5=a_3), mais en échangeant les qubits (effectuer SMzS\otimes M_z à la place).
  6. Identique à 4. (a6=a4a_6=a_4), mais en échangeant les qubits (effectuer SMzS^\dagger\otimes M_z à la place).

Tableau de référence du surcoût d'échantillonnage

Le tableau suivant indique le facteur de surcoût d'échantillonnage pour diverses instructions à deux qubits, à condition qu'une seule instruction soit découpée.

InstructionsAngles de décomposition KAKFacteur de surcoût d'échantillonnage
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 (indépendant de β\beta)
Move (fil coupé dans le scénario LO)N/A42=164^2 = 16

Prochaines étapes

Références

[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