Cómo crear un pipeline de inferencia por lotes en Azure ML: paso a paso
Este tutorial muestra cómo crear un pipeline de inferencia por lotes en Azure ML para procesar grandes ficheros CSV y generar predicciones de forma escalable. Un pipeline por lotes es útil cuando tienes muchos registros o quieres automatizar predicciones periódicas sin servicio en tiempo real.
Requisitos previos
- Cuenta Azure con suscripción y permisos para crear recursos.
- Workspace de Azure Machine Learning creado.
- Azure Machine Learning SDK for Python (azure-ai-ml) instalado localmente o en un Compute.
- Fichero CSV de prueba con las mismas columnas que el modelo espera.
- Modelo ya registrado en Azure ML (o un fichero model.pkl listo).
Paso 1: Preparar el entorno y dependencias
Explica por qué: garantizar que el SDK y las variables están configuradas evita errores comunes en la ejecución remota. A continuación, autenticamos y definimos el workspace.
pip install azure-ai-ml azure-identity pandas scikit-learn
from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential subscription_id = "" resource_group = "" workspace_name = "" ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace_name)
Paso 2: Empaquetar el script de inferencia
Explica por qué: el script define cómo leer los datos e invocar el modelo. Coloca un script mínimo que carga un modelo registrado y aplica predicciones a un CSV.
# ficheiro: score.py import os import pandas as pd import joblib def main(input_csv, output_csv): model_path = os.environ.get("MODEL_PATH", "model.pkl") model = joblib.load(model_path) df = pd.read_csv(input_csv) preds = model.predict(df) df['prediction'] = preds df.to_csv(output_csv, index=False) if __name__ == '__main__': import sys main(sys.argv[1], sys.argv[2])
Paso 3: Crear un componente que ejecute el script
Explica por qué: en los pipelines de Azure ML usamos componentes para empaquetar la ejecución y especificar requisitos (CPU, imagen, dependencias). Creamos un YAML simple o definimos el componente en Python.
from azure.ai.ml import command_component, Input, Output from azure.ai.ml.entities import Environment comp = command_component( name="batch-score-comp", description="Componente para inferencia batch a partir de CSV", inputs={"input_csv": Input(type="uri_file")}, outputs={"output_csv": Output(type="uri_file")}, code="./", # diretoria com score.py e environment.yml command="python score.py ${{inputs.input_csv}} ${{outputs.output_csv}}", environment=Environment(image="mcr.microsoft.com/azureml/base:latest", conda_file="environment.yml") ) ml_client.components.create_or_update(comp)
Paso 4: Registrar o referenciar el modelo
Explica por qué: el componente necesita acceso al fichero del modelo. Puedes registrar el modelo en el Workspace y montar/transferir para el job.
from azure.ai.ml.entities import Model model = ml_client.models.create_or_update( Model(path="./model.pkl", name="my-model", type="mlflow" ) )
Paso 5: Crear y enviar el job del pipeline por lotes
Explica por qué: un job encapsula la ejecución en un compute de destino y permite escalabilidad. Aquí configuramos un job simple que pasa el CSV de input y recibe el CSV de output.
from azure.ai.ml import Input, Output, command from azure.ai.ml.entities import AmlCompute # opcional: crear compute compute = AmlCompute(name="cpu-cluster", size="STANDARD_DS3_V2", min_instances=0, max_instances=2) ml_client.begin_create_or_update(compute).result() job = command( name="batch-inference-job", component=comp, inputs={ "input_csv": Input(type="uri_file", path="https://.blob.core.windows.net/data/input.csv")}, outputs={"output_csv": Output(type="uri_file", path="azureml://datastores/workspaceblobstore/paths/batch-output/output.csv")}, compute="cpu-cluster" ) returned_job = ml_client.jobs.create_or_update(job) ml_client.jobs.stream(returned_job.name)
Paso 6: Automatizar con triggers (opcional)
Explica por qué: para ejecuciones recurrentes puedes usar Azure Logic Apps o Azure Data Factory para desencadenar el job. El patrón común es llamar a la REST API de Azure ML para enviar el job cuando un fichero nuevo llega al Storage.
Verificar el resultado
Confirmación simple: consulta los logs del job con ml_client.jobs.stream(job.name) y verifica el fichero de output en el datastore/Blob. El CSV de salida debe tener la columna 'prediction' con valores generados.
Conclusión
Has creado un pipeline de inferencia por lotes en Azure ML, desde empaquetar el script hasta enviar el job y verificar los resultados. Próximos pasos: añadir logging estructurado, gestionar versiones del modelo y usar paralelismo para ficheros muy grandes. Consejo: prueba localmente con un subconjunto de datos antes de subir al compute remoto — ¿cuál es el mayor fichero CSV que tienes para probar?