Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
Puede enviar programas Qiskit para que se ejecuten en Azure Quantum targets con el Kit de desarrollo de Microsoft Quantum (QDK). También puede ejecutar programas Qiskit en la máquina local con el simulador disperso integrado de QDK. El QDK admite la versión 1 y la versión 2 de Qiskit.
En este artículo, aprenderá a ejecutar programas Qiskit con la biblioteca de QDK Python desde un cuaderno de Jupyter Notebook en Visual Studio Code (VS Code).
Nota:
Es un procedimiento recomendado ejecutar el programa cuántico en un simulador target antes de enviar un trabajo para que se ejecute en un equipo targetcuántico. Cada proveedor de Azure Quantum ofrece uno o varios simuladores targetsgratuitos.
Requisitos previos
Para enviar trabajos de Qiskit a Azure Quantum y ejecutar programas Qiskit en el simulador disperso local, debe tener lo siguiente:
Un área de trabajo de Azure Quantum en la suscripción de Azure. Para crear un área de trabajo, consulte Creación de un área de trabajo de Azure Quantum.
Un entorno local Python (versión 3.10 o posterior) con Python y Pip instalado.
Visual Studio Code (VS Code) con Python y Jupyter extensiones instaladas.
La biblioteca
qdkPython con los extrasazureyqiskit, y el paqueteipykernel.pip install --upgrade "qdk[azure,qiskit]" ipykernel
Enviar un trabajo a Azure Quantum en tu área de trabajo de target Quantum
Para enviar un programa Qiskit para que se ejecute en Azure Quantum target, siga estos pasos:
En VS Code, abra el menú Ver y elija Paleta de comandos.
Introduzca y seleccione Crear: Nuevo Jupyter Notebook. Se abre un archivo vacío de Jupyter Notebook en una nueva pestaña.
En la primera celda del cuaderno, escriba un circuito Qiskit. Por ejemplo, use el circuito siguiente:
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()Conéctese al área de trabajo de Azure Quantum.
from qdk.azure import Workspace workspace = Workspace(resource_id="") # Add the resource ID of your workspaceObtenga los proveedores del área de trabajo que pueden ejecutar programas Qiskit e imprima los disponibles targets para cada proveedor.
from qdk.azure.qiskit import AzureQuantumProvider provider = AzureQuantumProvider(workspace) for backend in provider.backends(): print("- " + backend.name)Establezca el backend de Azure Quantum con el target al que desea enviar su trabajo. Por ejemplo, el código siguiente configura un back-end para ejecutar el programa en el simulador de Rigetti:
backend = provider.get_backend('rigetti.sim.qvm')Ejecute el programa en Azure Quantum target y obtenga los resultados. El código siguiente ejecuta 1,000 ejecuciones de tu programa en el target especificado y almacena los resultados.
job = backend.run(circuit, shots=1000) result = job.result() print(result)
Examen de los resultados del trabajo
El result objeto contiene información sobre los resultados del trabajo, como el resultado de medición de cada toma, y recuentos totales y probabilidades de cada medida posible.
Para crear un histograma de resultados de medición, pase su circuito al método get_counts y, a continuación, pase los recuentos a la función plot_histogram del módulo qiskit.visualization. El código siguiente vuelve a formatear el counts objeto para mostrar todos los resultados de medición posibles:
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:
Para usar la plot_histogram función de Qiskit, debe instalar Matplotlib.
pip install matplotlib
Resultados de trabajos de Qiskit para programas con pérdida de qubits
Algunos tipos de hardware cuántico pueden experimentar pérdida de cúbits durante una ejecución de programa. Si se produce una pérdida de cúbits en cualquier momento durante una ejecución de un programa Qiskit, esa ejecución se elimina de los resultados del trabajo de Azure Quantum. Por ejemplo, si la pérdida de qubits se produce en 10 de cada 200 intentos, los resultados del trabajo tienen solo 190 recuentos totales de medición.
Los resultados sin procesar de todas las capturas, incluidas las capturas en las que se produjo la pérdida de cúbits, siguen estando disponibles en el results objeto . El código siguiente obtiene ambos conjuntos de resultados:
# 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)
En el caso de los trabajos o targets que no tienen pérdida de cúbits, los resultados predeterminados y los resultados sin procesar son idénticos.
Nota:
El memory atributo para los resultados del trabajo de Qiskit es una lista del resultado de medición de cada disparo.
Ejecución de un trabajo en el simulador disperso de QDK
El QDK incluye un simulador disperso integrado que puede usar para ejecutar programas Qiskit en el equipo local en lugar de enviar un trabajo a Azure Quantum. Para ejecutar un programa Qiskit en el simulador disperso, use QSharpBackend para crear una instancia de un objeto back-end.
from qsharp.interop.qiskit import QSharpBackend
backend = QSharpBackend()
job = backend.run(circuit)
counts = job.result().get_counts()
print(counts)