Pular para o conteúdo principal

Modelo de execução direcionada (beta)

Versão beta

Todos os componentes do modelo de execução direcionada estão atualmente em beta e podem não ser estáveis. Você está convidado a testá-los e fornecer feedback abrindo uma issue nos repositórios GitHub do Samplomatic ou do Qiskit Runtime.

As interfaces primitivas Sampler e Estimator fornecem uma abstração de nível mais alto para que os desenvolvedores de algoritmos se concentrem mais na inovação e menos na conversão de dados. No entanto, elas são menos adequadas para cientistas de informação quântica, que precisam de mais controle e flexibilidade em seus experimentos de escala utilitária. O modelo de execução direcionada, atualmente em versão beta, atende a essa necessidade. Este modelo de execução fornece os ingredientes para capturar as intenções de design no lado do cliente e transfere a geração custosa de variantes de circuito para o lado do servidor, para que você possa ajustar a mitigação de erros e outras técnicas sem sacrificar o desempenho. Esse modelo explícito e combinável facilita a experimentação com novas técnicas, a reprodução de resultados e o compartilhamento de métodos.

Em sua versão beta, o modelo de execução direcionada foca em dar a você controle sobre técnicas incorporadas ao Sampler e Estimator existentes, incluindo o twirling de Pauli, o aprendizado e a injeção de modelos de ruído, e mudanças de base. O suporte a outras capacidades será adicionado gradualmente ao longo do tempo.

Fluxo de trabalho

Um dos principais objetivos do modelo de execução direcionada é fornecer uma maneira modular de aplicar métodos de mitigação de erros. Por exemplo, você pode definir quais camadas no circuito devem ser mitigadas, ou ajustar as taxas de ruído injetadas no circuito.

Para aplicar a mitigação de erros a um circuito no framework, seu fluxo de trabalho geralmente envolverá as seguintes etapas (as ferramentas mencionadas aqui são descritas com mais detalhes na próxima seção):

  1. Agrupe instruções em caixas e aplique anotações a elas. As anotações capturam a transformação pretendida sem gerar efetivamente as variantes do circuito.

  2. Aprenda os modelos de ruído das camadas únicas, se necessário, usando o novo NoiseLearnerV3.

  3. Construa o circuito template e o samplex a partir do circuito encaixotado.

  4. Execute o circuito template e o samplex com a primitiva Executor, que irá gerar e executar as variantes do circuito conforme instruído.

  5. Pós-processe os resultados da execução. Por exemplo, você pode aplicar pós-seleção ou extrapolar valores esperados mitigados a partir dos resultados de execução.

Ferramentas para o modelo de execução direcionada

As ferramentas a seguir podem ser usadas em conjunto para implementar uma técnica de mitigação de erros no modelo de execução direcionada.

Samplomatic

Samplomatic é uma nova biblioteca de código aberto que suporta randomizações de amostragem personalizadas. Ela usa o constructo box para raciocinar sobre coleções de operações de circuito que devem ser tratadas como tendo um contexto de ruído estável, e usa anotações em caixas para permitir que você declare e configure intenções. Por exemplo, você pode estratificar seu circuito em caixas, adicionar uma anotação de twirling a cada caixa e especificar qual grupo de twirling usar, como mostrado na figura a seguir:

Exemplo de uso de caixas e anotações de twirling

Um circuito com caixas anotadas pode então ser usado para gerar um circuito template e um samplex. O circuito template de saída é um circuito parametrizado que será executado sem alterações adicionais (exceto por ter diferentes valores de parâmetros atribuídos a ele). O samplex, que é o tipo central da biblioteca Samplomatic, representa uma distribuição de probabilidade paramétrica sobre os parâmetros do circuito template e outros campos com valores de array. Esses campos podem ser usados para pós-processar dados coletados da execução do circuito template vinculado. Em outras palavras, o par circuito template e samplex informa à primitiva Executor (descrita abaixo) exatamente quais parâmetros gerar e quais circuitos vinculados executar. Como esses dois constructos são criados no lado do cliente, você pode fazer inspeção e amostragem locais para verificar as saídas antes de enviá-las para execução em hardware.

Para simplificar o processo de geração de caixas anotadas, a biblioteca Samplomatic também fornece passes do Transpiler que agrupam automaticamente instruções de circuito em caixas anotadas, com base nas estratégias que você fornecer.

Para saber mais sobre o Samplomatic, visite a documentação de guias e de referência de API. Sinta-se à vontade para enviar feedback e reportar bugs em seu repositório GitHub.

Primitiva Executor

Executor é uma nova primitiva do Qiskit Runtime que recebe o par circuito template e samplex como entrada, gera e vincula valores de parâmetros de acordo com o samplex, executa os circuitos vinculados no hardware e retorna os resultados de execução e metadados. Ela segue as diretivas do par de entrada e não toma decisões implícitas por você, para que o processo seja transparente e eficiente.

Para acessar o Executor, instale o branch executor_preview do qiskit-ibm-runtime:

pip install -U git+https://github.com/Qiskit/qiskit-ibm-runtime.git@executor_preview

As entradas e saídas da primitiva Executor são muito diferentes das do Sampler e Estimator. Consulte a referência de API do Executor para mais informações. Além disso, o guia de início rápido do Executor fornece uma visão geral e exemplos de código.

NoiseLearnerV3

Semelhante ao atual NoiseLearner, este programa auxiliar do Qiskit Runtime retorna o modelo de ruído esparso de Pauli-Lindblad que é usado em muitos métodos de mitigação de erros, incluindo PEC, PEA e PNA. No NoiseLearner original, você passa uma lista de circuitos e o programa estratifica os circuitos em camadas e retorna o modelo de ruído para cada camada única. O NoiseLearnerV3, por outro lado, dá a você controle sobre como estratificar seus circuitos, e o programa simplesmente recebe uma lista de instruções de circuito encaixotadas (por exemplo, camadas únicas) como entradas.

O NoiseLearnerV3 também suporta o aprendizado de ruído de medição. Para cada conjunto de instruções na lista de entrada, ele executa o protocolo de aprendizado de Pauli-Lindblad se o conjunto contiver gates de um e dois qubits, e o protocolo TREX se o conjunto contiver medições. Para acessar o NoiseLearnerV3, instale o branch executor_preview do qiskit-ibm-runtime:

pip install -U git+https://github.com/Qiskit/qiskit-ibm-runtime.git@executor_preview

Para saber mais sobre o NoiseLearnerV3, consulte a documentação de referência de API.

Próximos passos

Recomendações