Skip to main content
IBM Quantum Platform

Empieza a utilizar « Qiskit Functions »

Los usuarios de los planes Premium, Flex y « On-Prem » (a través de la API de IBM Quantum Platform ) pueden empezar a utilizar « IBM » Qiskit Functions de forma gratuita, o bien adquirir una licencia a través de uno de los socios que han aportado una función al catálogo.


Solicita una prueba gratuita de la aplicación de terceros « Qiskit Functions »

Para solicitar una prueba gratuita, entra en Qiskit Functions Catalog y consulta el panel de detalles. AccessGroupIdHaz clic Request a free trial y rellena los datos que solicita el socio de Functions, incluyendo el « IBM Cloud »:

  1. Accede a « IBM Cloud » IAM.
  2. Comprueba si cumples los requisitos.
    • Cambia tu cuenta en la barra de menú de la cabecera por una que tenga el siguiente formato: XXXXXXX - [Organization Name]
    • Asegúrate de que la organización sea la misma que la asociada a tu cuenta Premium.
    • Si ves «Cuenta [de] [tu nombre]», significa que estás utilizando tu cuenta personal, que no da derecho al acceso premium.
  3. Busca tu ID de grupo de acceso.
    • Haz clic en el nombre de un grupo.
    • Haz clic en «Detalles ».
    • Copia el ID del grupo de acceso. Debería empezar por AccessGroup-.

Instala el cliente de Qiskit Functions Catalog

  1. Para empezar a utilizar Qiskit Functions, instala el cliente IBM Qiskit Functions Catalog :

    pip install qiskit-ibm-catalog
    
  2. Obtenga su clave API desde el panel de control IBM Quantum Platform y active su entorno virtual Python. Consulta las instrucciones de instalación si aún no tienes configurado un entorno virtual.

    Si trabajas en un entorno de confianza de Python (como un ordenador portátil personal o una estación de trabajo), utiliza el save_account() método para guardar tus credenciales localmente. ( Pasa al siguiente paso si no estás utilizando un entorno de confianza, como un ordenador compartido o público, para autenticarte en IBM Quantum Platform.)

    save_account()Para utilizarlo, ejecuta python en tu terminal y, a continuación, escribe lo siguiente:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    
    QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")

    Escribe exit(). A partir de ahora, cada vez que necesites autenticarte en el servicio, podrás introducir tus credenciales de la siguiente manera:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    catalog = QiskitFunctionsCatalog()

    Por ejemplo:

    # Load saved credentials
    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    
    catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
  3. Evita ejecutar código en un equipo no fiable o en un entorno externo de la nube Python para minimizar los riesgos de seguridad. Si necesita utilizar un entorno no seguro (por ejemplo, en un ordenador público), cambie su clave API después de cada uso eliminándola en la página de claves API IBM Cloud para reducir el riesgo. Para obtener más información, consulta el tema «Gestión de claves API de usuario ». Para inicializar el servicio en esta situación, utiliza este código:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    
    # After using the following code, delete your API key on the
    # IBM Quantum Platform home dashboard
    catalog = QiskitFunctionsCatalog(token="<YOUR_API_KEY>") # Use the 44-character
    # API_KEY you created and saved from the IBM Quantum Platform Home dashboard
    Protege tu clave API

    Nunca incluyas tu clave en el código fuente, en scripts de « Python » ni en archivos de cuaderno. Cuando compartas código con otras personas, asegúrate de que tu clave API no esté incrustada directamente en el script Python. En su lugar, comparte el script sin la clave y proporciona instrucciones para configurarlo de forma segura.

    Si compartes tu clave accidentalmente con alguien o la incluyes en un sistema de control de versiones como Git, revoca inmediatamente tu clave eliminándola en la página de claves de la API IBM Cloud para reducir el riesgo. Para obtener más información, consulta el tema «Gestión de claves API de usuario ».


Enumera las funciones a las que puedes acceder

Una vez que te hayas autenticado, podrás ver la lista de funciones de Qiskit Functions Catalog a las que tienes acceso:

catalog.list()

Output:

[QiskitFunction(qunova/hivqe-chemistry),
 QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),
 QiskitFunction(algorithmiq/tem),
 QiskitFunction(qedma/qesem),
 QiskitFunction(multiverse/singularity),
 QiskitFunction(ibm/circuit-function),
 QiskitFunction(q-ctrl/optimization-solver),
 QiskitFunction(colibritd/quick-pde),
 QiskitFunction(q-ctrl/performance-management),
 QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]

Comprobar los backends disponibles y su capacidad

Antes de ejecutar una función, comprueba a qué backends puede acceder tu instancia y cuánta capacidad de ejecución te queda. run() realiza las mismas comprobaciones antes de enviar un trabajo, lo que te permite detectar a tiempo problemas de capacidad y del backend.

Enumera los backends a los que puede acceder tu instancia. Los resultados se almacenan en caché por catálogo. Pulsa refresh_cache=True para actualizarlas.

catalog.backends()

Busca un único backend y comprueba el acceso:

catalog.backend("ibm_fez")

También puedes obtener el backend con el menor número de trabajos pendientes:

catalog.least_busy()

Utiliza usage() para ver la autonomía restante. Devuelve usage_remaining_seconds y usage_limit_reached para la instancia activa.

catalog.usage()

Por ejemplo, comprueba la capacidad restante antes de ejecutar una serie larga de trabajos y detén el proceso si no queda suficiente para terminarla:

usage = catalog.usage()
if usage["usage_remaining_seconds"] < 600:
    raise SystemExit("Not enough capacity remaining to start this batch.")

Ejecutar funciones habilitadas

catalog.load("<provider/function-name>")Una vez que se ha instanciado un objeto de catálogo, puedes seleccionar una función utilizando:

ibm_cf = catalog.load("ibm/circuit-function")

Cada función de Qiskit tiene entradas, opciones y salidas personalizadas. Consulta las páginas de documentación específicas de la función que deseas ejecutar para obtener más información. Por defecto, todos los usuarios solo pueden ejecutar una tarea de función a la vez:

job = ibm_cf.run(
    pubs=[(circuit, observable)],
    instance=instance,
    backend_name=backend_name,  # E.g. "ibm_fez"
)

job.job_id

Output:

'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'
Tip

run() comprueba la capacidad restante y el acceso al servidor antes de enviar el trabajo. Si tu instancia ha agotado su capacidad o no se puede acceder al backend que has especificado, run() se genera un error de inmediato, en lugar de dejar que la tarea falle en la cola. Cuando el nivel de capacidad es bajo, run() emite una advertencia. Pulsa suppress_low_usage_warning=True para silenciarlo.

job = ibm_cf.run(
    pubs=[(circuit, observable)],
    instance=instance,
    backend_name=backend_name,  # E.g. "ibm_fez"
    suppress_low_usage_warning=True,
)

Comprobar estado de trabajo

job_idCon tu función de Qiskit, puedes comprobar el estado de los trabajos en ejecución. Esto incluye los siguientes estados:

  • QUEUED: El programa remoto se encuentra en la cola de funciones de Qiskit. La prioridad en la cola depende del uso que hayas hecho de Qiskit Functions.

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

  • RUNNING: El programa se está ejecutando. Esto también incluye varios estados más detallados, siempre que las funciones específicas lo permitan.

    • RUNNING: MAPPING: Actualmente, la función está asignando tus entradas clásicas a entradas cuánticas.
    • RUNNING: OPTIMIZING_FOR_HARDWARE: La función se está optimizando para la QPU seleccionada. Esto podría incluir la transpilación de circuitos, la caracterización de la QPU, la retropropagación de observables, etc.
    • RUNNING: WAITING_FOR_QPU: La función ha enviado un trabajo a Qiskit Runtime y está a la espera en la cola.
    • RUNNING: EXECUTING_QPU: La función tiene una tarea de « Qiskit Runtime » activa.
    • RUNNING: POST_PROCESSING: La función consiste en el posprocesamiento de los resultados, lo que puede incluir la corrección de errores, la conversión de resultados cuánticos a clásicos, etc.
  • DONE: El programa ya está listo y puedes recuperar los datos de los resultados con job.results().

  • ERROR: El programa ha dejado de funcionar debido a un problema. Utiliza job.result() para ver el mensaje de error.

  • CANCELED: El programa ha sido cancelado por un usuario, por el servicio o por el servidor.

    job.status()

    Output:

    'QUEUED'
    

Obtener resultados

DONEUna vez que se haya ejecutado un programa, puedes utilizar job.results() para obtener el resultado. Este formato de salida varía según cada función, así que asegúrate de seguir la documentación específica:

result = job.result()
print(result)

Output:

PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': True, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})

También puedes cancelar un trabajo en cualquier momento:

job.stop()

Output:

'Job has been stopped.'

Mostrar los trabajos de « Qiskit Functions » ejecutados anteriormente

Puedes utilizar jobs() para ver una lista de todos los trabajos enviados a Qiskit Functions :

old_jobs = catalog.jobs()
old_jobs

Output:

[<Job | f6c29f49-4d5f-4fff-aca6-2e9a115b9763>,
 <Job | 7f08c9d5-471b-4da2-92e7-4f2cb94c23a8>,
 <Job | 62fe9176-d1e5-467e-b2bd-7a3f3c7be4e5>,
 <Job | af525b2e-16b1-45a1-80bb-dbd94ce30258>,
 <Job | b95a7a57-c1ad-4958-b7ac-953e4e1ee824>,
 <Job | 7bfa33da-0f17-4e67-84b6-f556f7eeb436>,
 <Job | ca46c191-9eb9-4de6-bfa7-b60d7eb29b5e>,
 <Job | 6ac0ba93-3831-43fb-9fb9-760da2225e06>,
 <Job | f0e38071-060d-47e8-988d-9cc1f69358e3>,
 <Job | 629cf110-e490-4675-8a07-f6d298d166b0>]

catalog.get_job_by_id()Si ya dispones del ID de un trabajo concreto, puedes recuperarlo con:

# First, get the most recent job that has been executed.
latest_job = old_jobs[0]

# We can also get that same job with get_job_by_id
job_by_id = catalog.get_job_by_id(latest_job.job_id)

# Verify that the job is the same using both retrieval methods.
assert job_by_id.job_id == latest_job.job_id

# Print the job_id for this job.
print(job_by_id.job_id)

Output:

f6c29f49-4d5f-4fff-aca6-2e9a115b9763

Recuperar mensajes de error

Si el estado de un programa es ERROR, utiliza job.error_message() para obtener el mensaje de error de la siguiente manera:

job.error_message()

Output:

qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'

Próximos pasos

Recomendaciones
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.