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:
- Granade & Weibe, "Using Random Walks for Iterative Phase Estimation".
- Lubinski, et al., "Advanceing Hybrid Quantum–Classic Computation with Real-Time Execution"
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:
- Na área de trabalho do Azure Quantum, selecione Gestão de tarefas.
- Selecione a tarefa que submeteu.
- 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.
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
No VS Code, crie um novo Q# projeto de aplicação de consola autónomo com o nome CheckGHZ.
- Selecione Ver > Comando Pallete>Q#: Criar nova aplicação de consola autónoma do projeto >
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>
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; } }
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>
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]
Passos seguintes
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários