Función de Circuit de IBM
Consulta la referencia de API
- Las Qiskit Functions son una función experimental disponible únicamente para usuarios del Plan Premium, Plan Flex y Plan On-Prem (a través de la API de IBM Quantum Platform) de IBM Quantum®. Están en estado de versión preliminar y pueden cambiar.
Descripción general
La función de Circuit de IBM® recibe PUBs abstractos como entradas y devuelve valores de expectación mitigados como salidas. Esta función de Circuit incluye un pipeline automatizado y personalizado para que los investigadores puedan centrarse en el descubrimiento de algoritmos y aplicaciones.
Descripción
Después de enviar tu PUB, tus circuitos abstractos y observables se transpilan automáticamente, se ejecutan en hardware y se post-procesan para devolver valores de expectación mitigados. Para ello, combina las siguientes herramientas:
- Qiskit Transpiler Service, incluida la selección automática de pases de transpilación heurísticos e impulsados por IA para traducir tus circuits abstractos a circuits ISA optimizados para el hardware
- Supresión y mitigación de errores necesarias para computación a escala utilitaria, incluyendo twirling de medición y de Gate, desacoplamiento dinámico, Twirled Readout Error eXtinction (TREX), Zero-Noise Extrapolation (ZNE) y Probabilistic Error Amplification (PEA)
- Qiskit Runtime Estimator, para ejecutar PUBs ISA en hardware y devolver valores de expectación mitigados
Primeros pasos
Autentícate con tu clave de API y selecciona la Qiskit Function de la siguiente manera. (Este fragmento asume que ya has guardado tu cuenta en tu entorno local.)
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
function = catalog.load("ibm/circuit-function")
Ejemplos
Para comenzar, prueba este ejemplo básico:
from qiskit.circuit.random import random_circuit
from qiskit_ibm_runtime import QiskitRuntimeService
# You can skip this step if you have a target backend, e.g.
# backend_name = "ibm_brisbane"
# You'll need to specify the credentials when initializing QiskitRuntimeService, if they were not previously saved.
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
pubs = [(circuit, observable)]
job = function.run(
# Use `backend_name=backend_name` if you didn't initialize a backend object
backend_name=backend.name,
pubs=pubs,
)
Consulta el estado de la carga de trabajo de tu Qiskit Function o recupera los resultados de la siguiente manera:
print(job.status())
result = job.result()
QUEUED
Los resultados tienen el mismo formato que un resultado de Estimator:
print(f"The result of the submitted job had {len(result)} PUB\n")
print(
f"The associated PubResult of this job has the following DataBins:\n {result[0].data}\n"
)
print(f"And this DataBin has attributes: {result[0].data.keys()}")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
The result of the submitted job had 1 PUB
The associated PubResult of this job has the following DataBins:
DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>))
And this DataBin has attributes: dict_keys(['evs', 'stds', 'ensemble_standard_error'])
The expectation values measured from this PUB are:
1.02116704805492
Ejemplos de nivel de mitigación
El siguiente ejemplo muestra cómo establecer el nivel de mitigación:
options = {"mitigation_level": 2}
job = function.run(backend_name=backend.name, pubs=pubs, options=options)
En el siguiente ejemplo, establecer el nivel de mitigación en 1 desactiva inicialmente la mitigación ZNE, pero establecer zne_mitigation en True sobreescribe la configuración relevante de mitigation_level.
options = {"mitigation_level": 1, "resilience": {"zne_mitigation": True}}
Ejemplo de salida
El siguiente fragmento de código describe el formato de PrimitiveResult (y el PubResult asociado).
print(f"The result of the submitted job had {len(result)} PUB")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
print(f"And the associated metadata is: \n{result[0].metadata}")
The result of the submitted job had 1 PUB
The expectation values measured from this PUB are:
1.02116704805492
And the associated metadata is:
{'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}
Obtener mensajes de error
Si el estado de tu carga de trabajo es ERROR, usa job.result() para obtener el mensaje de error y depurar el problema de la siguiente manera:
job = function.run(
backend_name="bad_backend_name", pubs=pubs, options=options
)
print(job.result())
Obtener soporte
Contacta con el soporte de IBM Quantum e incluye la siguiente información:
- ID del trabajo de Qiskit Function (
qiskit-ibm-catalog),job.job_id - Una descripción detallada del problema
- Cualquier mensaje o código de error relevante
- Pasos para reproducir el problema
Próximos pasos
- Prueba el tutorial Mitigación de errores con la función de Circuit de IBM.
- Visita la referencia de API para esta Qiskit Function.