Ejecute su primera carga de trabajo de Qiskit Serverless de forma remota
El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos. Recomendamos utilizar estas versiones o versiones más recientes.
qiskit[all]~=1.4.0 qiskit-ibm-runtime~=0.36.1 qiskit-ibm-catalog~=0.4
Qiskit Serverless está siendo actualizado y sus características están cambiando rápidamente. Durante esta fase de desarrollo, encontrará las notas de la versión y la documentación más reciente en la página « Qiskit Serverless » (Notas de la versión y documentación) de GitHub.
Esta sección explora cómo usar qiskit-ibm-catalog para listar programas disponibles en Qiskit Serverless, pasar entradas a estos programas, ejecutarlos remotamente, comprobar su estado y recuperar resultados y registros.
Asegúrate de haber seguido los pasos descritos en «Escribe tu primer programa en Qiskit Serverless » antes de empezar.
Lista de programas disponibles
Puedes utilizar QiskitServerless.list() para obtener una lista de los programas disponibles que se pueden ejecutar con Qiskit Serverless. Esto incluye los archivos que se han subido anteriormente transpile_remote_serverless.
from qiskit_ibm_catalog import QiskitServerless
serverless = QiskitServerless()
next(
program
for program in serverless.list()
if program.title == "transpile_remote_serverless"
)Output:
QiskitFunction(transpile_remote_serverless)
Ejecuta un programa cargado y pasa entradas
En primer lugar, configura tus entradas. Su programa tiene tres entradas: circuits, backend, y optimization_level. Puedes utilizar random_circuit para crear 30 circuitos aleatorios:
from qiskit.circuit.random import random_circuit
qc_random = [(random_circuit(4, 4, measure=True, seed=i)) for i in range(10)]
qc_random[0].draw(output="mpl", idle_wires=False)Output:
A continuación, utilice QiskitRuntimeService y least_busy para seleccionar un backend:
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend.name)Establezca su nivel de optimización:
optimization_level = 3Seleccione su programa con serverless.load('PROGRAM_NAME'):
transpile_remote_serverless = serverless.load("transpile_remote_serverless")A continuación, pasa tus entradas y ejecútalo de forma pitónica de la siguiente manera:
job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend.name,
optimization_level=optimization_level,
)job.job_idOutput:
'118256c5-bbb0-4ea8-9e9f-51aac2220aef'
Comprobar estado de trabajo
Con tu Qiskit Serverless job_id, puedes comprobar el estado de los trabajos en ejecución. Esto incluye los siguientes estados:
QUEUED: El programa remoto está en la cola de Qiskit Serverless. La prioridad de la cola se basa actualmente en cuánto has usado Qiskit ServerlessINITIALIZING: El programa remoto se está iniciando; esto incluye la configuración del entorno remoto y la instalación de dependenciasRUNNING: El programa se está ejecutando. En esta etapa, si tiene salidasprint()en su programa, puede recuperar los registros utilizandojob.logs()DONE: El programa ha finalizado y puede recuperar los datos almacenados ensave_result()conjob.results()
También puede establecer estados de trabajo más detallados en Administrar recursos de computación y datos sin servidor de Qiskit.
job.status()Output:
'QUEUED'
Actualmente, la tabla IBM Quantum workloads sólo refleja las cargas de trabajo de Qiskit Runtime. Utilice job.status() para ver el estado actual de su carga de trabajo Qiskit Serverless.
¡Has ejecutado con éxito tu primer programa Qiskit Serverless!
Recuperar registros y resultados
Como ya se ha mencionado, una vez que un programa es RUNNING, puede utilizar job.logs() para recuperar los registros creados a partir de las salidas de print() :
logs = job.logs()
print(logs)Output:
No logs yet.
También puedes cancelar un trabajo en cualquier momento:
job.stop()Output:
'Job has been stopped.'
Una vez que un programa es DONE, puede utilizar job.results() para obtener el resultado almacenado en save_result():
# We can't get results from a cancelled job, so we'll fetch a completed one instead
completed_job = next(
job for job in serverless.jobs() if job.status() == "DONE"
)
completed_job.result()Output:
{'transpiled_circuits': [<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93eca64810>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5e5310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5d5310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec58b490>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec57d310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec535950>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec523c90>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec60a990>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5527d0>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec4152d0>]}
Enumera los trabajos ejecutados anteriormente con Qiskit Serverless
Puedes usar jobs() para listar todos los trabajos enviados a Qiskit Serverless:
old_jobs = serverless.jobs()
old_jobsOutput:
[<Job | 118256c5-bbb0-4ea8-9e9f-51aac2220aef>,
<Job | e9a36469-7d6b-4f00-bf91-78709ebdbbff>,
<Job | 4efd601b-8f61-4c8e-b14a-0b8a9c649dc0>,
<Job | 87cd22c7-8eb9-4606-bdb4-befe946e9e9b>,
<Job | be9a6dfd-0830-4250-aa60-acdd05bb8818>,
<Job | 479513dd-6a76-4c3e-ba49-bb21351b9a05>,
<Job | f9c20c31-be46-41b3-97ac-99f7be61f89e>,
<Job | 37fa2489-4449-4bfb-974e-9d9a9ec3cc21>,
<Job | b754c4e8-6817-48db-9bb9-74c151d6349a>,
<Job | 78bc6744-b417-48cb-8e01-59bb63bcc2be>]
Próximos pasos
- Explora las herramientas de computación y gestión de datos disponibles para tu programa, incluida la paralelización.