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 installeraazure-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# .
I VS Code väljer du Visa > kommandopalett och väljer Skapa: Ny Jupyter Notebook.
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 .
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" )
Klicka på + Kod för att lägga till en ny cell i anteckningsboken och importera
qsharp
Python SDK.import qsharp
Välj valfritt kvantum target . I det här exemplet använder du IonQ-simulatorn som target.
target = workspace.get_targets("ionq.simulator")
Välj profilens konfigurationertarget, antingen
Base
,Adaptive_RI
ellerUnrestricted
.qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
Kommentar
Adaptive_RI
target profiljobb stöds för närvarande på Quantinuum targets. Mer information finns i Integrerad hybridberäkning av kvantberäkning.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; }
Sedan skapar du en session. Anta att du vill köra
GenerateRandomBit
åtgärden tre gånger, så du användertarget.submit
för att skicka Q# åtgärden medtarget
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.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.