Pular para o conteúdo principal

Introdução à transpilação

Uma visão geral da transpilação e as ferramentas relevantes a utilizar, seja localmente ou na nuvem.

A transpilação é o processo de reescrever um circuito de entrada para corresponder à topologia de um dispositivo quântico específico e otimizar as instruções do circuito para execução em computadores quânticos com ruído. Esta documentação abrange as ferramentas e fluxos de trabalho para transpilação local disponíveis a todos os usuários do Qiskit, bem como para o Qiskit Transpiler Service baseado na nuvem, disponível para usuários dos planos Premium, Flex e On-Prem (via IBM Quantum Platform API). Se você estiver usando primitivas e tiver interesse apenas nas opções de transpilação padrão fornecidas pelo serviço Qiskit Runtime, leia o tópico Configurar compilação em tempo de execução para o Qiskit Runtime.

O processo de transpilação recebe um circuito que contém suas instruções:

Um circuito quântico de dois qubits contendo uma porta Hadamard e duas portas CNOT.

A transpilação então o transforma de modo que apenas as instruções disponíveis em um backend escolhido sejam usadas, e otimiza essas instruções para minimizar os efeitos do ruído:

O mesmo circuito quântico de dois qubits após a transpilação. Ele contém portas RZ, X, SX e ECR.


Um componente central do Qiskit SDK, o transpiler é projetado para ser modular e extensível. Seu principal uso é escrever novas transformações de circuito (conhecidas como passes do transpiler) e combiná-las com outros passes existentes, reduzindo bastante a profundidade e a complexidade dos circuitos quânticos. Quais passes são encadeados e em que ordem têm um efeito importante no resultado final. Esse pipeline é determinado pelos objetos PassManager e StagedPassManager. O StagedPassManager coordena a execução de um ou mais PassManagers e determina a ordem em que são executados, enquanto o objeto PassManager é simplesmente uma coleção de um ou mais passes. Pense no StagedPassManager como o regente de uma orquestra, nos PassManagers como as diferentes seções de instrumentos e nos objetos Pass como os músicos individuais. Dessa forma, você pode compor circuitos quânticos eficientes em hardware que permitem executar trabalhos em escala utilitária mantendo o ruído gerenciável.

Encontre mais informações sobre os estágios do pass manager no tópico Estágios do Transpiler.

Arquitetura de conjunto de instruções

Além de reduzir a profundidade e a complexidade dos circuitos quânticos, o transpiler é projetado para transformar as instruções contidas em um dado QuantumCircuit de modo a obedecer à Arquitetura de Conjunto de Instruções (ISA) de um backend específico. Circuitos que obedecem à ISA consistem apenas em instruções suportadas pelo Target do backend, como as portas base disponíveis no hardware, medições, resets e operações de controle de fluxo, e respeitam as restrições especificadas pela conectividade do hardware, ou seja, o CouplingMap do target. Ao enviar um job para um backend IBM Quantum®, os circuitos devem aderir à ISA do backend.

Estágios do Transpiler

O pipeline de transpilação pré-construído do Qiskit consiste em seis estágios fundamentais:

  1. init - Este pass executa quaisquer passes iniciais necessários antes que o circuito possa ser incorporado. Isso geralmente envolve o desenrolamento de instruções personalizadas e a conversão do circuito para portas de um e dois qubits. Por padrão, valida as instruções do circuito e traduz portas multi-qubit em portas de um e dois qubits.
  2. layout - Este pass aplica um layout, mapeando os qubits virtuais do seu circuito para os qubits físicos da QPU.
  3. routing - Este pass é executado após a aplicação de um layout e injeta portas (ou seja, SWAPs) no circuito original para torná-lo compatível com a conectividade da QPU (mapa de acoplamento).
  4. translation - Este pass traduz as portas do circuito para o conjunto base de instruções da QPU.
  5. optimization - Este pass executa um laço de otimização para encontrar decomposições mais eficientes do circuito quântico até que uma condição seja atendida (como uma profundidade fixa).
  6. scheduling - Este estágio é destinado a qualquer pass de agendamento ciente do hardware. Se o usuário especificar um método de agendamento, este estágio contabiliza todo o tempo ocioso no circuito.

Se você personalizar um fluxo de transpilação, use esses estágios como referência durante o desenvolvimento.

Transpilar com pass managers

A forma recomendada de transpilar um circuito é criar um staged pass manager e executar seu método run com seu circuito como entrada. Você pode usar a função generate_preset_pass_manager para gerar um staged pass manager com padrões razoáveis.

Usuários mais avançados podem personalizar um conjunto de objetos PassManager e StagedPassManager e determinar a ordem em que cada estágio é executado. Isso pode mudar drasticamente o circuito de saída final. Na verdade, uma abordagem personalizada para transpilar um algoritmo quântico frequentemente produz supressão de erros mais eficiente do que a abordagem padrão. Uma abordagem personalizada envolve reescrever circuitos quânticos para corresponder às restrições de hardware e suprimir os efeitos do ruído. O fluxo lógico desta cadeia de ferramentas é personalizável e não precisa ser linear. O processo de transpilação pode preparar laços iterativos, ramificações condicionais e outros comportamentos complexos. Um bom ponto de partida ao desenvolver um conjunto de passes personalizados é examinar a sequência padrão de transformações.

Para uma visão geral da transpilação usando pass managers, veja Transpilar com pass managers.

Transpilação padrão

Para uma forma mais simples, porém menos personalizável, de usar o transpiler "fora da caixa", use a função qiskit.compiler.transpile. Ela gera e executa um dos objetos StagedPassManager predefinidos com base, entre outras opções, em um sinalizador optimization_level que pode ser definido como 0, 1, 2 ou 3. Níveis mais altos geram circuitos mais otimizados ao custo de tempos de transpilação mais longos.

Próximos passos

Recomendações