Buenas prácticas#
Recopilación de recomendaciones para sacar el máximo partido a la plataforma, desarrollar solvers robustos y gestionar eficientemente los recursos de GAIA.
Desarrollo del solver#
Empieza desde la plantilla, no desde cero.
El repositorio ya contiene qcentroid.py y requirements.txt con la estructura correcta. Modifica estos archivos en lugar de crearlos de nuevo para evitar errores de firma o de nombre.
No modifiques la firma de run().
La plataforma llama exactamente a run(input_data, solver_params, extra_arguments). Cambiar el nombre de la función o el número de parámetros impedirá que el solver se ejecute.
Añade logs desde el primer momento. No esperes a que algo falle. Registra los valores de entrada, los pasos intermedios y los tiempos de ejecución desde el principio. En un entorno de experimentación, la visibilidad interna del solver vale más que unas líneas de código extra.
logger.info(f"input_data: {input_data}")
logger.info(f"Paso intermedio completado en {elapsed:.2f}s")
Los mensajes aparecen en la pestaña Execution logs de la página de detalle del job.
Mide el tiempo de ejecución. Incluye mediciones de tiempo en las partes críticas de tu algoritmo desde el principio. Te ayudará a detectar cuellos de botella y a estimar el coste antes de escalar a hardware más caro.
import time
start = time.time()
# proceso a medir
logger.info(f"Tiempo: {time.time() - start:.2f}s")
Deja escalar las excepciones bloqueantes.
Evita capturar excepciones de forma global (except Exception en el nivel raíz). Si una excepción se captura y no se relanza, la plataforma no puede detectar que el solver ha fallado y no mostrará la traza en la página de detalles del job. Usa try/except con alcance limitado para errores esperados y controlados.
Gestión de dependencias#
Mantén el requirements.txt lo más abierto posible.
Incluye solo las librerías que tu código importa directamente y sin versiones fijas innecesarias:
ortools
numpy
Evita hacer pip freeze y copiar el resultado: ese archivo incluye cientos de dependencias transitivas con versiones fijas que pueden entrar en conflicto en el entorno de la plataforma.
No uses pip install como solución permanente.
Puedes instalar paquetes en tu entorno local para probar, pero esa instalación no se aplica en la plataforma. Toda dependencia necesaria debe estar en requirements.txt.
Flujo de trabajo en la plataforma#
Ejecuta jobs con frecuencia, no solo al final. Lanza jobs cada vez que tengas una versión estable de tu algoritmo. Detectar problemas pronto es mucho más barato que hacerlo después de semanas de desarrollo.
Lanza el Build después de cada push. La plataforma no recoge los cambios directamente, solo del repositorio Git. Después de cada push, ve a Solvers > Repositories y lanza el proceso Build para que la plataforma use la versión más reciente.
Haz commit y push al servidor Git con regularidad. El repositorio Git es tu copia de seguridad del código — commitea y haz push con frecuencia para no perder trabajo.
Revisa el historial de builds. Si un job falla de forma inesperada, comprueba primero el historial de builds del repositorio. Un build fallido (entrypoint no encontrado, error de dependencias) puede ser la causa de errores que parecen de ejecución.
Gestión de créditos y costes#
Empieza con simuladores y datasets pequeños. Antes de usar hardware cuántico real o recursos de mayor coste, valida tu solver con simuladores y datos reducidos. Esto te permitirá detectar errores rápidamente y tener una estimación realista del coste y el tiempo de ejecución antes de escalar a recursos más costosos.
Consulta el coste estimado del solver antes de lanzar. El coste estimado de cada ejecución se muestra en la página de detalle del solver. Revísalo antes de lanzar jobs intensivos.
Revisa el saldo de créditos antes de ejecuciones intensivas. Ve al menú de usuario > Credits para ver el saldo disponible. Si un job no tiene créditos suficientes asignados al usuario, la ejecución será rechazada.
Redistribuye créditos si es necesario. Cualquier miembro de la organización puede reasignar créditos desde menú de usuario > Credits.
