Skip to main content
IBM Quantum Platform

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
    
Tip

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:

Output of the previous code cell

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 = 3

Seleccione 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_id

Output:

'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 Serverless
  • INITIALIZING: El programa remoto se está iniciando; esto incluye la configuración del entorno remoto y la instalación de dependencias
  • RUNNING: El programa se está ejecutando. En esta etapa, si tiene salidas print() en su programa, puede recuperar los registros utilizando job.logs()
  • DONE: El programa ha finalizado y puede recuperar los datos almacenados en save_result() con job.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'
Tip

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_jobs

Output:

[<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
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.