Como criar um pipeline de inferência em batch em Azure ML: passo a passo
Este tutorial mostra como criar um pipeline de inferência em batch em Azure ML para processar grandes ficheiros CSV e gerar predições de forma escalável. Um pipeline em batch é útil quando tens muitos registos ou queres automatizar predições periódicas sem serviço em tempo real.
Pré-requisitos
- Conta Azure com subscrição e permissões para criar recursos.
- Workspace do Azure Machine Learning criado.
- Azure Machine Learning SDK for Python (azure-ai-ml) instalado localmente ou num Compute.
- Ficheiro CSV de teste com as mesmas colunas que o modelo espera.
- Modelo já registado no Azure ML (ou um ficheiro model.pkl pronto).
Passo 1: Preparar o ambiente e dependências
Explica porquê: garantir que o SDK e as variáveis estão configuradas evita erros comuns na execução remota. A seguir, autenticamos e definimos o 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)
Passo 2: Empacotar o script de inferência
Explica porquê: o script define como ler os dados e invocar o modelo. Coloca um script mínimo que carrega um modelo registado e aplica predições a um 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])
Passo 3: Criar um componente que execute o script
Explica porquê: nos pipelines do Azure ML usamos componentes para empacotar a execução e especificar requisitos (CPU, imagem, dependências). Criamos um YAML simples ou definimos o componente em 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 inferência 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)
Passo 4: Registar ou referenciar o modelo
Explica porquê: o componente precisa de acesso ao ficheiro do modelo. Podes registar o modelo no Workspace e montar/transferir para o job.
from azure.ai.ml.entities import Model model = ml_client.models.create_or_update( Model(path="./model.pkl", name="my-model", type="mlflow" ) )
Passo 5: Criar e submeter o job de pipeline em batch
Explica porquê: um job encapsula a execução numa compute alvo e permite escalabilidade. Aqui configuramos um job simples que passa o CSV de input e recebe o CSV de output.
from azure.ai.ml import Input, Output, command from azure.ai.ml.entities import AmlCompute # opcional: criar 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)
Passo 6: Automatizar com triggers (opcional)
Explica porquê: para execuções recorrentes podes usar Azure Logic Apps ou Azure Data Factory para desencadear o job. O padrão comum é chamar a REST API do Azure ML para submeter o job quando um ficheiro novo chega ao Storage.
Verificar o resultado
Confirmação simples: vê os logs do job com ml_client.jobs.stream(job.name) e verifica o ficheiro de output no datastore/Blob. O CSV de saída deve ter a coluna 'prediction' com valores gerados.
Conclusão
Criaste um pipeline de inferência em batch em Azure ML, desde empacotar o script até submeter o job e verificar os resultados. Próximos passos: adicionar logging estruturado, gerir versões do modelo e usar paralelismo para ficheiros muito grandes. Dica: testa localmente com um subconjunto de dados antes de subir para o compute remoto — qual é o maior ficheiro CSV que tens para testar?