Saltar a contenido

Azure Quantum loader#

Introducción#

El Azure Quantum loader permite que un solver acceda al target de Azure Quantum seleccionado para un job de QCentroid sin hardcodear credenciales de Azure, configuración de workspace, resource IDs ni nombres de target en el código fuente.

Usa AzureLoader cuando tu solver envíe jobs directamente a targets de Azure Quantum. Usa AzureQiskitLoader cuando tu solver trabaje con Azure Quantum a través de un backend compatible con Qiskit.

Import#

from QCentroidLoaders import AzureLoader

Para backends de Azure Quantum compatibles con Qiskit:

from QCentroidLoaders import AzureQiskitLoader

Obtener el target seleccionado#

Llama a AzureLoader.get_target() cuando tu solver esté listo para enviar el job:

target = AzureLoader.get_target()

En el runtime de la plataforma, este target se resuelve a partir del proveedor y backend seleccionados por el usuario al lanzar el job.

Cuando se ejecuta localmente sin inicialización de la plataforma, AzureLoader.get_target() devuelve un target local ligero de desarrollo para Azure. Este fallback no es un emulador completo de Azure Quantum.

Para backends de Azure Quantum compatibles con Qiskit, usa:

backend = AzureQiskitLoader.get_target()

Cuando se ejecuta localmente sin inicialización de la plataforma, AzureQiskitLoader.get_target() devuelve un simulador local de Qiskit.

Patrón de ejemplo#

qcentroid.py
from typing import Any
import logging

from QCentroidLoaders import AzureLoader

logger = logging.getLogger("qcentroid-user-log")
logging.basicConfig()
logger.setLevel(logging.INFO)

def run(
    input_data: dict[str, Any],
    solver_params: dict[str, Any],
    extra_arguments: dict[str, Any],
) -> dict[str, Any]:
    logger.info("Preparing Azure Quantum job...")

    target = AzureLoader.get_target()
    logger.info(f"Using Azure Quantum target: {target}")

    shots = solver_params.get("shots", 100)

    # Build the provider-specific program or circuit here.
    # The exact submission call depends on the Azure Quantum package and
    # target type used by your solver.
    program = build_program(input_data, solver_params)

    logger.info("Sending job to Azure Quantum...")
    job = target.submit(program, shots=shots)

    logger.info("Obtaining job result...")
    result = job.get_results()

    logger.info(f"Result from Azure Quantum target: {result}")

    return {
        "status": "ok",
        "provider": "azure-quantum",
        "target": str(target),
        "result": result,
    }

def build_program(
    input_data: dict[str, Any],
    solver_params: dict[str, Any],
) -> Any:
    # Replace this placeholder with the program format expected by the
    # Azure Quantum target used by your solver.
    return input_data

Ejecución en la plataforma#

Cuando este solver se ejecuta en QCentroid:

  1. El usuario selecciona el solver y el target de Azure Quantum en el dashboard o la API.
  2. La plataforma inyecta las credenciales de proveedor y la configuración de workspace necesarias.
  3. AzureLoader.get_target() devuelve el target configurado.
  4. El solver envía el job y devuelve el resultado a QCentroid.

Ejecución local#

Para desarrollo local, instala el paquete local de loaders desde el repositorio público de QCentroid Loaders cuando esté disponible:

pip install git+<loaders-repository-url>

Después configura tus credenciales de Azure Quantum y ajustes de workspace como se describe en ese repositorio si quieres ejecutar localmente contra un target remoto de Azure Quantum. Si no inicializas el loader con un target remoto, el loader devuelve un target local de desarrollo.

Buenas prácticas#

  • Mantén shots y otras opciones del target configurables mediante solver_params.
  • Valida el programa generado localmente o contra un simulador antes de ejecutarlo en hardware de pago.
  • Evita registrar credenciales de Azure, secretos de workspace, subscription IDs si son sensibles o tokens de proveedor.

Páginas relacionadas#

Vista general de QCentroid Loaders

Buenas prácticas de control de costes de Azure Quantum