Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È possibile inviare programmi Qiskit per l'esecuzione in Azure Quantum targets con Microsoft Quantum Development Kit (QDK). È anche possibile eseguire programmi Qiskit nel computer locale con il simulatore sparse predefinito di QDK. QDK supporta sia la versione 1 che la versione 2 di Qiskit.
Questo articolo illustra come eseguire programmi Qiskit con la libreria QDK Python da un notebook jupyter in Visual Studio Code (VS Code).
Nota
È consigliabile eseguire il programma quantistico in un simulatore target prima di inviare un processo da eseguire in un computer targetquantistico. Ogni provider di Azure Quantum offre uno o più simulatori targetsgratuiti.
Prerequisiti
Per inviare processi Qiskit ad Azure Quantum e per eseguire programmi Qiskit nel simulatore sparse locale, è necessario disporre degli elementi seguenti:
Un'area di lavoro di Azure Quantum nella sottoscrizione di Azure. Per creare un'area di lavoro, vedere Creare un'area di lavoro di Azure Quantum.
Un ambiente locale Python (versione 3.10 o successiva) con Python e Pip installato.
Visual Studio Code (VS Code) con le estensioni Python e Jupyter installate.
La libreria
qdkPython con gli extraazureeqiskit, e il pacchettoipykernel.pip install --upgrade "qdk[azure,qiskit]" ipykernel
Inviare un'attività a un'istanza di Azure Quantum target nello spazio di lavoro Quantum
Per inviare un programma Qiskit da eseguire in azure Quantum target, seguire questa procedura:
In VS Code aprire il menu Visualizza e scegliere Riquadro comandi.
Inserire e selezionare Crea: Nuovo Jupyter Notebook. Viene aperto un file jupyter Notebook vuoto in una nuova scheda.
Nella prima cella del notebook scrivere un circuito Qiskit. Ad esempio, usare il circuito seguente:
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()Connettersi all'area di lavoro di Azure Quantum.
from qdk.azure import Workspace workspace = Workspace(resource_id="") # Add the resource ID of your workspaceOttieni i provider dallo spazio di lavoro che possono eseguire programmi Qiskit, e stampa i disponibili targets per ogni provider.
from qdk.azure.qiskit import AzureQuantumProvider provider = AzureQuantumProvider(workspace) for backend in provider.backends(): print("- " + backend.name)Configura il back-end di Azure Quantum con l'oggetto target al quale desideri inviare l'attività. Ad esempio, il codice seguente configura un back-end per eseguire il programma nel simulatore Rigetti:
backend = provider.get_backend('rigetti.sim.qvm')Eseguire il programma in Azure Quantum target e ottenere i risultati. Il codice seguente esegue 1.000 scatti del programma sull'oggetto specificato target e archivia i risultati:
job = backend.run(circuit, shots=1000) result = job.result() print(result)
Esamina i risultati del lavoro
L'oggetto result contiene informazioni sui risultati del tuo lavoro, come il risultato della misurazione per ogni singola misurazione, e i conteggi totali e le probabilità per ogni misurazione possibile.
Per creare un istogramma dei risultati della misurazione, passare il circuito al metodo get_counts e quindi passare i conteggi alla funzione plot_histogram dal modulo qiskit.visualization. Il codice seguente riformatta l'oggetto counts per visualizzare tutti i possibili risultati di misurazione:
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)
Nota
Per usare la plot_histogram funzione da Qiskit, è necessario installare Matplotlib.
pip install matplotlib
Risultati del processo Qiskit per i programmi con perdita di qubit
Alcuni tipi di hardware quantistico possono riscontrare perdite di qubit durante l'esecuzione di un programma. Se la perdita di qubit si verifica in qualsiasi momento durante uno scatto per un programma Qiskit, tale scatto viene rimosso dai risultati del processo di Azure Quantum. Ad esempio, se si verifica una perdita di qubit in 10 scatti su 200, i risultati del processo hanno solo 190 conteggi di misurazioni totali.
I risultati non elaborati per tutti gli scatti, inclusi gli scatti in cui si è verificata la perdita di qubit, sono ancora disponibili nell'oggetto results . Il codice seguente ottiene entrambi i set di risultati:
# 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)
Per i processi o targets che non hanno perdita di qubit, i risultati predefiniti e i risultati grezzi sono identici.
Nota
L'attributo memory per i risultati del processo Qiskit è un elenco del risultato della misurazione per ogni colpo.
Eseguire un processo nel simulatore di tipo sparse QDK
QDK include un simulatore sparse predefinito che è possibile usare per eseguire programmi Qiskit nel computer locale anziché inviare un processo ad Azure Quantum. Per eseguire un programma Qiskit nel simulatore di tipo sparse, usare QSharpBackend per creare un'istanza di un oggetto back-end.
from qsharp.interop.qiskit import QSharpBackend
backend = QSharpBackend()
job = backend.run(circuit)
counts = job.result().get_counts()
print(counts)