Geïntegreerde hybride computing

Geïntegreerde hybride computing brengt de klassieke en kwantumprocessen samen, waardoor klassieke code de uitvoering van kwantumbewerkingen kan beheren op basis van metingen in het middencircuit, terwijl de fysieke qubits in leven blijven. Met behulp van veelgebruikte programmeertechnieken, zoals geneste voorwaardelijkheden, lussen en functie-aanroepen, kan één kwantumprogramma complexe problemen uitvoeren, waardoor het aantal opnamen dat nodig is, wordt verminderd. Met behulp van technieken voor hergebruik van qubits kunnen grotere programma's worden uitgevoerd op computers die gebruikmaken van een kleiner aantal qubits.

Belangrijk

Geïntegreerde hybride kwantumcomputing wordt momenteel niet ondersteund door de extensie Modern Quantum Development Kit (Modern QDK) voor Visual Studio Code, samen met andere onderdelen in de voorbeelden op deze pagina, zoals de I-kernelQ# , de %azure magic-opdracht of de qsharp.azure module. Als u geïntegreerde hybride taken wilt uitvoeren, gebruikt u microsoft Quantum Development Kit (klassieke QDK). Zie Doorgaan met werken in de klassieke QDK voor meer informatie.

Zie voor meer informatie:

Geïntegreerde hybride kwantumcomputing

Ondersteund targets

Momenteel wordt het geïntegreerde hybride computingmodel in Azure Quantum ondersteund op Quantinuumtargets.

Quantinuum

Ondersteunde functie Notities
Klassieke lussen Alleen gebonden lussen
Willekeurige controlestroom Gebruik van if/else-vertakking
Meting van mid-circuit Maakt gebruik van klassieke registerresources
Qubit opnieuw gebruiken N.v.t.
Klassieke berekeningen in realtime Rekenkundig 32-bits geheel getal zonder teken
Maakt gebruik van klassieke registerresources

Aan de slag

Als u geïntegreerde hybride programmering wilt verkennen, raden we u aan de voorbeelden in dit artikel door te nemen of het tabblad Hybride kwantumcomputing te verkennen in de galerie Voorbeelden van de Azure Quantum-portal.

Geïntegreerde hybride taken indienen

Wanneer u een geïntegreerde hybride taak indient, moet u een target mogelijkheidsparameter toevoegen nadat u de targethebt opgegeven. Daarnaast worden geïntegreerde hybride programma's in Azure Quantum uitgevoerd en beheerd, net als gewone kwantumtaken. Elke taak heeft één taak-id en het resultaat is één histogram.

Belangrijk

Geïntegreerde hybride kwantumcomputing wordt momenteel niet ondersteund door de extensie Modern Quantum Development Kit (Modern QDK) voor Visual Studio Code, samen met andere onderdelen in de voorbeelden op deze pagina, zoals de I-kernelQ# , de %azure magic-opdracht of de qsharp.azure module. Als u geïntegreerde hybride taken wilt uitvoeren, gebruikt u microsoft Quantum Development Kit (klassieke QDK). Zie Doorgaan met werken in de klassieke QDK voor meer informatie.

IQ#

Wanneer u de I-kernelQ# in een Jupyter Notebook gebruikt, gebruikt u %azure.target-capability magic-opdracht met de AdaptiveExecution parameter .

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

Python + Q#

Wanneer u het Python-pakket qsharp gebruikt, gebruikt u de qsharp.azure.target_capability functie met de AdaptiveExecution parameter .

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

Azure CLI

Wanneer u de Azure CLI gebruikt om een taak te verzenden, voegt u de --target-capability parameter toe met de waarde AdaptiveExecution.

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

Geïntegreerde hybride taken verzenden binnen een sessie

U kunt meerdere geïntegreerde hybride taken binnen een sessie combineren met behulp van Q# en Python. Wanneer u een sessie verzendt, voegt u de targetCapability invoerparameter toe met de waarde 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

Zie Aan de slag met sessies voor meer informatie.

Notitie

Hoewel sessies beschikbaar zijn voor alle hardwareproviders voor kwantumcomputing, ziet u dat geïntegreerde hybride kwantumcomputingtaken momenteel worden ondersteund op Quantinuum targets.

De kosten van een geïntegreerde hybride taak schatten

U kunt de kosten van het uitvoeren van een geïntegreerde hybride taak op Quantinuum-hardware schatten door deze eerst op een emulator uit te voeren.

Na een geslaagde uitvoering op de emulator:

  1. Selecteer Taakbeheer in uw Azure Quantum-werkruimte.
  2. Selecteer de taak die u hebt verzonden.
  3. Selecteer in het pop-upvenster Taakdetailsde optie Kostenraming om weer te geven hoeveel eHQC's (Quantinuum-emulatortegoeden) zijn gebruikt. Dit getal wordt rechtstreeks omgezet in het aantal HQCs (Quantinuum quantum credits) dat nodig is om de taak uit te voeren op Quantinuum-hardware.

Kostenraming

Notitie

Met Quantinuum wordt het hele circuit uitgeschreven en worden de kosten voor alle codepaden berekend, ongeacht of ze voorwaardelijk worden uitgevoerd of niet.

Geïntegreerde hybride voorbeelden

In de volgende voorbeelden ziet u de huidige functieset voor geïntegreerde hybride computing.

  • Een verstrengelde GHZ-status controleren
  • Herhaling van drie qubits
  • Iteratieve faseschatting

Vereisten

  • Als u geen gebruik hebt van Azure Quantum, hebt u een Azure-abonnement en een Azure Quantum-werkruimte nodig om de voorbeelden uit te voeren op kwantumhardware. Zie Een Azure Quantum-werkruimte maken voor meer informatie.
  • VS Code en de Quantum Development Kit installatie in uw lokale omgeving. Zie De instellen Quantum Development Kitvoor meer informatie.
  • Zorg ervoor dat VS Code de nieuwste versie van de Quantum Development Kit (0.27.258160) heeft.
    • Selecteer in VS Code Ctrl + Shift + X en zoek naar 'Microsoft Quantum Development Kit'.

De voorbeelden in dit artikel zijn ingesteld om te worden uitgevoerd in Visual Studio (VS) Code en gebruiken de ingebouwde Azure-opdrachtregelinterface (CLI) om de taak naar Azure Quantum te verzenden. Als u de Jupyter Notebook versie van deze en andere voorbeelden wilt uitvoeren, meldt u zich aan bij uw Azure Portal werkruimte en bekijkt u de voorbeelden op het tabblad Hybride kwantumcomputing in de galerie Voorbeelden. U kunt het notebook uitvoeren in de cloud of het downloaden en lokaal uitvoeren.

Zie Problemen met geïntegreerde hybride oplossen om problemen met geïntegreerde hybride programma's op te lossen.

In dit voorbeeld ontdekt u hoe u klassieke en kwantuminstructies combineert in hetzelfde programma, allemaal volledig verwerkt door de back-end van kwantumcomputing.

Functies om rekening mee te houden over dit voorbeeld:

  • De lus- en qubitmetingen vinden plaats terwijl de qubits coherent blijven.
  • De routine combineert klassieke en kwantumberekeningsbewerkingen.
  • U hoeft niet te leren programmeren voor gespecialiseerde hardware met hoge prestaties die naast de QPU wordt uitgevoerd (zoals FPGA's).
  • Als u een equivalent programma uitvoert zonder de geïntegreerde hybride functies, moet elk tussenliggend meetresultaat worden geretourneerd en vervolgens de naverwerking van de gegevens worden uitgevoerd.

Een VS Code-project maken

  1. Maak in VS Code een nieuw Q# zelfstandig consoletoepassingsproject met de naam CheckGHZ.

    1. Selecteer Opdrachtpallet weergeven >>Q#: Nieuwe project > zelfstandige consoletoepassing maken
  2. Vervang de configuratie in CheckGHZ.csproj door het volgende:

    <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. Vervang de code in Program.qs door het volgende:

    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. Maak vanuit een terminalvenster in VS Code verbinding met uw Azure Quantum-werkruimte en stel de standaardresources in.

    az login
    

    Notitie

    Uw Azure-abonnements-id, resourcegroep en werkruimtenaam kunnen worden weergegeven in het terminalvenster nadat u zich hebt aangemeld door az quantum workspace list uit te voeren. U kunt ze ook vinden in de Azure Portal op de pagina Overzicht van uw Azure Quantum-werkruimte.

    az account set --subscription <MySubscriptionID>
    
    az quantum workspace set --resource-group <MyResourceGroup> --workspace <MyWorkspace> --location <MyLocation>
    
  5. Verzend de taak en bekijk de resultaten. Voor deze uitvoering worden ongeveer 10,65 eHQC's (quantinuum-emulatorfactureringseenheden) gebruikt

    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]
    

GHZ-uitvoer

Volgende stappen

Gedistribueerde hybride computing