Elaborazione ibrida integrata

Il calcolo ibrido integrato riunisce i processi classici e quantistici, consentendo al codice classico di controllare l'esecuzione di operazioni quantistiche basate sulle misurazioni a circuito intermedio mentre i qubit fisici rimangono attivi. Usando tecniche di programmazione comuni, ad esempio condizionali annidati, cicli e chiamate di funzione, un singolo programma quantistico può eseguire problemi complessi, riducendo il numero di colpi necessari. Usando le tecniche di riutilizzo di qubit, i programmi più grandi possono essere eseguiti nei computer che usano un numero minore di qubit.

Importante

Il calcolo quantistico ibrido integrato non è attualmente supportato dall'estensione Modern (Modern Quantum Development Kit QDK) per Visual Studio Code, insieme ad altri componenti presenti in questa pagina, ad esempio il kernel IQ# , il comando magic o il %azureqsharp.azure modulo. Per eseguire processi ibridi integrati, usare Microsoft Quantum Development Kit (QDK classico). Per altre informazioni, vedere Continuare a lavorare in QDK classico.

Per altre discussioni, vedere:

Calcolo quantistico ibrido integrato

Aggiunta del supporto per targets

Attualmente, il modello di calcolo ibrido integrato in Azure Quantum è supportato in Quantinuumtargets.

Quantinuum

Funzionalità supportata Note
Cicli classici Cicli delimitati solo
Flusso di controllo arbitrario Uso di if/else branching
Misurazione del circuito intermedio Usa le risorse di registrazione classiche
Riutilizzo di Qubit N/D
Calcolo classico in tempo reale Aritmetica intero senza segno a 32 bit
Usa le risorse di registrazione classiche

Introduzione

Per iniziare a esplorare la programmazione ibrida integrata, è consigliabile esplorare gli esempi in questo articolo o esplorare la scheda Calcolo quantistico ibrido nella raccolta Esempi del portale di Azure Quantum.

Invio di processi ibridi integrati

Quando si invia un processo ibrido integrato, è necessario aggiungere un target parametro di funzionalità dopo aver specificato .target Oltre a questo, i programmi ibridi integrati in Azure Quantum vengono eseguiti e gestiti esattamente come i processi quantistici regolari. Ogni processo ha un singolo ID processo e il risultato è un singolo istogramma.

Importante

Il calcolo quantistico ibrido integrato non è attualmente supportato dall'estensione Modern (Modern Quantum Development Kit QDK) per Visual Studio Code, insieme ad altri componenti presenti in questa pagina, ad esempio il kernel IQ# , il comando magic o il %azureqsharp.azure modulo. Per eseguire processi ibridi integrati, usare Microsoft Quantum Development Kit (QDK classico). Per altre informazioni, vedere Continuare a lavorare in QDK classico.

HoQ#

Quando si usa il kernel IQ# in un Jupyter Notebook, usare %azure.target-capability magic command with the AdaptiveExecution parameter .

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

Python + Q#

Quando si usa il pacchetto Python qsharp , usare la funzione con il qsharp.azure.target_capabilityAdaptiveExecution parametro .

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

Interfaccia della riga di comando di Azure

Quando si usa l'interfaccia della riga di comando di Azure per inviare un processo, aggiungere il --target-capability parametro con il valore AdaptiveExecution.

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

Invio di processi ibridi integrati all'interno di una sessione

È possibile combinare più processi ibridi integrati all'interno di una sessione usando Q# e Python. Quando si invia una sessione, aggiungere il targetCapability parametro di input con il valore 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

Per altre informazioni, vedere Introduzione alle sessioni.

Nota

Anche se le sessioni sono disponibili per tutti i provider hardware di calcolo quantistico quantistico, si noti che i processi di calcolo quantistico ibridi integrati sono attualmente supportati in Quantinuum targets.

Stima del costo di un processo ibrido integrato

È possibile stimare il costo dell'esecuzione di un processo ibrido integrato nell'hardware Quantinuum eseguendolo prima in un emulatore.

Dopo un'esecuzione riuscita nell'emulatore:

  1. Nell'area di lavoro Azure Quantum selezionare Gestione processi.
  2. Selezionare il processo inviato.
  3. Nel popup Dettagli processo selezionare Stima costi per visualizzare il numero di crediti dell'emulatore Quantinuum (Quantinuum emulatore). Questo numero si traduce direttamente nel numero di HQCs (crediti quantistici Quantinuum) necessari per eseguire il processo nell'hardware Quantinuum.

Stima dei costi

Nota

Quantinuum annulla la registrazione dell'intero circuito e calcola il costo su tutti i percorsi di codice, indipendentemente dal fatto che vengano eseguiti in modo condizionale o meno.

Esempi ibridi integrati

Gli esempi seguenti illustrano il set di funzionalità corrente per l'elaborazione ibrida integrata.

  • Verificare uno stato GHZ intangled
  • Ripetizione di tre qubit
  • Stima di fase iterativa

Prerequisiti

  • Se non si ha esperienza con Azure Quantum, è necessaria una sottoscrizione di Azure e un'area di lavoro di Azure Quantum per eseguire gli esempi sull'hardware quantistico. Per altre informazioni, vedere Creare un'area di lavoro di Azure Quantum.
  • VS Code e la configurazione nell'ambiente Quantum Development Kit locale. Per altre informazioni, vedere Configurare .Quantum Development Kit
  • Assicurarsi che VS Code abbia la versione più recente dell'oggetto Quantum Development Kit (0.27.258160).
    • In VS Code selezionare CTRL + MAIUSC + X e cercare "Microsoft Quantum Development Kit".

Gli esempi in questo articolo sono configurati per l'esecuzione in Visual Studio (VS) Code e usano l'interfaccia della riga di comando di Azure predefinita per inviare il processo ad Azure Quantum. Per eseguire la versione Jupyter Notebook di questi e altri esempi, accedere all'area di lavoro portale di Azure e visualizzare gli esempi dalla scheda Calcolo quantistico ibrido nella raccolta Esempi. È possibile eseguire il notebook nel cloud o scaricarlo ed eseguirlo in locale.

Per risolvere i problemi relativi ai programmi ibridi integrati, vedere Risoluzione dei problemi relativi all'ibrido integrato.

In questo esempio si scoprirà come combinare istruzioni classiche e quantistiche nello stesso programma, tutto completamente elaborato dal back-end di calcolo quantistico.

Funzionalità da notare per questo esempio:

  • Le misurazioni del ciclo e del qubit si verificano mentre i qubit rimangono coerenti.
  • La routine combina operazioni di calcolo classiche e quantistiche.
  • Non è necessario imparare a programmare l'hardware ad alte prestazioni specializzato in esecuzione accanto alla QPU (ad esempio FPGAs).
  • L'esecuzione di un programma equivalente senza le funzionalità ibride integrate richiederebbe la restituzione di ogni risultato di misura intermedia e quindi l'esecuzione di post-elaborazione sui dati.

Creare un progetto VS Code

  1. In VS Code creare un nuovo Q# progetto di applicazione console autonomo denominato CheckGHZ.

    1. Selezionare Visualizza > pallet dei >Q#comandi : Creare una nuova applicazione console autonoma del progetto >
  2. Sostituire la configurazione in CheckGHZ.csproj con quanto segue:

    <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. Sostituire il codice in Program.qs con quanto segue:

    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. Da una finestra del terminale in VS Code connettersi all'area di lavoro Azure Quantum e impostare le risorse predefinite.

    az login
    

    Nota

    L'ID sottoscrizione di Azure, il gruppo di risorse e il nome dell'area di lavoro possono essere elencati nella finestra del terminale dopo l'accesso eseguendo az quantum workspace list. In alternativa, è possibile trovarli nella portale di Azure nella pagina Panoramica dell'area di lavoro Azure Quantum.

    az account set --subscription <MySubscriptionID>
    
    az quantum workspace set --resource-group <MyResourceGroup> --workspace <MyWorkspace> --location <MyLocation>
    
  5. Inviare il processo e visualizzare i risultati. Questa esecuzione usa circa 10.65 eHQCs (unità di fatturazione dell'emulatore 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]
    

Output GHZ

Passaggi successivi

Calcolo ibrido distribuito