Computação híbrida integrada

A computação híbrida integrada reúne os processos clássicos e quânticos, permitindo que o código clássico controle a execução de operações quânticas com base em medidas de circuito médio enquanto os qubits físicos permanecem ativos. Usando técnicas de programação comuns, como condicionais aninhadas, loops e chamadas de função, um único programa quântico pode executar problemas complexos, reduzindo o número de capturas necessárias. Usando técnicas de reutilização de qubit, programas maiores podem ser executados em computadores utilizando um número menor de qubits.

Importante

Atualmente, a computação quântica híbrida integrada não é compatível com a extensão moderna Quantum Development Kit (QDK moderno) para Visual Studio Code, juntamente com outros componentes nos exemplos desta página, como o kernel IQ#, o %azure comando magic ou o qsharp.azure módulo. Para executar trabalhos híbridos integrados, use o Microsoft Quantum Development Kit (QDK Clássico). Para obter mais informações, consulte Continuar trabalhando no QDK clássico.

Para obter mais discussões, confira:

Computação quântica híbrida integrada

targets com suporte

Atualmente, o modelo de computação híbrida integrado no Azure Quantum tem suporte no Quantinuumtargets.

Quantinuum

Recurso com suporte Observações
Loops clássicos Somente loops limitados
Fluxo de controle arbitrário Uso da ramificação if/else
Medição de circuito médio Utiliza recursos de registro clássicos
Reutilização do Qubit N/D
Computação clássica em tempo real Aritmética de inteiro sem sinal de 32 bits
Utiliza recursos de registro clássicos

Introdução

Para começar a explorar a programação híbrida integrada, sugerimos percorrer os exemplos neste artigo ou explorar a guia Computação quântica híbrida na galeria Exemplos do portal do Azure Quantum.

Enviando trabalhos híbridos integrados

Ao enviar um trabalho híbrido integrado, você precisa adicionar um target parâmetro de funcionalidade depois de especificar o target. Fora isso, os programas híbridos integrados no Azure Quantum são executados e gerenciados da mesma forma que os trabalhos quânticos regulares. Cada trabalho tem uma única ID de trabalho e o resultado é um único histograma.

Importante

Atualmente, a computação quântica híbrida integrada não é compatível com a extensão moderna Quantum Development Kit (QDK moderno) para Visual Studio Code, juntamente com outros componentes nos exemplos desta página, como o kernel IQ#, o %azure comando magic ou o qsharp.azure módulo. Para executar trabalhos híbridos integrados, use o Microsoft Quantum Development Kit (QDK Clássico). Para obter mais informações, consulte Continuar trabalhando no QDK clássico.

EuQ#

Ao usar o kernel IQ# em um Jupyter Notebook, use o %azure.targetComando magic -capability com o AdaptiveExecution parâmetro .

%azure.target quantinuum.sim.h1-1e
%azure.target-capability AdaptiveExecution

Python + Q#

Ao usar o pacote qsharp do Python, use a qsharp.azure.target_capability função com o AdaptiveExecution parâmetro .

qsharp.azure.target("quantinuum.sim.h1-1e")
qsharp.azure.target_capability("AdaptiveExecution")

CLI do Azure

Ao usar a CLI do Azure para enviar um trabalho, adicione o --target-capability parâmetro com o valor AdaptiveExecution.

az quantum job submit \
    --target-capability AdaptiveExecution \
    --target-id quantinuum.sim.h1-1e \
    --job-name IterativePhaseEstimation \
    --shots 100 \
    --output table

Enviando trabalhos híbridos integrados em uma sessão

Você pode combinar vários trabalhos híbridos integrados em uma sessão usando Q# o e o Python. Ao enviar uma sessão, adicione o targetCapability parâmetro de entrada com o valor AdaptiveExecution.

with target.open_session(name="Q# session") as session:
    target.submit(input_data=QuantumOperation, name="Job 1", input_params={"count":100, "targetCapability":"AdaptiveExecution"}) # First job submission
    target.submit(input_data=QuantumOperation, name="Job 2", input_params={"count":200, "targetCapability":"AdaptiveExecution"}) # Second job submission
    target.submit(input_data=QuantumOperation, name="Job 3", input_params={"count":300, "targetCapability":"AdaptiveExecution"}) # Third job submission

Para obter mais informações, consulte Introdução às sessões.

Observação

Embora as sessões estejam disponíveis para todos os provedores de hardware de computação quântica, observe que atualmente há suporte para trabalhos integrados de computação quântica híbrida no Quantinuum targets.

Estimando o custo de um trabalho híbrido integrado

Você pode estimar o custo da execução de um trabalho híbrido integrado no hardware Quantinuum executando-o primeiro em um emulador.

Após uma execução bem-sucedida no emulador:

  1. No workspace do Azure Quantum, selecione Gerenciamento de trabalhos.
  2. Selecione o trabalho que você enviou.
  3. No pop-up Detalhes do trabalho, selecione Estimativa de Custo para exibir quantos eHQCs (créditos do emulador Quantinuum) foram usados. Esse número se traduz diretamente no número de HQCs (créditos quânticos do Quantinuum) necessários para executar o trabalho no hardware Quantinuum.

Estimativa de custo

Observação

O Quantinuum cancela o registro de todo o circuito e calcula o custo em todos os caminhos de código, sejam eles executados condicionalmente ou não.

Exemplos híbridos integrados

Os exemplos a seguir demonstram o conjunto de recursos atual para computação híbrida integrada.

  • Verificar um estado GHZ emaranhado
  • Repetição de três qubits
  • Estimativa de fase iterativa

Pré-requisitos

  • Se você for novo no Azure Quantum, precisará de uma assinatura do Azure e de um workspace do Azure Quantum para executar os exemplos em hardware quântico. Para obter mais informações, confira Criar um workspace do Azure Quantum.
  • VS Code e a configuração Quantum Development Kit em seu ambiente local. Para obter mais informações, consulte Configurar o Quantum Development Kit.
  • Verifique se o VS Code tem a versão mais recente do Quantum Development Kit (0.27.258160).
    • No VS Code, selecione Ctrl + Shift + X e pesquise "Microsoft Quantum Development Kit".

Os exemplos neste artigo são configurados para serem executados no Visual Studio (VS) Code e usam a CLI (interface de linha de comando) interna do Azure para enviar o trabalho ao Azure Quantum. Para executar a versão Jupyter Notebook desses e de outros exemplos, faça logon no workspace portal do Azure e exiba os exemplos da guia Computação quântica híbrida na galeria Exemplos. Você pode executar o notebook na nuvem ou baixá-lo e executá-lo localmente.

Para solucionar problemas com programas híbridos integrados, consulte Solução de problemas híbridos integrados.

Neste exemplo, você descobrirá como combinar instruções clássicas e quânticas no mesmo programa, todas totalmente processadas pelo back-end de computação quântica.

Recursos a serem observados sobre este exemplo:

  • As medidas de loop e qubit ocorrem enquanto os qubits permanecem coerentes.
  • A rotina combina operações de computação clássicas e quânticas.
  • Você não precisa aprender a programar hardware especializado de alto desempenho em execução ao lado da QPU (como FPGAs).
  • Executar um programa equivalente sem os recursos híbridos integrados exigiria o retorno de cada resultado de medida intermediária e, em seguida, executar o pós-processamento nos dados.

Criar um projeto do VS Code

  1. No VS Code, crie um novo Q# projeto de aplicativo de console autônomo chamado CheckGHZ.

    1. Selecione Exibir > Pallete >Q#de Comando: criar novo aplicativo de console autônomo do projeto >
  2. Substitua a configuração em CheckGHZ.csproj pelo seguinte:

    <Project Sdk="Microsoft.Quantum.Sdk/0.27.258160">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ExecutionTarget>quantinuum</ExecutionTarget>
        <TargetCapability>AdaptiveExecution</TargetCapability>
      </PropertyGroup>
    </Project>
    
  3. Substitua o código em Program.qs pelo seguinte:

    namespace Microsoft.Quantum.Samples {
    
        open Microsoft.Quantum.Measurement;
        open Microsoft.Quantum.Intrinsic;
    
        /// # Summary
        /// Counts the number of times measurements of a prepared GHZ state did not match the expected correlations.
        @EntryPoint() // The EntryPoint attribute is used to mark that this operation is where a quantum program will start running.
        operation CheckGHZ() : Int {
            use q = Qubit[3];
            mutable mismatch = 0;
            for _ in 1..10 {
                // Prepare the GHZ state.
                H(q[0]);
                CNOT(q[0], q[1]);
                CNOT(q[1], q[2]);
    
                // Measures and resets the 3 qubits
                let (r0, r1, r2) = (MResetZ(q[0]), MResetZ(q[1]), MResetZ(q[2]));
    
                // Adjusts classical value based on qubit measurement results
                if not (r0 == r1 and r1 == r2) {
                    set mismatch += 1;
                }
            }
            return mismatch;
        }
    }
    
  4. Em uma janela de terminal no VS Code, conecte-se ao workspace do Azure Quantum e defina os recursos padrão.

    az login
    

    Observação

    Sua ID de assinatura do Azure, o grupo de recursos e o nome do workspace podem ser listados na janela do terminal depois de fazer logon executando az quantum workspace list. Como alternativa, você pode encontrá-los no portal do Azure na página Visão geral do workspace do Azure Quantum.

    az account set --subscription <MySubscriptionID>
    
    az quantum workspace set --resource-group <MyResourceGroup> --workspace <MyWorkspace> --location <MyLocation>
    
  5. Envie o trabalho e exiba os resultados. Essa execução usa aproximadamente 10,65 eHQCs (unidades de cobrança do emulador Quantinuum)

    az quantum job submit \
      --target-id quantinuum.sim.h1-1e \
      --job-name CheckGHZ \
      --target-capability AdaptiveExecution \
      --shots 50
    
    az quantum job output \
      -o table \
      --job-id [job-id]
    

Saída ghz

Próximas etapas

Computação híbrida distribuída