Pular para o conteúdo principal

Transpile circuits remotamente com o Qiskit Transpiler Service

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-transpiler
Migração do Transpiler Service

A partir de 18 de julho de 2025, o serviço está sendo migrado para suportar a nova IBM Quantum® Platform e não está disponível. Para passes de IA, você pode usar o modo local.

O serviço está em versão beta e sujeito a alterações. Se você tiver feedback ou quiser entrar em contato com a equipe de desenvolvimento, use este canal do Qiskit Slack Workspace.

O Qiskit Transpiler Service disponibiliza capacidades de transpilação na nuvem. Além das capacidades do transpilador local do Qiskit, suas tarefas de transpilação podem se beneficiar tanto dos recursos de nuvem do IBM Quantum quanto de passes de transpilação com IA.

O Qiskit Transpiler Service oferece uma biblioteca Python para integrar facilmente esse serviço e suas capacidades nos seus padrões e fluxos de trabalho atuais do Qiskit. Este serviço está disponível apenas para usuários dos planos IBM Quantum Premium Plan, Flex Plan e On-Prem (via IBM Quantum Platform API).

Instale o pacote qiskit-ibm-transpiler

Para usar o Qiskit Transpiler Service, instale o pacote qiskit-ibm-transpiler:

pip install qiskit-ibm-transpiler

O pacote autentica automaticamente usando suas credenciais da IBM Quantum Platform, de forma alinhada com a forma como o Qiskit Runtime as gerencia:

  • Variável de ambiente: QISKIT_IBM_TOKEN
  • Arquivo de configuração ~/.qiskit/qiskit-ibm.json (na seção default-ibm-quantum).

Nota: Este pacote requer o Qiskit SDK v1.X.

Opções de transpilação do qiskit-ibm-transpiler

  • backend_name (opcional, str) — O nome de um backend conforme esperado pelo QiskitRuntimeService (por exemplo, ibm_torino). Se definido, o método de transpilação usa o layout do backend especificado para a operação de transpilação. Se qualquer outra opção que afete essas configurações for definida, como coupling_map, as configurações de backend_name serão substituídas.
  • coupling_map (opcional, List[List[int]]) — Uma lista de coupling map válida (por exemplo, [[0,1],[1,2]]). Se definida, o método de transpilação usa esse coupling map para a operação de transpilação. Quando definido, substitui qualquer valor especificado para target.
  • optimization_level (int) — O nível de otimização potencial a ser aplicado durante o processo de transpilação. Os valores válidos são [1,2,3], onde 1 é a menor otimização (e a mais rápida) e 3 é a maior otimização (e a mais intensiva em tempo).
  • ai ("true", "false", "auto") — Se as capacidades com IA devem ser usadas durante a transpilação. As capacidades com IA disponíveis podem ser para passes de transpilação AIRouting ou outros métodos de síntese com IA. Se esse valor for "true", o serviço aplica diferentes passes de transpilação com IA dependendo do optimization_level solicitado. Se for "false", usa os recursos mais recentes de transpilação do Qiskit sem IA. Por fim, se for "auto", o serviço decide se aplica os passes heurísticos padrão do Qiskit ou os passes com IA com base no seu circuit.
  • qiskit_transpile_options (dict) — Um objeto dicionário Python que pode incluir qualquer outra opção válida no método transpile() do Qiskit. Se o qiskit_transpile_options incluir optimization_level, ele será descartado em favor do optimization_level especificado como parâmetro de entrada. Se o qiskit_transpile_options incluir qualquer opção não reconhecida pelo método transpile() do Qiskit, a biblioteca levantará um erro.

Para mais informações sobre os métodos disponíveis do qiskit-ibm-transpiler, consulte a referência da API do qiskit-ibm-transpiler. Para saber mais sobre a API do serviço, consulte a documentação da REST API do Qiskit Transpiler Service.

Exemplos

Os exemplos a seguir demonstram como transpillar circuits usando o Qiskit Transpiler Service com diferentes parâmetros.

  1. Crie um circuit e chame o Qiskit Transpiler Service para transpilar o circuit com ibm_torino como backend_name, 3 como optimization_level, e sem usar IA durante a transpilação.
from qiskit.circuit.library import efficient_su2
from qiskit_ibm_transpiler.transpiler_service import TranspilerService

circuit = efficient_su2(101, entanglement="circular", reps=1)

cloud_transpiler_service = TranspilerService(
backend_name="ibm_torino",
ai="false",
optimization_level=3,
)
transpiled_circuit = cloud_transpiler_service.run(circuit)

Nota: você só pode usar dispositivos backend_name aos quais tem acesso com sua conta IBM Quantum. Além do backend_name, o TranspilerService também aceita coupling_map como parâmetro.

  1. Produza um circuit semelhante e transfile-o, solicitando capacidades de transpilação com IA ao definir o sinalizador ai como True:
from qiskit.circuit.library import efficient_su2
from qiskit_ibm_transpiler.transpiler_service import TranspilerService

circuit = efficient_su2(101, entanglement="circular", reps=1)

cloud_transpiler_service = TranspilerService(
backend_name="ibm_torino",
ai="true",
optimization_level=1,
)
transpiled_circuit = cloud_transpiler_service.run(circuit)
  1. Produza um circuit semelhante e transfile-o, deixando o serviço decidir se deve usar os passes de transpilação com IA.
from qiskit.circuit.library import efficient_su2
from qiskit_ibm_transpiler.transpiler_service import TranspilerService

circuit = efficient_su2(101, entanglement="circular", reps=1)

cloud_transpiler_service = TranspilerService(
backend_name="ibm_torino",
ai="auto",
optimization_level=1,
)
transpiled_circuit = cloud_transpiler_service.run(circuit)

Limites do Qiskit Transpiler Service

A seguir estão as limitações mais relevantes do serviço:

  • O número máximo de gates de dois qubits por circuit em um job de transpilação em qualquer modo ai é 1 milhão.
  • O tempo máximo permitido para executar um processo de transpilação é de 30 minutos por job.
  • Você deve recuperar o resultado da transpilação do serviço dentro de 20 minutos após o término do processo de transpilação. Após 20 minutos, o resultado do job é descartado.
  • O tempo máximo que um conjunto de circuits pode permanecer na fila interna aguardando para ser transpilado é de 120 minutos. Após esse período, se o job não tiver sido transpilado, ele será descartado.
  • O número máximo de qubits não foi determinado. O serviço foi testado com 900+ qubits.

Citação

Se você usar qualquer recurso com IA do Qiskit Transpiler Service em sua pesquisa, use a seguinte citação recomendada:

@misc{2405.13196,
Author = {David Kremer and Victor Villar and Hanhee Paik and Ivan Duran and Ismael Faro and Juan Cruz-Benito},
Title = {Practical and efficient quantum circuit synthesis and transpiling with Reinforcement Learning},
Year = {2024},
Eprint = {arXiv:2405.13196},
}

Próximos passos

Recomendações