Corte de circuitos
El corte de circuitos es una técnica para aumentar el tamaño de los circuitos que pueden ejecutarse en hardware cuántico, a costa de una sobrecarga de muestreo adicional. Este complemento implementa esta técnica, en la cual se cortan unos pocos gates, cables o ambos, lo que da lugar a circuitos más pequeños que se adaptan mejor a la ejecución en hardware. Estos circuitos más pequeños se ejecutan y los resultados del circuito original se reconstruyen mediante post-procesamiento clásico. Sin embargo, la contrapartida es que el número total de shots debe aumentar por un factor que depende del número y el tipo de cortes realizados (conocido como la sobrecarga de muestreo). El corte de circuitos también puede usarse para construir gates entre qubits distantes que de otro modo requerirían una gran sobrecarga de SWAP.
Términos importantes
-
Subcircuitos: El conjunto de circuitos resultante de cortar gates en un
QuantumCircuity luego separar los subconjuntos de qubits desconectados en circuitos más pequeños. Estos circuitos contienen objetosSingleQubitQPDGatey se usan para instanciar cada subexperimento. -
Subexperimento: Término usado para describir las muestras de circuito únicas asociadas a un subcircuito, que se envían a una QPU para su ejecución.
Instalar el paquete de corte de circuitos
Hay tres maneras de instalar el paquete de corte de circuitos: PyPI, compilando desde el código fuente y ejecutándolo dentro de un entorno en contenedor. Se recomienda instalar estos paquetes en un entorno virtual para garantizar la separación entre las dependencias de los paquetes.
Instalar desde PyPI
La forma más sencilla de instalar el paquete qiskit-addon-cutting es con PyPI:
pip install qiskit-addon-cutting
Instalar desde el código fuente
Haz clic aquí para leer cómo instalar este paquete manualmente.
Para contribuir a este paquete o instalarlo manualmente, primero clona el repositorio:
git clone git@github.com:Qiskit/qiskit-addon-cutting.git
e instala el paquete con pip. Para ejecutar los tutoriales incluidos en el repositorio del paquete, instala también las dependencias del notebook. Instala las dependencias dev si planeas desarrollar en el repositorio.
pip install tox notebook -e '.[notebook-dependencies,dev]'
Usar dentro de Docker
El dockerfile incluido en el repositorio del complemento puede usarse para construir una imagen Docker. El archivo compose.yaml incluido te permite usar la imagen Docker con los siguientes comandos.
Haz clic aquí para leer cómo usar este paquete dentro de Docker.
git clone git@github.com:Qiskit/qiskit-addon-cutting.git
cd qiskit-addon-cutting
docker compose build
docker compose up
Si estás usando podman y podman-compose en lugar de docker, los comandos son:
podman machine start
podman-compose --podman-pull-args short-name-mode="permissive" build
podman-compose up
Una vez que el contenedor esté en ejecución, deberías ver un mensaje similar a:
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 última URL de este mensaje te dará acceso a la interfaz de Jupyter notebook.
Además, el directorio de inicio incluye un subdirectorio llamado persistent-volume. Todo el trabajo que quieras guardar debe colocarse en este directorio, ya que es el único que se conservará entre distintas ejecuciones del contenedor.
Marco teórico
En el proceso de corte de circuitos, existen dos tipos de cortes: un corte de gate o "espacial", donde el corte atraviesa un gate que opera sobre dos (o más) qubits, y un corte de cable o "temporal", que corta directamente a través de un cable de qubit (esencialmente un gate de identidad de un solo qubit que ha sido cortado en dos partes).
El diagrama a continuación muestra un ejemplo de corte de gates para dividir el circuito en dos partes más pequeñas con menos qubits.

Hay tres escenarios a considerar al preparar un flujo de trabajo de corte de circuitos, que giran en torno a la disponibilidad de comunicación clásica entre las ejecuciones de los circuitos. El primero es aquel en que solo están disponibles las operaciones locales (LO), mientras que los otros dos introducen comunicación clásica entre ejecuciones, conocida como operaciones locales y comunicación clásica (LOCC). Los escenarios LOCC se agrupan en comunicación de casi-tiempo unidireccional entre ejecuciones de circuitos, o comunicación en tiempo real bidireccional (que podrías ver en un entorno multi-QPU).
Si bien el corte de circuitos puede usarse para ejecutar circuitos cuánticos más grandes de lo que es posible en el hardware actualmente disponible, conlleva un costo. Dado que la técnica puede formularse como un problema de descomposición cuasi-probabilística (QPD), se requiere una sobrecarga de muestreo exponencial para reconstruir los resultados. Esta sobrecarga es el factor por el cual debe aumentar el número total de shots para que la descomposición cuasi-probabilística resulte en la misma cantidad de error, , que obtendrías al ejecutar el circuito original. Cada gate cortado contribuye a esta sobrecarga, y la cantidad de sobrecarga añadida depende del tipo de gate cortado (más detalles sobre la sobrecarga de muestreo se pueden encontrar en el apéndice final de [1]).
Por ejemplo, un gate CNOT cortado incurre en una sobrecarga de muestreo de 9 [2,6] y un circuito con cortes de cable incurre en una sobrecarga de muestreo de cuando no hay comunicación clásica disponible (el escenario LO). Esto se reduce a cuando la comunicación clásica está disponible (escenario LOCC) [4]. Sin embargo, el corte de cables con comunicación clásica (LOCC) no está soportado por este paquete.
Formalmente, el problema QPD del corte de circuitos puede expresarse de la siguiente manera:
donde es el canal cuántico que implementa la operación deseada, y cada es un coeficiente real correspondiente a un canal, , que es ejecutable en hardware.
Los resultados equivalentes al canal deseado se obtienen generando primero los coeficientes , luego ejecutando subexperimentos para obtener los resultados de los distintos canales con el fin de reconstruir los valores de expectación correspondientes a .
Un ejemplo breve: corte de un RZZGate
Como ejemplo explícito básico, considera la descomposición de un RZZGate cortado (los detalles se pueden encontrar en [2]). Un circuito cuántico que contiene un RZZGate puede simularse realizando seis subexperimentos en los que el RZZGate ha sido reemplazado únicamente por operaciones de un solo qubit (estas son las de la ecuación anterior). Los resultados de este circuito se reconstruyen combinando los resultados de cada subexperimento junto con un conjunto de coeficientes (los de la ecuación anterior), que pueden ser positivos o negativos.
Para un parámetro elegido para el RZZGate, los seis subexperimentos son los siguientes:
- Con coeficiente , no hacer nada ()
- Con coeficiente , aplicar un ZGate a cada qubit ()
- Con coeficiente , realizar una medición proyectiva en la base sobre el primer qubit y una sobre el segundo (). Si el resultado de la medición es , invertir el signo de la contribución de ese resultado durante la reconstrucción.
- Con coeficiente , realizar una medición proyectiva en la base sobre el primer qubit y una sobre el segundo (). Si el resultado de la medición es 1, invertir el signo de la contribución de ese resultado durante la reconstrucción.
- Igual que el 3. (), pero intercambiar los qubits (realizar en su lugar).
- Igual que el 4. (), pero intercambiar los qubits (realizar en su lugar).
Tabla de referencia de sobrecarga de muestreo
La siguiente tabla proporciona el factor de sobrecarga de muestreo para una variedad de instrucciones de dos qubits, suponiendo que solo se corta una única instrucción.
| Instrucciones | Ángulos de descomposición KAK | Factor de sobrecarga de muestreo |
|---|---|---|
| CSGate, CSdgGate, CSXGate | ||
| CXGate, CYGate, CZGate, GHGate, ECRGate | ||
| iSwapGate, DCXGate | ||
| SwapGate | ||
| RXXGate, RYYGate, RZZGate, RZXGate | ||
| CRXGate, CRYGate, CRZGate, CPhaseGate | ||
| XXPlusYYGate, XXMinusYYGate | (independiente de ) | |
| Move (corte de cable en el escenario LO) | N/A |
Próximos pasos
Referencias
[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