QCentroid Loaders#
Introducción#
QCentroid Loaders son paquetes auxiliares ligeros que permiten que un solver se ejecute sobre proveedores de hardware cuántico de terceros con cambios mínimos en el código fuente del solver.
Cuando un job se ejecuta en QCentroid Platform, la plataforma ya sabe qué proveedor, dispositivo, backend, access token y opciones específicas del proveedor ha seleccionado el usuario desde el dashboard o la API. Un loader hace que esa configuración de runtime esté disponible para el código de tu solver sin hardcodear credenciales ni destinos de proveedor en tu repositorio.
Usa un loader cuando tu solver necesite enviar trabajo a un proveedor soportado, como IBM Quantum a través de Qiskit, Amazon Braket o Azure Quantum.
Qué proporcionan los loaders#
Los loaders están diseñados para mantener la configuración del proveedor fuera del código de tu algoritmo:
- Inyección segura de tokens: los access tokens y credenciales los proporciona la plataforma en runtime.
- Resolución del target seleccionado: el loader devuelve el backend, dispositivo o target seleccionado para el job.
- Parámetros del proveedor: los hiperparámetros soportados del proveedor pueden pasarse mediante la configuración del job en la plataforma.
- Huella mínima: el código del solver solo importa el loader y solicita el target configurado cuando necesita enviar el job.
- Fallback local: cuando un loader se usa localmente sin inicialización de la plataforma, devuelve un simulador local o target local de desarrollo cuando está disponible.
El solver sigue siendo responsable de construir el algoritmo, preparar circuitos o programas, enviar el job al proveedor, leer el resultado y devolver la salida esperada por QCentroid.
Paquete y API#
El paquete de Python se llama QCentroidLoaders.
Los imports públicos para los proveedores documentados actualmente son:
from QCentroidLoaders import AzureLoader
from QCentroidLoaders import AzureQiskitLoader
from QCentroidLoaders import BraketLoader
from QCentroidLoaders import QiskitLoader
Todos los loaders siguen el mismo patrón mínimo:
target = Loader.get_target()
La plataforma inicializa el loader correspondiente antes de que tu solver llame a run(). Normalmente, tu solver solo necesita llamar a get_target().
Los loaders se implementan como singletons por clase de loader. Una vez inicializado un loader en un runtime, las llamadas posteriores a get_target() devuelven el mismo target configurado para esa clase.
Comportamiento en runtime#
En QCentroid Platform, el paquete QCentroidLoaders se instala automáticamente en el runtime del solver. El usuario no necesita añadir credenciales de proveedor al repositorio.
Para desarrollo local, QCentroid proporcionará un repositorio público de GitHub con la versión local de los loaders. Cuando esté disponible, instálalo en tu entorno de desarrollo desde ese repositorio:
pip install git+<loaders-repository-url>
Durante la ejecución local, los loaders no inicializados devuelven fallbacks locales cuando están soportados:
QiskitLoaderyAzureQiskitLoaderdevuelven un simulador local de Qiskit.BraketLoaderdevuelve elLocalSimulatorde Amazon Braket.AzureLoaderdevuelve un target local ligero de desarrollo para Azure.
Estos fallbacks están pensados para desarrollo y validación. No sustituyen las credenciales y targets de proveedor que QCentroid Platform inyecta durante la ejecución remota de jobs.
Punto de entrada del solver#
Los loaders se usan dentro del punto de entrada estándar qcentroid.py:
from typing import Any
def run(
input_data: dict[str, Any],
solver_params: dict[str, Any],
extra_arguments: dict[str, Any],
) -> dict[str, Any]:
# Build your algorithm, resolve the provider target with a loader,
# submit the job, and return the result.
return {"status": "ok"}
La plataforma llama a run() con:
input_data: el dataset o entrada inline seleccionada para el job.solver_params: parámetros del solver configurados por el usuario.extra_arguments: argumentos adicionales de ejecución pasados por la plataforma o la API.
Loaders soportados#
QCentroid soporta actualmente estas integraciones de loaders:
Buenas prácticas#
- No subas access tokens de proveedor, credenciales cloud ni secretos de workspace al repositorio de tu solver.
- Solicita el target del proveedor mediante el loader en runtime en lugar de hardcodear un backend o dispositivo.
- Mantén los hiperparámetros específicos del proveedor en
solver_paramso en la configuración del job de la plataforma cuando deban ser modificables por los usuarios. - Añade logs de ejecución con
logging.getLogger("qcentroid-user-log")para que los usuarios puedan inspeccionar el envío al proveedor y la gestión de resultados en la página de detalles del job.