Configurações padrão e opções de configuração da transpilação
Versões dos pacotes
O código nesta página foi desenvolvido usando os seguintes requisitos. Recomendamos usar essas versões ou mais recentes.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Circuitos abstratos precisam ser transpilados porque os QPUs têm um conjunto limitado de portas base e não conseguem executar operações arbitrárias. A função do transpilador é transformar circuitos arbitrários para que possam ser executados em um QPU específico. Isso é feito traduzindo os circuitos para as portas base suportadas e introduzindo portas SWAP conforme necessário, para que a conectividade do circuito corresponda à do QPU.
Conforme explicado em Transpilar com gerenciadores de passagem, você pode criar um gerenciador de passagem usando a função generate_preset_pass_manager e passar um circuito ou uma lista de circuitos para o método run para transpilá-los. Você pode chamar generate_preset_pass_manager passando apenas o nível de otimização e o backend, optando por usar os padrões para todas as outras opções, ou pode passar argumentos adicionais à função para ajustar a transpilação.
Uso básico sem parâmetros
Neste exemplo, passamos um circuito e um QPU alvo para o transpilador sem especificar nenhum parâmetro adicional.
Crie um circuito e veja o resultado:
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit import QuantumCircuit
from qiskit.circuit.library import grover_operator, DiagonalGate
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
# Create circuit to test transpiler on
oracle = DiagonalGate([1] * 7 + [-1])
qc = QuantumCircuit(3)
qc.h([0, 1, 2])
qc = qc.compose(grover_operator(oracle))
# Add measurements to the circuit
qc.measure_all()
# View the circuit
qc.draw(output="mpl")
Transpile o circuito e veja o resultado:
from qiskit.transpiler import generate_preset_pass_manager
# Specify the QPU to target
backend = FakeSherbrooke()
# Transpile the circuit
pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend
)
transpiled_circ = pass_manager.run(qc)
# View the transpiled circuit
transpiled_circ.draw(output="mpl", idle_wires=False)
Todos os parâmetros disponíveis
A seguir estão todos os parâmetros disponíveis para a função generate_preset_pass_manager. Há duas classes de argumentos: os que descrevem o alvo da compilação e os que influenciam o funcionamento do transpilador.
Todos os parâmetros, exceto optimization_level, são opcionais. Para mais detalhes, consulte a documentação da API do Transpilador.
optimization_level(int) - Quantidade de otimização a ser aplicada nos circuitos. Inteiro no intervalo (0 - 3). Níveis mais altos geram circuitos mais otimizados, ao custo de maior tempo de transpilação. Consulte Definir o nível de otimização do transpilador para mais detalhes.
Parâmetros usados para descrever o alvo de compilação:
Esses argumentos descrevem o QPU alvo para execução do circuito, incluindo informações como o mapa de acoplamento do QPU (que descreve a conectividade dos qubits), as portas base suportadas pelo QPU e as taxas de erro das portas.
Muitos desses parâmetros são descritos em detalhes em Parâmetros comumente usados para transpilação.
Parâmetros do QPU (Backend)
Backend)Parâmetros do backend - Se você especificar backend, não precisa especificar target nem nenhuma outra opção de backend. Da mesma forma, se você especificar target, não precisa especificar backend nem nenhuma outra opção de backend.
backend(Backend) - Se definido, o transpilador compila o circuito de entrada para este dispositivo. Se qualquer outra opção que impacte essas configurações for definida, comocoupling_map, ela substitui as configurações dobackend.target(Target) - Um alvo de transpilador de backend. Normalmente é especificado como parte do argumento backend, mas se você construiu manualmente um objeto Target, pode especificá-lo aqui. Isso substitui o alvo dobackend.backend_properties(BackendProperties) - Propriedades retornadas por um QPU, incluindo informações sobre erros de porta, erros de leitura, tempos de coerência dos qubits, entre outros. Encontre um QPU que forneça essas informações executandobackend.properties().timing_constraints(Dict[str, int] | None) - Uma restrição opcional do hardware de controle sobre a resolução de tempo das instruções. Essa informação é fornecida pela configuração do QPU. Se o QPU não tiver nenhuma restrição na alocação de tempo das instruções,timing_constraintséNonee nenhum ajuste é realizado. Um QPU pode reportar um conjunto de restrições, a saber:granularity: Um valor inteiro que representa a resolução mínima de porta de pulso em unidades de dt. Uma porta de pulso definida pelo usuário deve ter uma duração que seja múltipla desse valor de granularidade.min_length: Um valor inteiro que representa o comprimento mínimo de porta de pulso em unidades de dt. Uma porta de pulso definida pelo usuário deve ser mais longa que esse comprimento.pulse_alignment: Um valor inteiro que representa a resolução temporal do tempo de início de instruções de porta. As instruções de porta devem iniciar em um tempo que seja múltiplo desse valor.acquire_alignment: Um valor inteiro que representa a resolução temporal do tempo de início de instruções de medição. As instruções de medição devem iniciar em um tempo que seja múltiplo desse valor.
Parâmetros de layout e topologia
basis_gates(List[str] | None) - Lista de nomes de portas base para as quais desdobrar. Por exemplo ['u1', 'u2', 'u3', 'cx']. SeNone, não desdobra.coupling_map(CouplingMap | List[List[int]]) - Mapa de acoplamento dirigido (possivelmente personalizado) como alvo no mapeamento. Se o mapa de acoplamento for simétrico, ambas as direções precisam ser especificadas. Os seguintes formatos são suportados:- Instância de CouplingMap
- Lista - deve ser fornecida como uma matriz de adjacência, onde cada entrada especifica todas as interações dirigidas de dois qubits suportadas pelo QPU. Por exemplo: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
inst_map(List[InstructionScheduleMap] | None) - Mapeamento de operações de circuito para agendas de pulso. SeNone, oinstruction_schedule_mapdo QPU é usado.
Parâmetros usados para influenciar o funcionamento do transpilador
Esses parâmetros afetam estágios específicos da transpilação. Alguns podem impactar múltiplos estágios, mas foram listados apenas em um estágio para simplicidade. Se você especificar um argumento, como initial_layout para os qubits que deseja usar, esse valor substitui todas as passagens que poderiam alterá-lo. Em outras palavras, o transpilador não mudará nada que você especificar manualmente. Para detalhes sobre estágios específicos, consulte Estágios do transpilador.
Estágio de inicialização
hls_config(HLSConfig) - Uma classe de configuração opcionalHLSConfigque é passada diretamente para a passagem de transformaçãoHighLevelSynthesis. Essa classe de configuração permite especificar as listas de algoritmos de síntese e seus parâmetros para vários objetos de alto nível.init_method(str) - O nome do plugin a ser usado no estágio de inicialização. Por padrão, nenhum plugin externo é usado. Você pode ver uma lista de plugins instalados executandolist_stage_plugins()cominitcomo argumento do nome do estágio.unitary_synthesis_method(str) - O nome do método de síntese unitária a ser usado. Por padrão,defaulté usado. Você pode ver uma lista de plugins instalados executandounitary_synthesis_plugin_names().unitary_synthesis_plugin_config(dict) - Um dicionário de configuração opcional que é passado diretamente para o plugin de síntese unitária. Por padrão, essa configuração não tem efeito porque o método padrão de síntese unitária não aceita configuração personalizada. Aplicar uma configuração personalizada só é necessário quando um plugin de síntese unitária é especificado com o argumentounitary_synthesis. Como isso é específico de cada plugin de síntese unitária, consulte a documentação do plugin para saber como usar essa opção.
Estágio de layout
initial_layout(Layout | Dict | List) - Posição inicial dos qubits virtuais nos qubits físicos. Se esse layout tornar o circuito compatível com as restrições docoupling_map, ele será usado. O layout final não tem garantia de ser o mesmo, pois o transpilador pode permutar qubits por meio de SWAPs ou outros meios. Para mais detalhes, consulte a seção Layout inicial.layout_method(str) - Nome da passagem de seleção de layout (default,dense,sabreetrivial). Também pode ser o nome do plugin externo a ser usado no estágio de layout. Você pode ver uma lista de plugins instalados executandolist_stage_plugins()comlayoutpara o argumentostage_name. O valor padrão ésabre.
Estágio de roteamento
routing_method(str) - Nome da passagem de roteamento (basic,lookahead,default,sabreounone). Também pode ser o nome do plugin externo a ser usado no estágio de roteamento. Você pode ver uma lista de plugins instalados executandolist_stage_plugins()comroutingpara o argumentostage_name. O valor padrão ésabre.
Estágio de tradução
translation_method(str) - Nome da passagem de tradução (default,synthesis,translator,ibm_backend,ibm_dynamic_circuits,ibm_fractional). Também pode ser o nome do plugin externo a ser usado no estágio de tradução. Você pode ver uma lista de plugins instalados executandolist_stage_plugins()comtranslationpara o argumentostage_name. O valor padrão étranslator.
Estágio de otimização
approximation_degree(float, no intervalo 0-1 | None) - Parâmetro heurístico usado para aproximação de circuitos (1.0 = sem aproximação, 0.0 = aproximação máxima). O valor padrão é 1.0. EspecificarNonedefine o grau de aproximação como a taxa de erro reportada. Consulte a seção Grau de aproximação para mais detalhes.optimization_method(str) - O nome do plugin a ser usado no estágio de otimização. Por padrão, nenhum plugin externo é usado. Você pode ver uma lista de plugins instalados executandolist_stage_plugins()comoptimizationpara o argumentostage_name.
Estágio de agendamento
scheduling_method(str) - Nome da passagem de agendamento. Também pode ser o nome do plugin externo a ser usado no estágio de agendamento. Você pode ver uma lista de plugins instalados executandolist_stage_plugins()comschedulingpara o argumentostage_name.- 'as_soon_as_possible': Agenda instruções de forma gananciosa, o mais cedo possível em um recurso de qubit (apelido:
asap). - 'as_late_as_possible': Agenda instruções tardiamente, ou seja, mantendo os qubits no estado fundamental quando possível (apelido:
alap). Este é o padrão.
- 'as_soon_as_possible': Agenda instruções de forma gananciosa, o mais cedo possível em um recurso de qubit (apelido:
Execução do transpilador
seed_transpiler(int) - Define sementes aleatórias para as partes estocásticas do transpilador.
Os seguintes valores padrão são usados se você não especificar nenhum dos parâmetros acima. Consulte a página de referência da API do método para mais informações:
generate_preset_pass_manager(
optimization_level=1,
backend=None,
target=None,
basis_gates=None,
coupling_map=None,
initial_layout=None,
layout_method=None,
routing_method=None,
translation_method=None,
scheduling_method=None,
approximation_degree=1.0,
seed_transpiler=None,
unitary_synthesis_method="default",
unitary_synthesis_plugin_config=None,
hls_config=None,
init_method=None,
optimization_method=None,
)
<qiskit.transpiler.passmanager.StagedPassManager at 0x7fa3e6dab110>
Próximas etapas
- Aprenda como Definir o nível de otimização.
- Revise mais Parâmetros comumente usados.
- Aprenda como Definir o nível de otimização ao usar o Qiskit Runtime.
- Visite o tópico Transpilar com gerenciadores de passagem.
- Para exemplos, consulte Representando computadores quânticos.
- Aprenda como transpilar circuitos como parte do fluxo de trabalho de padrões do Qiskit usando o Qiskit Runtime.
- Revise a documentação da API do Transpilador.