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
QuantumCircuite da separação dos subconjuntos de qubits desconectados em circuitos menores. Esses circuitos contêm objetosSingleQubitQPDGatee 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
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.

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, , 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 cortes de fio incorre em um overhead de amostragem de quando a comunicação clássica não está disponível (o cenário LO). Isso é reduzido para 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:
onde é o canal quântico que implementa a operação desejada, e cada