Aller au contenu principal
Ce projet est en phase bêta. Tu as trouvé un bug ? Ouvrir un ticket GitHub. Une question ou une idée ? Pose ta question dans Discussions — tes retours sont les bienvenus !
Quelle est la qualité de la traduction sur cette page ?

Qiskit Paulice

qiskit-paulice est un package permettant d'intégrer des contrôles de Pauli efficaces sur le matériel dans des circuits Clifford arbitraires, avec des connectivités de qubits arbitraires, à l'aide de codes stabilisateurs spatio-temporels. Ces contrôles peuvent servir à détecter des erreurs logiques pendant l'exécution d'un circuit. Post-sélectionner uniquement les échantillons sans erreur détectée peut améliorer la fidélité des états échantillonnés avec un processeur quantique, au prix de quelques qubits ancillaires et d'une augmentation du surcoût d'échantillonnage. Cette méthode convient particulièrement au matériel à court terme, car son surcoût en qubits et en portes est bien plus modéré que celui du calcul quantique tolérant aux pannes, tout en offrant un meilleur surcoût d'échantillonnage que les méthodes de mitigation d'erreurs telles que ZNE ou PEC [1].

Bien que les contrôles de Pauli spatio-temporels puissent servir à implémenter des routines autonomes de détection d'erreurs, ils sont aussi pertinents dans le contexte de la mitigation et de la correction d'erreurs. La détection d'erreurs peut compléter des techniques de mitigation d'erreurs telles que l'annulation probabiliste d'erreurs (PEC) en capturant une partie du bruit affectant les portes et les mesures, ce qui réduit l'impact du canal de bruit à inverser et donc le surcoût d'échantillonnage. Ils peuvent aussi être vus comme une première étape vers une tolérance aux pannes pratique, puisque l'implémentation de codes stabilisateurs pour protéger les qubits de données contre les erreurs logiques est un concept central de la correction d'erreurs traditionnelle. Comme cette méthode donne un accès shot par shot à l'état quantique, elle peut être utilisée dans les workflows basés sur l'échantillonnage comme dans ceux basés sur les valeurs moyennes.

Pour commencer​

Un guide simple pour t'aider à démarrer rapidement avec ce package est disponible dans le guide de démarrage rapide.

Exemples de cas d'usage​

Cette technique a été utilisée pour améliorer la fidélité d'échantillons issus de circuits à dominante Clifford, en utilisant 97 qubits physiques pour encoder 2415 portes d'intrication logiques sur 70 qubits logiques [2].

Discussion technique​

Trouver de bons ensembles de contrôles de Pauli spatio-temporels​

Quantum circuit cartoon

Un ensemble de contrôles de Pauli spatio-temporels est « bon » si chaque contrôle est valide, de faible poids et efficace.

Un contrôle est composé d'un certain nombre de rotations de Pauli contrôlées, PP, placées sur certains fils du circuit, ww : {(P1,w1),...,(Pk,wk)}\{(P_1,w_1), ..., (P_k,w_k)\}. Pour un contrôle donné, les contrôles se trouvent sur un seul qubit ancillaire, et les rotations ont lieu sur les fils d'un seul qubit cible. Pour les circuits Clifford, un contrôle est valide si son produit rétropropagé est un stabilisateur de l'état préparé par le circuit idéal : ∏iB(Pi,wi)∈S\prod_{i}B(P_i,w_i) \in S, où B(P,w)B(P,w) est le rétropropagateur de PP depuis ww jusqu'au début du circuit, et SS est l'ensemble de tous les stabilisateurs du circuit.

Un contrôle est de faible poids s'il nécessite peu de portes d'intrication pour être implémenté. L'algorithme de sélection des contrôles favorisera les contrôles de faible poids qui offrent la détection d'erreurs la plus efficace.

Un contrôle est efficace s'il capture beaucoup plus d'erreurs qu'il n'en introduit. Un contrôle de Pauli est composé d'un certain nombre de portes d'intrication et introduit donc un bruit de porte supplémentaire dans le calcul. Il est important de s'assurer que chaque contrôle supplémentaire apporte une capacité de détection d'erreurs supplémentaire. L'efficacité d'un ensemble de contrôles peut être approchée en composant les erreurs de Pauli mises en évidence par les contrôles en un canal de bruit post-sélectionné et en calculant son impact. Minimiser le surcoût d'échantillonnage pour implémenter le canal de bruit inverse non détecté est une bonne heuristique pour sélectionner de bons contrôles, car elle indique quelle part de l'erreur les contrôles ne peuvent pas détecter. Une approche plus lente mais plus réaliste consiste à effectuer un échantillonnage Monte Carlo à partir de l'état bruité et à calculer empiriquement le taux d'erreur logique de la distribution post-sélectionnée. Ces deux approches sont disponibles en tant que fonctions de coût intégrées dans la fonction qiskit_paulice.add_pauli_checks.

Post-sélection des échantillons à partir des données de syndrome​

Dans ce package, un contrôle est implémenté à l'aide de portes d'intrication entre un qubit ancillaire et un qubit cible. Chaque ancilla démarre dans ∣0⟩|0\rangle, de sorte que ZancZ_\text{anc} stabilise son état d'entrée. Propager ZancZ_\text{anc} vers l'avant depuis le début de l'ancilla à travers tout le circuit contrôlé donne un opérateur de Pauli en sortie, qui peut être de poids plus élevé et s'étendre dans le circuit de charge utile. Les indices de qubits sur lesquels cet opérateur de sortie a des termes non identité constituent le support du contrôle, et le contrôle est réussi si les bits, bb, du support du contrôle ont une parité paire : ⨁i=1bi=0\bigoplus_{i=1} b_i = 0. Un échantillon est conservé si chaque contrôle produit 00 pour son test de parité.

Fonctionnalités logicielles​

  • Création automatique du modèle de bruit à partir des données de benchmark du backend

  • Recherche de contrôles accélérée par Rust

  • 3 algorithmes intégrés pour la recherche de contrôles

  • Prise en charge du dopage par portes RZ

  • Prise en charge de la combinaison de la détection d'erreurs avec la mitigation d'erreurs

Problèmes connus​

  • Le bruit d'inactivité n'est pas fourni via NoiseModel.get_backend et est ignoré pendant la sélection des contrôles

  • Bien que de nombreuses étapes stochastiques de l'algorithme soient contrôlables par une graine aléatoire, certaines fonctionnalités présentent un caractère aléatoire que la graine ne contrôle pas. Plus précisément, les valeurs d'arguments suivantes pour add_pauli_checks entraîneront une sélection des contrôles non déterministe : cost="LER", method="genetic" et method="windowed_genetic". Pour un comportement déterministe, utilise add_pauli_checks(..., cost="gamma", method="windowed"), qui sont les valeurs par défaut.

Travaux futurs​

  • Gestion du bruit d'inactivité lors de la sélection des contrôles

  • Caractère aléatoire contrôlable pour la fonction de coût du taux d'erreur logique et les algorithmes de recherche génétique

Contribuer​

Le code source est disponible sur GitHub.

Le guide du développeur se trouve dans CONTRIBUTING.md à la racine du dépôt de ce projet. En participant, tu t'engages à respecter le code de conduite de Qiskit.

Citer ce package​

Si tu utilises ce package dans tes recherches, utilise le fichier CITATION.bib du dépôt de ce projet pour citer la ou les références appropriées.

Licence​

Apache License 2.0

Politique de dépréciation​

Nous suivons le versionnage sémantique. Il nous arrive occasionnellement d'introduire des changements incompatibles afin d'améliorer l'expérience utilisateur. Lorsque c'est possible, nous conserverons les anciennes interfaces et les marquerons comme dépréciées, tant qu'elles peuvent coexister avec les nouvelles. Chaque amélioration substantielle, changement incompatible ou dépréciation sera documenté dans les notes de version.

Références​

  1. Simon Martiel, Ali Javadi-Abhari, Low-overhead error detection with spacetime codes, arXiv:2504.15725 [quant-ph].

  2. Simon Martiel, et al., Sampling hard circuits with verifiably high fidelity, arXiv:2607.25941 [quant-ph].