Saltar al contenido principal

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 QuantumCircuit y luego separar los subconjuntos de qubits desconectados en circuitos más pequeños. Estos circuitos contienen objetos SingleQubitQPDGate y 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
Nota

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.

Diagrama del corte de gate tomando un circuito más grande y cortándolo en dos más pequeños etiquetados como "A" y "B"

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, ϵ\epsilon, 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 nn cortes de cable incurre en una sobrecarga de muestreo de O(16n)\mathcal{O}(16^n) cuando no hay comunicación clásica disponible (el escenario LO). Esto se reduce a O(4n)\mathcal{O}(4^n) 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:

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

donde U\mathcal{U} es el canal cuántico que implementa la operación deseada, y cada aia_i es un coeficiente real correspondiente a un canal, Fi\mathcal{F}_i, que es ejecutable en hardware.

Los resultados equivalentes al canal deseado U\mathcal{U} se obtienen generando primero los coeficientes aia_i, luego ejecutando subexperimentos para obtener los resultados de los distintos canales Fi\mathcal{F}_i con el fin de reconstruir los valores de expectación correspondientes a U\mathcal{U}.

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 Fi\mathcal{F}_i 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 aia_i de la ecuación anterior), que pueden ser positivos o negativos.

Para un parámetro θ\theta elegido para el RZZGate, los seis subexperimentos son los siguientes:

  1. Con coeficiente a1=cos2(θ/2)a_1 = \cos^2(\theta/2), no hacer nada (III\otimes I)
  2. Con coeficiente a2=sin2(θ/2)a_2 = \sin^2(\theta/2), aplicar un ZGate a cada qubit (ZZZ\otimes Z)
  3. Con coeficiente a3=sin(θ)/2a_3 = -\sin(\theta)/2, realizar una medición proyectiva en la base ZZ sobre el primer qubit y una SS sobre el segundo (MzSM_z\otimes S). Si el resultado de la medición es 11, invertir el signo de la contribución de ese resultado durante la reconstrucción.
  4. Con coeficiente a4=sin(θ)/2a_4 = \sin(\theta)/2, realizar una medición proyectiva en la base ZZ sobre el primer qubit y una SS^\dagger sobre el segundo (MzSM_z\otimes S^\dagger). Si el resultado de la medición es 1, invertir el signo de la contribución de ese resultado durante la reconstrucción.
  5. Igual que el 3. (a5=a3a_5=a_3), pero intercambiar los qubits (realizar SMzS\otimes M_z en su lugar).
  6. Igual que el 4. (a6=a4a_6=a_4), pero intercambiar los qubits (realizar SMzS^\dagger\otimes M_z 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 KAKFactor de sobrecarga de muestreo
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 (independiente de β\beta)
Move (corte de cable en el escenario LO)N/A42=164^2 = 16

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