Så här skickar du Qiskit-program till Azure Quantum med QDK

Du kan skicka Qiskit-program som ska köras på Azure Quantum targets med Microsoft Quantum Development Kit (QDK). Du kan också köra Qiskit-program på din lokala dator med QDK:s inbyggda sparse-simulator. QDK stöder både version 1 och version 2 av Qiskit.

I den här artikeln får du lära dig hur du kör Qiskit-program med QDK-biblioteket Python från en Jupyter Notebook i Visual Studio Code (VS Code).

Kommentar

Det är en bra idé att köra kvantprogrammet på en simulator target innan du skickar ett jobb som ska köras på en kvantdator target. Varje Azure Quantum-provider erbjuder en eller flera kostnadsfria simulatorer targets.

Förutsättningar

Om du vill skicka Qiskit-jobb till Azure Quantum och köra Qiskit-program på den lokala glesa simulatorn måste du ha följande:

  • En Azure Quantum-arbetsyta i din Azure-prenumeration. Information om hur du skapar en arbetsyta finns i Skapa en Azure Quantum-arbetsyta.

  • En lokal Python miljö (version 3.10 eller senare) med Python och Pip installerat.

  • Visual Studio Code (VS Code) med Python och Jupyter-tilläggen installerade.

  • Biblioteket qdkPython med azure extrafunktionerna och qiskitipykernel paketet.

    pip install --upgrade "qdk[azure,qiskit]" ipykernel
    

Skicka ett jobb till Azure Quantum target i din Quantum-arbetsyta

Följ dessa steg för att skicka ett Qiskit-program som ska köras på ett Azure Quantum target:

  1. Öppna menyn Visa i VS Code och välj Kommandopalett.

  2. Ange och välj Skapa: Ny Jupyter Notebook. En tom Jupyter Notebook-fil öppnas på en ny flik.

  3. I den första cellen i anteckningsboken skriver du en Qiskit-krets. Använd till exempel följande krets:

    from qiskit import QuantumCircuit
    
    # Create a Quantum circuit that acts on the q register
    circuit = QuantumCircuit(3, 3)
    circuit.name = "Qiskit Sample - 3-qubit GHZ circuit"
    circuit.h(0)
    circuit.cx(0, 1)
    circuit.cx(1, 2)
    circuit.measure([0, 1, 2], [0, 1, 2])
    
    # Print out the circuit
    circuit.draw()
    
  4. Anslut till din Azure Quantum-arbetsyta.

    from qdk.azure import Workspace 
    
    workspace = Workspace(resource_id="") # Add the resource ID of your workspace
    
  5. Hämta leverantörerna från din arbetsyta som kan köra Qiskit-program och skriva ut de tillgängliga targets för varje leverantör.

    from qdk.azure.qiskit import AzureQuantumProvider
    
    provider = AzureQuantumProvider(workspace)
    
    for backend in provider.backends():
        print("- " + backend.name)
    
  6. Ange Azure Quantum-backend-tjänsten med den target som du vill skicka ditt jobb till. Följande kod konfigurerar till exempel en serverdel för att köra programmet på Rigetti-simulatorn:

    backend = provider.get_backend('rigetti.sim.qvm')
    
  7. Kör programmet på Azure Quantum target och få resultatet. Följande kod kör 1 000 bilder av programmet på den angivna target koden och lagrar resultatet:

    job = backend.run(circuit, shots=1000)
    
    result = job.result()
    print(result)
    

Granska jobbresultatet

Objektet result innehåller information om dina jobbresultat, till exempel mätresultatet för varje skott, samt totalt antal och sannolikheter för varje möjlig mätning.

Om du vill skapa ett histogram med mätresultat skickar du kretsen till get_counts metoden och skickar sedan antalet till plot_histogram funktionen från modulen qiskit.visualization . Följande kod formaterar counts om objektet för att visa alla möjliga mätresultat:

from qiskit.visualization import plot_histogram

print("Job ID:", job.job_id())

counts = result.get_counts(circuit)
print('Counts:', counts)

# Reformat counts to include all possible measurement outcomes, even those with zero counts
full_counts = {format(n, "03b"): 0 for n in range(8)}
full_counts.update(counts)

plot_histogram(full_counts)

Kommentar

Om du vill använda plot_histogram funktionen från Qiskit måste du installera Matplotlib.

pip install matplotlib

Qiskit-jobbresultat för program med qubitförlust

Vissa typer av kvantmaskinvara kan uppleva kvantbitsförlust under en programkörning. Om kvantbitsförlust uppstår när som helst under en mätning för ett Qiskit-program, tas den mätningen bort från resultaten av Azure Quantum-jobbet. Om kvantbitsförlust till exempel inträffar i 10 av 200 skott har jobbresultaten bara 190 totala måttantal.

De råa resultaten för alla skott, inklusive skott där qubitförlust inträffade, är fortfarande tillgängliga i results objektet. Följande kod hämtar båda resultatuppsättningarna:

# Get results only for shots without qubit loss
print('Counts:', result.results[0].data.counts)
print('Probabilities:', result.results[0].data.probabilities)
print('Memory:', result.results[0].data.memory)

# Get the raw total shot results
print('Raw counts:', result.results[0].data.raw_counts)
print('Raw probabilities:', result.results[0].data.raw_probabilities)
print('Raw memory:', result.results[0].data.raw_memory)

För jobb eller targets som inte har qubitförlust är standardresultaten och råresultaten identiska.

Kommentar

Attributet memory för Qiskit-jobbresultat är en lista över mätresultatet för varje skott.

Köra ett jobb i QDK-sparse-simulatorn

QDK innehåller en inbyggd sparse-simulator som du kan använda för att köra Qiskit-program på din lokala dator i stället för att skicka ett jobb till Azure Quantum. Om du vill köra ett Qiskit-program på den glesa simulatorn använder du QSharpBackend för att skapa en instans av ett serverdelsobjekt.

from qsharp.interop.qiskit import QSharpBackend

backend = QSharpBackend()
job = backend.run(circuit)
counts = job.result().get_counts()
print(counts)

Nästa steg