Dela via


Kom igång med sessioner

Sessioner är en viktig funktion i hybrid kvantberäkning som gör att du kan gruppera flera kvantberäkningsjobb tillsammans.

Den här artikeln beskriver arkitekturen för sessioner inom hybridberäkning av kvantberäkning och hur du skapar en ny session.

Förutsättningar

För att skapa en session behöver du följande förutsättningar:

  • Ett Azure-konto med en aktiv prenumeration. Om du inte har något Azure-konto registrerar du dig kostnadsfritt och registrerar dig för en betala per användning-prenumeration.

  • En Azure Quantum-arbetsyta. Mer information finns i Skapa en Azure Quantum-arbetsyta.

  • En Python-miljö med Python och Pip installerade.

  • Azure Quantum-paketet azure-quantum . Om du vill använda Qiskit eller Cirq måste du installera azure-quantum paketet med taggarna [qiskit] eller [cirq].

    pip install --upgrade azure-quantum[qiskit] 
    

Vad är en session?

En session är en logisk gruppering av ett eller flera jobb som skickas till en enda target. Varje session har ett unikt ID kopplat till varje jobb i sessionen.

I sessioner kan klientberäkningsresursen flyttas till molnet, vilket resulterar i kortare svarstid och möjlighet att upprepa körningen av kvantkretsen med olika parametrar. Jobb kan grupperas logiskt i en session och jobben i den sessionen kan prioriteras framför icke-sessionsjobb. Även om kvantbitstillstånden inte bevaras mellan jobb, tillåter en session kortare kötider för jobb och problem som körs längre.

Med sessioner kan du organisera flera kvantberäkningsjobb med möjlighet att köra klassisk kod mellan kvantjobb. Du kommer att kunna köra komplexa algoritmer för att bättre organisera och spåra dina enskilda kvantberäkningsjobb.

Ett viktigt användarscenario där du kanske vill kombinera jobb i en session är parametriserade kvantalgoritmer där utdata från ett kvantberäkningsjobb informerar parametrarna för nästa kvantberäkningsjobb. De vanligaste exemplen på den här typen av algoritm är Variational Quantum Eigensolvers (VQE) och Quantum Approximate Optimization Algorithms (QAOA).

Maskinvara som stöds

Sessioner stöds på alla maskinvaruleverantörer för kvantberäkning. I vissa fall prioriteras jobb som skickas inom en session i kön för den target. Mer information finns i Target beteende.

Så här skapar du en session

Följ dessa steg för att skapa en session:

Det här exemplet visar hur du skapar en session med infogad kod med Q# hjälp av en Jupyter Notebook i Visual Studio Code. Du kan också skapa sessioner med hjälp av ett Python-program som anropar ett angränsande Q# program.

Kommentar

Sessioner hanteras med Python, även när infogad kod körs Q# .

  1. I VS Code väljer du Visa > kommandopalett och väljer Skapa: Ny Jupyter Notebook.

  2. I det övre högra hörnet identifierar och visar VS Code den version av Python och den virtuella Python-miljön som har valts för notebook-filen. Om du har flera Python-miljöer kan du behöva välja en kernel med hjälp av kernelväljaren längst upp till höger. Om ingen miljö har identifierats kan du läsa mer i Jupyter Notebooks i VS Code .

  3. I den första cellen i notebook-filen kör du

    import azure.quantum
    
    workspace = azure.quantum.Workspace(
        resource_id = "", # add your resource ID
        location = "", # add your location, for example "westus"
    )
    
  4. Klicka på + Kod för att lägga till en ny cell i anteckningsboken och importera qsharp Python SDK.

    import qsharp
    
  5. Välj valfritt kvantum target . I det här exemplet använder du IonQ-simulatorn som target.

    target = workspace.get_targets("ionq.simulator")
    
  6. Välj profilens konfigurationertarget, antingen Base, Adaptive_RIeller Unrestricted.

    qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
    

    Kommentar

    Adaptive_RItarget profiljobb stöds för närvarande på Quantinuum targets. Mer information finns i Integrerad hybridberäkning av kvantberäkning.

  7. Skriv ditt Q# program. Följande program genererar till exempel Q# en slumpmässig bit. För att illustrera användningen av indataargument tar det här programmet ett heltal, n, och en matris med vinklar, angle, som indata.

    %%qsharp
    import Std.Measurement.*;
    import Std.Arrays.*;
    
    operation GenerateRandomBits(n: Int, angle: Double[]) : Result[] {
       use qubits = Qubit[n]; // n parameter as the size of the qubit array
       for q in qubits {
           H(q);
       }
       R(PauliZ, angle[0], qubits[0]); // arrays as entry-points parameters
       R(PauliZ, angle[1], qubits[1]);
       let results = MeasureEachZ(qubits);
       ResetAll(qubits);
       return results;
    }
    
  8. Sedan skapar du en session. Anta att du vill köra GenerateRandomBit åtgärden tre gånger, så du använder target.submit för att skicka Q# åtgärden med target data och upprepar koden tre gånger – i ett verkligt scenario kanske du vill skicka olika program i stället för samma kod.

    angle = [0.0, 0.0]
    with target.open_session(name="Q# session of three jobs") as session:
        target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 1", shots=100) # First job submission
        angle[0] += 1
        target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 2", shots=100) # Second job submission
        angle[1] += 1
        target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 3", shots=100) # Third job submission
    
    session_jobs = session.list_jobs()
    [session_job.details.name for session_job in session_jobs]
    

    Viktigt!

    När argument skickas som parametrar till jobbet formateras de i uttrycket när du Q# anropar qsharp.compile. Det innebär att du måste vara noga med att formatera argumenten som Q# objekt. I det här exemplet, eftersom matriser i Python redan skrivs ut som [item0, item1, ...], matchar indataargumenten Q# formateringen. För andra Python-datastrukturer kan du behöva mer hantering för att få strängvärdena infogade Q# på ett kompatibelt sätt.

  9. När du har skapat en session kan du använda workspace.list_session_jobs för att hämta en lista över alla jobb i sessionen. Mer information finns i Hantera sessioner.

Target uppförande

Varje kvantmaskinvaruprovider definierar sina egna heuristiker för att bäst hantera prioriteringen av jobb inom en session.

Quantinuum

Om du väljer att skicka jobb inom en session till en Quantinuum targethar din session exklusiv åtkomst till maskinvaran så länge du köar jobb inom en minut från varandra. Därefter godkänns och hanteras dina jobb med standardlogik för köer och prioritering.