Pular para o conteúdo principal

Corte de circuitos

O corte de circuitos é uma técnica para aumentar o tamanho dos circuitos que podem ser executados em hardware quântico, ao custo de um overhead adicional de amostragem. Este addon implementa essa técnica, na qual alguns gates, fios ou ambos são cortados, resultando em circuitos menores que são mais adequados para execução em hardware. Esses circuitos menores são então executados, e os resultados do circuito original são reconstruídos por meio de pós-processamento clássico. No entanto, a contrapartida é que o número total de shots deve aumentar por um fator que depende do número e do tipo de cortes realizados (conhecido como overhead de amostragem). O corte de circuitos também pode ser usado para criar gates entre qubits distantes que, de outra forma, exigiriam um grande overhead de SWAP.

Termos importantes

  • Subcircuitos: O conjunto de circuitos resultante do corte de gates em um QuantumCircuit e da separação dos subconjuntos de qubits desconectados em circuitos menores. Esses circuitos contêm objetos SingleQubitQPDGate e são usados para instanciar cada subexperimento.

  • Subexperimento: Termo usado para descrever as amostras de circuito únicas associadas a um subcircuito, que são enviadas a uma QPU para execução.

Instalar o pacote de corte de circuitos

Há três maneiras de instalar o pacote de corte de circuitos: PyPI, compilando a partir do código-fonte e executando em um ambiente conteinerizado. Recomenda-se instalar esses pacotes em um ambiente virtual para garantir a separação entre as dependências dos pacotes.

Instalar a partir do PyPI

A maneira mais simples de instalar o pacote qiskit-addon-cutting é pelo PyPI:

pip install qiskit-addon-cutting

Instalar a partir do código-fonte

Clique aqui para ler como instalar este pacote manualmente.

Para contribuir com este pacote ou instalá-lo manualmente, primeiro clone o repositório:

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

e instale o pacote com pip. Para executar os tutoriais encontrados no repositório do pacote, instale também as dependências de notebook. Instale as dependências dev se você planeja desenvolver no repositório.

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

Usar dentro do Docker

O dockerfile incluído no repositório do addon pode ser usado para construir uma imagem Docker. O arquivo compose.yaml incluído permite que você use a imagem Docker com os seguintes comandos.

Clique aqui para ler como usar este pacote dentro do Docker.

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

Se você estiver usando podman e podman-compose em vez de docker, os comandos são:

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

Assim que o contêiner estiver em execução, você verá uma mensagem semelhante 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

A última URL nesta mensagem dará acesso à interface do Jupyter notebook.

Além disso, o diretório home inclui um subdiretório chamado persistent-volume. Todo trabalho que você deseja salvar deve ser colocado nesse diretório, pois é o único que será salvo entre diferentes execuções do contêiner.

Fundamentos teóricos

No processo de corte de circuitos, há dois tipos de cortes: um corte de gate ou "no espaço" (space-like), onde o corte passa por um gate que opera em dois (ou mais) qubits, e um corte de fio ou "no tempo" (time-like), que corta diretamente por um fio de qubit (essencialmente um gate de identidade de qubit único que foi dividido em duas partes).

O diagrama abaixo mostra um exemplo de corte de gates para que o circuito possa ser dividido em duas partes menores com menos qubits.

Diagrama de corte de gate pegando um circuito maior e cortando-o em dois menores rotulados "A" e "B"

Há três cenários a considerar ao preparar um fluxo de trabalho de corte de circuitos, que giram em torno da disponibilidade de comunicação clássica entre as execuções dos circuitos. O primeiro é onde apenas operações locais (LO) estão disponíveis, enquanto os outros dois introduzem comunicação clássica entre execuções, conhecida como operações locais e comunicação clássica (LOCC). Os cenários LOCC são então agrupados em comunicação unidirecional de tempo próximo entre execuções de circuito, ou comunicação bidirecional em tempo real (que você pode ver em um ambiente multi-QPU).

Embora o corte de circuitos possa ser usado para executar circuitos quânticos maiores do que o possível no hardware atualmente disponível, ele tem um custo. Como a técnica pode ser enquadrada como um problema de decomposição quase-probabilística (QPD), há um overhead de amostragem exponencial necessário para reconstruir os resultados. Esse overhead é o fator pelo qual o número total de shots deve aumentar para que a decomposição quase-probabilística resulte na mesma quantidade de erro, ϵ\epsilon, que você obteria executando o circuito original. Cada gate cortado contribui para esse overhead, e a quantidade de overhead adicionada depende do tipo de gate que foi cortado (mais detalhes sobre o overhead de amostragem podem ser encontrados no apêndice final de [1]).

Por exemplo, um único CNOT gate cortado incorre em um overhead de amostragem de 9 [2,6] e um circuito com nn cortes de fio incorre em um overhead de amostragem de O(16n)\mathcal{O}(16^n) quando a comunicação clássica não está disponível (o cenário LO). Isso é reduzido para O(4n)\mathcal{O}(4^n) quando a comunicação clássica se torna disponível (cenário LOCC) [4]. No entanto, o corte de fio com comunicação clássica (LOCC) não é suportado por este pacote.

Formalmente, o problema QPD de corte de circuitos pode ser expresso da seguinte forma:

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

onde U\mathcal{U} é o canal quântico que implementa a operação desejada, e cada aia_i é um coeficiente real correspondente a um canal, Fi\mathcal{F}_i, que é executável em hardware.

Os resultados equivalentes ao canal desejado U\mathcal{U} são obtidos primeiro gerando os coeficientes, aia_i, depois executando subexperimentos para obter os resultados dos diferentes canais Fi\mathcal{F}_i a fim de reconstruir os valores esperados correspondentes a U\mathcal{U}.

Um exemplo simples: corte de um RZZGate

Como um exemplo explícito básico, considere a decomposição de um RZZGate cortado (detalhes podem ser encontrados em [2]). Um circuito quântico que contém um RZZGate pode ser simulado realizando seis subexperimentos onde o RZZGate foi substituído apenas por operações de qubit único (esses são os Fi\mathcal{F}_i da equação acima). Os resultados deste circuito são reconstruídos combinando os resultados de cada subexperimento com um conjunto de coeficientes (os aia_i da equação acima), que podem ser positivos ou negativos.

Para um parâmetro θ\theta escolhido para o RZZGate, os seis subexperimentos são os seguintes:

  1. Com coeficiente a1=cos2(θ/2)a_1 = \cos^2(\theta/2), não fazer nada (III\otimes I)
  2. Com coeficiente a2=sin2(θ/2)a_2 = \sin^2(\theta/2), executar um ZGate em cada qubit (ZZZ\otimes Z)
  3. Com coeficiente a3=sin(θ)/2a_3 = -\sin(\theta)/2, realizar uma medição projetiva na base ZZ no primeiro qubit e um SS no segundo (MzSM_z\otimes S). Se o resultado da medição for 11, inverter o sinal da contribuição desse resultado durante a reconstrução.
  4. Com coeficiente a4=sin(θ)/2a_4 = \sin(\theta)/2, realizar uma medição projetiva na base ZZ no primeiro qubit e um SS^\dagger no segundo (MzSM_z\otimes S^\dagger). Se o resultado da medição for 1, inverter o sinal da contribuição desse resultado durante a reconstrução.
  5. Igual ao 3. (a5=a3a_5=a_3), mas trocando os qubits (realizar SMzS\otimes M_z em vez disso).
  6. Igual ao 4. (a6=a4a_6=a_4), mas trocando os qubits (realizar SMzS^\dagger\otimes M_z em vez disso).

Tabela de referência do overhead de amostragem

A tabela a seguir fornece o fator de overhead de amostragem para uma variedade de instruções de dois qubits, desde que apenas uma única instrução seja cortada.

InstruçõesÂngulos de decomposição KAKFator de overhead de amostragem
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 (independente de β\beta)
Move (corte de fio no cenário LO)N/A42=164^2 = 16

Próximos passos

Referências

[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