Calcolo quantistico interattivo: sessioni
Questo articolo illustra l'architettura dell'elaborazione quantistica interattiva, nota anche come sessioni e come creare una nuova sessione.
In questo modello di calcolo quantistico ibrido, la risorsa di calcolo client può essere spostata nel cloud, causando una latenza inferiore e la possibilità di ripetere l'esecuzione del circuito quantistico con parametri diversi. I processi possono essere raggruppati logicamente in una sessione e i processi in tale sessione possono essere classificati in ordine di priorità su processi non sessione. Sebbene gli stati qubit non siano persistenti tra processi, una sessione consente tempi di coda più brevi per i processi e problemi di esecuzione più lunghi.
Prerequisiti
Per creare una sessione, sono necessari i prerequisiti seguenti:
Un account Azure con una sottoscrizione attiva. Se non si dispone di un account Azure, registrarsi gratuitamente e iscriversi per una sottoscrizione con pagamento in base al consumo.
Un'area di lavoro di Azure Quantum. Per altre informazioni, vedere Creare un'area di lavoro di Azure Quantum.
Ambiente Python con Python e Pip installato.
Pacchetto Azure Quantum
azure-quantum
. Se si vuole usare Qiskit o Cirq, è necessario installare ilazure-quantum
pacchetto con i tag [qiskit] o [cirq].pip install --upgrade azure-quantum[qiskit]
Che cos'è una sessione?
Una sessione è un raggruppamento logico di uno o più processi inviati a un singolo targetoggetto . Ogni sessione ha un ID univoco associato a ogni processo in tale sessione.
Le sessioni consentono di organizzare più processi di calcolo quantistico con la possibilità di eseguire codice classico tra processi quantistici. Sarà possibile eseguire algoritmi complessi per organizzare e tenere traccia dei singoli processi di calcolo quantistico.
Uno scenario utente chiave in cui è possibile combinare i processi in una sessione è parametrizzato algoritmi quantistici in cui l'output di un processo di calcolo quantistico informa i parametri del processo di calcolo quantistico successivo. Gli esempi più comuni di questo tipo di algoritmo sono Variational Quantum Eigensolvers (VQE) e Quantum Approximate Optimization Algorithms (QAOA).
Hardware supportato
Le sessioni sono supportate in tutti i provider hardware di calcolo quantistico, attualmente IonQ, Quantinuum e Rigetti. In alcuni casi, i processi inviati all'interno di una sessione vengono classificati in ordine di priorità nella coda di tale target. Per altre informazioni, vedere Comportamento di destinazione.
Introduzione alle sessioni
Le sessioni vengono gestite con Python e possono essere create per qualsiasi programma quantistico QIR, inclusi Q#, Qiskit e programmi Cirq.
In questo esempio viene illustrato come creare una sessione con Q# codice inline usando un Jupyter Notebook in Visual Studio Code. È anche possibile creare sessioni usando un programma Python che richiama un programma adiacente Q# .
Nota
Le sessioni vengono gestite con Python, anche quando si esegue Q# codice inline.
In VS Code selezionare Visualizza > riquadro comandi e selezionare Crea: Nuovo Jupyter Notebook.
In alto a destra, VS Code rileverà e visualizzerà la versione di Python e l'ambiente Python virtuale selezionato per il notebook. Se sono presenti più ambienti Python, potrebbe essere necessario selezionare un kernel usando il selettore kernel in alto a destra. Se non è stato rilevato alcun ambiente, vedere Jupyter Notebooks in VS Code per informazioni sulla configurazione.
Nella prima cella del notebook eseguire
import azure.quantum workspace = azure.quantum.Workspace( resource_id = "", # add your resource ID location = "", # add your location, for example "westus" )
Fare clic su + Codice per aggiungere una nuova cella nel notebook e importare
qsharp
Python SDK.import qsharp
Selezionare il quantistico scelto target . In questo esempio si usa il simulatore IonQ come target.
target = workspace.get_targets("ionq.simulator")
Selezionare le configurazioni del target profilo,
Base
oUnrestricted
.qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Unrestricted
Scrivere il Q# programma. Ad esempio, il programma seguente Q# genera un bit casuale. Per illustrare l'uso di argomenti di input, questo programma accetta un intero,
n
, e una matrice di angoli, comeangle
input.%%qsharp open Microsoft.Quantum.Measurement; open Microsoft.Quantum.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; }
Successivamente, si crea una sessione. Si supponga di voler eseguire
GenerateRandomBit
l'operazione tre volte, quindi si usatarget.submit
per inviare l'operazione con itarget
dati e ripetere il Q# codice tre volte, in uno scenario reale, è possibile inviare programmi diversi anziché lo stesso codice.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]
Importante
Quando si passano argomenti come parametri al processo, vengono formattati nell'espressione Q# quando si chiama
qsharp.compile
. Ciò significa che è necessario essere attenti a formattare gli argomenti come Q# oggetti. In questo esempio, poiché le matrici in Python sono già stampate come [item0, item1, ...], gli argomenti di input corrispondono alla Q# formattazione. Per altre strutture di dati Python potrebbe essere necessario più gestire per ottenere i valori stringa inseriti nell'oggetto Q# in modo compatibile.Dopo aver creato una sessione, è possibile usare
workspace.list_session_jobs
per recuperare un elenco di tutti i processi nella sessione. Per altre informazioni, vedere Come gestire le sessioni.
Sessioni di monitoraggio
È possibile usare il pannello Gestione processi nell'area di lavoro Quantum per visualizzare tutti gli elementi inviati di primo livello, incluse sessioni e singoli processi che non sono associati a alcuna sessione.
- Selezionare il pannello Gestione processi nell'area di lavoro Quantum.
- Identificare i processi di tipo Sessione. In questa visualizzazione è possibile visualizzare l'ID univoco di una sessione in id colonna e monitorare il relativo stato. Gli stati di una sessione sono:
- Attesa: i processi all'interno della sessione vengono eseguiti.
- Esito positivo: la sessione è stata completata correttamente.
- TimeOut: se non viene inviato alcun nuovo processo all'interno della sessione per 10 minuti, tale sessione viene interrotta. Per altre informazioni, vedere Timeout sessione.
- Errore: se un processo all'interno di una sessione ha esito negativo, la sessione termina e segnala lo stato Non riuscito. Per altre informazioni, vedere Criteri di errore del processo all'interno delle sessioni.
- Fare clic sul nome di una sessione per altri dettagli.
- È possibile visualizzare l'elenco di Tutti i processi all'interno della sessione e monitorare lo stato.
Comportamento di destinazione
Ogni provider hardware quantistico definisce le proprie euristiche per gestire al meglio la priorità dei processi all'interno di una sessione.
Quantinuum
Se si sceglie di inviare processi all'interno di una sessione a quantinuum target, la sessione avrà accesso esclusivo all'hardware purché i processi in coda entro un minuto dall'altro. In seguito, i processi verranno accettati e gestiti con la logica di accodamento e priorità standard.
Contenuti correlati
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per