Saltar al contenido principal
Este proyecto está en fase beta. ¿Encontraste un error? Abre un issue en GitHub. ¿Tienes una pregunta o una idea? Pregunta en Discussions — ¡nos encantaría tu opinión!
¿Cómo es la calidad de la traducción en esta página?

Ejecuta tu primera carga de trabajo de Qiskit Serverless de forma remota

Versiones de paquetes

El código de esta página fue desarrollado con los siguientes requisitos. Se recomienda usar estas versiones o versiones más recientes.

qiskit[all]~=1.4.0
qiskit-ibm-runtime~=0.36.1
qiskit-ibm-catalog~=0.4
consejo

Qiskit Serverless se está actualizando y sus funcionalidades cambian rápidamente. Durante esta fase de desarrollo, encuentra las notas de la versión y la documentación más reciente en la página de Qiskit Serverless en GitHub.

Esta sección explora cómo usar qiskit-ibm-catalog para listar los programas disponibles en Qiskit Serverless, pasar entradas a esos programas, ejecutarlos de forma remota, verificar su estado y recuperar resultados y registros.

Asegúrate de haber seguido el flujo de trabajo en Escribe tu primer programa de Qiskit Serverless antes de comenzar.

Listar los programas disponibles​

Puedes usar QiskitServerless.list() para obtener una lista de los programas disponibles para ejecutar con Qiskit Serverless. Esto incluye el programa transpile_remote_serverless que subiste anteriormente.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit", "qiskit_ibm_catalog": "qiskit-ibm-catalog", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit_ibm_catalog import QiskitServerless

serverless = QiskitServerless()
next(
program
for program in serverless.list()
if program.title == "transpile_remote_serverless"
)
QiskitFunction(transpile_remote_serverless)

Ejecutar un programa subido y pasar entradas​

Primero, configura tus entradas. Tu programa tiene tres entradas: circuits, backend y optimization_level. Puedes usar 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)

Salida de la celda de código anterior

A continuación, usa 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)

Establece tu nivel de optimización:

optimization_level = 3

Selecciona tu 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 pytónica de la siguiente manera:

job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend.name,
optimization_level=optimization_level,
)
job.job_id
'118256c5-bbb0-4ea8-9e9f-51aac2220aef'

Verificar el estado del trabajo​

Con el job_id de Qiskit Serverless, 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 en la cola se basa actualmente en cuánto has usado Qiskit Serverless.

  • INITIALIZING: El programa remoto está iniciando; esto incluye la configuración del entorno remoto y la instalación de dependencias.

  • RUNNING: El programa está en ejecución. En esta etapa, si tu programa tiene salidas de print(), puedes recuperar los registros con job.logs().

  • DONE: El programa ha finalizado y puedes recuperar los datos almacenados en save_result() con job.results().

También puedes configurar estados de trabajo más detallados en Administrar recursos de cómputo y datos de Qiskit Serverless.

job.status()
'QUEUED'
# This cell is hidden from users, it checks the job status
assert _ in ["QUEUED", "INITIALIZING", "RUNNING", "DONE"] # noqa: F821
consejo

Actualmente, la tabla de cargas de trabajo de IBM Quantum solo refleja las cargas de trabajo de IBM Quantum Compute Service. Usa job.status() para ver el estado actual de tu carga de trabajo de Qiskit Serverless.

¡Has ejecutado con éxito tu primer programa de Qiskit Serverless!

Recuperar registros y resultados​

Como se mencionó antes, una vez que un programa está en estado RUNNING, puedes usar job.logs() para obtener los registros generados por las salidas de print():

logs = job.logs()
print(logs)
No logs yet.

En cualquier momento, también puedes cancelar un trabajo:

job.stop()
'Job has been stopped.'

Una vez que un programa está en estado DONE, puedes usar 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()
{'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>]}

Listar trabajos ejecutados anteriormente con Qiskit Serverless​

Puedes usar jobs() para listar todos los trabajos enviados a Qiskit Serverless:

old_jobs = serverless.jobs()
old_jobs
[<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​

Recomendaciones