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:
- Granade & Weibe, "Usando caminhadas aleatórias para estimativa de fase iterativa".
- Lubinski, et al., "Advanceing Hybrid Quantum–Classic Computation with Real-Time Execution"
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:
- No workspace do Azure Quantum, selecione Gerenciamento de trabalhos.
- Selecione o trabalho que você enviou.
- 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.
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
No VS Code, crie um novo Q# projeto de aplicativo de console autônomo chamado CheckGHZ.
- Selecione Exibir > Pallete >Q#de Comando: criar novo aplicativo de console autônomo 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; } }
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>
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]
Próximas etapas
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de