Share via


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 nas medições de meio circuito enquanto os qubits físicos permanecem ativos. Ao utilizar técnicas de programação comuns, como condicionais aninhadas, ciclos e chamadas de função, um único programa quântico pode executar problemas complexos, reduzindo o número de capturas necessárias. Ao utilizar técnicas de reutilização de qubits, os programas maiores podem ser executados em máquinas que utilizam um número menor de qubits.

Importante

Atualmente, a computação quântica híbrida integrada não é suportada pela extensão QDK Moderna Quantum Development Kit (QDK Moderna) 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 tarefas híbridas integradas, utilize o Microsoft Quantum Development Kit (QDK Clássico). Para obter mais informações, veja Continuar a trabalhar no QDK Clássico.

Para mais debates, consulte:

Computação quântica híbrida integrada

Suportado targets

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

Quantinuum

Funcionalidade suportada Notas
Ciclos clássicos Apenas ciclos vinculados
Fluxo de controlo arbitrário Utilização da ramificação if/else
Medição média do circuito Utiliza recursos de registo clássicos
Reutilização de qubits N/D
Computação clássica em tempo real Aritmética de número inteiro não assinado de 32 bits
Utiliza recursos de registo clássicos

Introdução

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

Submeter tarefas híbridas integradas

Ao submeter uma tarefa híbrida integrada, tem de adicionar um target parâmetro de capacidade depois de especificar o target. Para além disso, os programas híbridos integrados no Azure Quantum são executados e geridos da mesma forma que os trabalhos quânticos normais. Cada tarefa tem um único ID de tarefa e o resultado é um único histograma.

Importante

Atualmente, a computação quântica híbrida integrada não é suportada pela extensão QDK Moderna Quantum Development Kit (QDK Moderna) 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 tarefas híbridas integradas, utilize o Microsoft Quantum Development Kit (QDK Clássico). Para obter mais informações, veja Continuar a trabalhar no QDK Clássico.

IQ#

Ao utilizar o kernel IQ# num Jupyter Notebook, utilize o %azure.targetComando magic -capability com o AdaptiveExecution parâmetro .

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

Python + Q#

Ao utilizar o pacote python qsharp , utilize 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 utilizar a CLI do Azure para submeter uma tarefa, 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

Submeter tarefas híbridas integradas numa sessão

Pode combinar várias tarefas híbridas integradas numa sessão com Q# o e o Python. Ao submeter 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.

Nota

Embora as sessões estejam disponíveis para todos os fornecedores de hardware de computação quântica, tenha em atenção que as tarefas de computação quântica híbrida integradas são atualmente suportadas no Quantinuum targets.

Estimar o custo de uma tarefa híbrida integrada

Pode estimar o custo da execução de uma tarefa híbrida integrada no hardware Quantinuum ao executá-lo primeiro num emulador.

Após uma execução com êxito no emulador:

  1. Na área de trabalho do Azure Quantum, selecione Gestão de tarefas.
  2. Selecione a tarefa que submeteu.
  3. No pop-up Detalhes da tarefa, selecione Estimativa de Custos para ver quantos eHQCs (créditos de emulador Quantinuum) foram utilizados. Este número traduz-se diretamente no número de HQCs (créditos quânticos Quantinuum) que são necessários para executar a tarefa em hardware Quantinuum.

Estimativa de custos

Nota

O Quantinuum anula a inscrição de todo o circuito e calcula o custo em todos os caminhos de código, quer sejam ou não executados condicionalmente.

Exemplos híbridos integrados

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

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

Pré-requisitos

  • Se não estiver familiarizado com o Azure Quantum, precisará de uma subscrição do Azure e de uma área de trabalho do Azure Quantum para executar os exemplos em hardware quântico. Para obter mais informações, veja Criar uma área de trabalho do Azure Quantum.
  • VS Code e a Quantum Development Kit configuração no seu ambiente local. Para obter mais informações, consulte Configurar o Quantum Development Kit.
  • Certifique-se de que o VS Code tem a versão mais recente do Quantum Development Kit (0.27.258160).
    • No VS Code, selecione Ctrl + Shift + X e procure "Microsoft Quantum Development Kit".

Os exemplos neste artigo estão configurados para serem executados no Visual Studio (VS) Code e utilizam a interface de linha de comandos (CLI) do Azure incorporada para submeter a tarefa para o Azure Quantum. Para executar a versão Jupyter Notebook destes e de outros exemplos, inicie sessão na área de trabalho portal do Azure e veja os exemplos do separador Computação quântica híbrida na galeria Exemplos. Pode executar o bloco de notas na nuvem ou transferi-lo e executá-lo localmente.

Para resolver problemas com programas híbridos integrados, veja Resolver problemas híbridos integrados.

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

Funcionalidades a ter em conta sobre este exemplo:

  • As medições de ciclo e qubit ocorrem enquanto os qubits permanecem coerentes.
  • A rotina mistura operações de computação clássica e quântica.
  • Não precisa de aprender a programar para hardware especializado de alto desempenho em execução junto à QPU (como FPGAs).
  • A execução de um programa equivalente sem as funcionalidades híbridas integradas exigiria a devolução de cada resultado de medição intermédia e, em seguida, a execução do pós-processamento nos dados.

Criar um projeto do VS Code

  1. No VS Code, crie um novo Q# projeto de aplicação de consola autónomo com o nome CheckGHZ.

    1. Selecione Ver > Comando Pallete>Q#: Criar nova aplicação de consola autónoma 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. A partir de uma janela de terminal no VS Code, ligue-se à área de trabalho do Azure Quantum e defina os recursos predefinidos.

    az login
    

    Nota

    O ID da subscrição do Azure, o grupo de recursos e o nome da área de trabalho podem ser listados na janela do terminal após iniciar sessão ao executar az quantum workspace list. Em alternativa, pode encontrá-los na portal do Azure na página Descrição geral da área de trabalho do Azure Quantum.

    az account set --subscription <MySubscriptionID>
    
    az quantum workspace set --resource-group <MyResourceGroup> --workspace <MyWorkspace> --location <MyLocation>
    
  5. Submeta a tarefa e veja os resultados. Esta execução utiliza aproximadamente 10,65 eHQCs (unidades de faturação 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

Passos seguintes

Computação híbrida distribuída