Treinar modelos com Azure Machine Learning CLI, SDK e API REST

APLICA-SE A: extensão CLI do Azure ml v2 (atual)Python SDK azure-ai-ml v2 (atual)

O Azure Machine Learning oferece múltiplas formas de submeter trabalhos de formação em ML. Neste artigo, aprende como submeter ofertas de trabalho utilizando os seguintes métodos:

  • CLI do Azure extensão para aprendizagem automática: A extensão ml, também conhecida como CLI v2.
  • Python SDK v2 para Azure Machine Learning.
  • API REST: A API sobre a qual o CLI e o SDK são construídos.

Pré-requisitos

Para usar o SDK:

Clonar o repositório de exemplos

Os excertos de código neste artigo baseiam-se em exemplos no Azure Machine Learning exemplos GitHub repo. Para clonar o repositório para o seu ambiente de desenvolvimento, use o seguinte comando:

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples

Dica

Use --depth 1 para clonar apenas o commit mais recente do repositório, o que reduz o tempo para completar a operação.

Os comandos restantes neste artigo assumem que estás a correr a partir do azureml-examples diretório.

Exemplo de emprego

Os exemplos neste artigo utilizam o conjunto de dados de flores de íris para treinar um modelo MLFlow.

Treina na nuvem

Quando treina na cloud, deve ligar-se ao seu espaço de trabalho Azure Machine Learning e selecionar um recurso de computação para executar o trabalho de treino.

Conectar-se ao espaço de trabalho

Dica

Utilize as seguintes abas para selecionar o método que pretende usar para treinar um modelo. Selecionar um separador muda automaticamente todos os separadores deste artigo para o mesmo separador. Pode selecionar outro separador a qualquer momento.

Para se ligar ao espaço de trabalho, precisa de parâmetros identificadores – uma subscrição, grupo de recursos e nome do espaço de trabalho. Use estes detalhes no MLClient do espaço de nomes azure.ai.ml para obter um acesso ao espaço de trabalho do Azure Machine Learning requerido. Para autenticar, use a autenticação padrão do Azure. Para mais informações sobre como configurar credenciais e ligar-se a um espaço de trabalho, consulte este c0.

#import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

#Enter details of your Azure Machine Learning workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace = '<AZUREML_WORKSPACE_NAME>'

#connect to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)

Verifique a ligação imprimindo o nome do espaço de trabalho:

print(ml_client.workspace_name)

Criar um recurso computacional para treino

Nota

Para experimentar computação serverless, ignore este passo e prossiga para Enviar a tarefa de treino.

Um cluster de computação Azure Machine Learning é um recurso de computação totalmente gerido que pode usar para executar o trabalho de treino. Nos exemplos seguintes, cria-se um cluster de computação chamado cpu-cluster.

from azure.ai.ml.entities import AmlCompute

# specify aml compute name.
cpu_compute_target = "cpu-cluster"

try:
    ml_client.compute.get(cpu_compute_target)
except Exception:
    print("Creating a new cpu compute target...")
    compute = AmlCompute(
        name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
    )
    ml_client.compute.begin_create_or_update(compute).result()

Verifique se existe o cluster de computação:

cpu_cluster = ml_client.compute.get("cpu-cluster")
print(f"Compute '{cpu_cluster.name}' provisioning state: {cpu_cluster.provisioning_state}")

Submeter o trabalho de formação

Para executar este script, use um command que executa o script main.py Python localizado sob ./sdk/python/jobs/single-step/lightgbm/iris/src/. Submetes o comando como job para Azure Machine Learning.

Nota

Para usar computação serverless, apague compute="cpu-cluster" neste código.

from azure.ai.ml import command, Input

# define the command
command_job = command(
    code="./src",
    command="python main.py --iris-csv ${{inputs.iris_csv}} --learning-rate ${{inputs.learning_rate}} --boosting ${{inputs.boosting}}",
    environment="AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest",
    inputs={
        "iris_csv": Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/iris.csv",
        ),
        "learning_rate": 0.9,
        "boosting": "gbdt",
    },
    compute="cpu-cluster",
)

Submeter o trabalho na mesma sessão de Python:

# submit the command
returned_job = ml_client.jobs.create_or_update(command_job)
# get a URL for the status of the job
returned_job.studio_url

Nos exemplos anteriores, configurou:

  • code - caminho onde se encontra o código para executar o comando.
  • command - comando que precisa de correr.
  • environment - o ambiente necessário para executar o script de treino. Neste exemplo, utilize um ambiente curado ou pronto fornecido por Azure Machine Learning chamado AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest. Também pode usar ambientes personalizados especificando uma imagem Docker base e, em complemento, um ficheiro YAML do Conda.
  • inputs - dicionário de entradas usando pares de nomes-valores para o comando. A chave é um nome para a entrada dentro do contexto do trabalho e o valor é o valor da entrada. Faça referência às entradas no command usando a expressão ${{inputs.<input_name>}}. Para usar ficheiros ou pastas como entradas, use a Input classe. Para mais informações, consulte SDK e expressões CLI v2.

Para mais informações, consulte a documentação de referência.

Quando submetes o trabalho, o serviço devolve uma URL para o estado do trabalho no Estúdio do Azure Machine Learning. Usa a interface do estúdio para ver o progresso do trabalho. Também podes usar returned_job.status para verificar o estado atual do trabalho.

print(f"Studio URL: {returned_job.studio_url}")

Importante

Os trabalhos de treino e de comandos do Azure Machine Learning não suportam os Registos de Contentores do Azure (ACR) que utilizam rótulos de domínio personalizados. Trabalhos que fazem referência a tal registro podem falhar durante o início devido a extração de imagem ou erros de resolução do ambiente. Para evitar este problema:

  • Use o formato padrão do servidor de login (<registry-name>.azurecr.io) para o seu ACR.
  • Ao criar o registo, defina o âmbito da etiqueta do nome de domínio para Inseguro.

Monitorizar o trabalho de formação

Espera que o trabalho de formação termine antes de registares o modelo. O estado da tarefa passa por StartingPreparingRunningCompleted.

Use ml_client.jobs.stream() para monitorizar a saída do trabalho em tempo real:

ml_client.jobs.stream(returned_job.name)

Alternativamente, verifique o estado do emprego programaticamente:

returned_job = ml_client.jobs.get(returned_job.name)
print(f"Job status: {returned_job.status}")

Registar o modelo treinado

Os exemplos seguintes demonstram como registar um modelo no seu espaço de trabalho do Azure Machine Learning.

Dica

O trabalho de formação devolve uma name propriedade. Use este nome como parte do caminho para o modelo.

from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes

run_model = Model(
    path="azureml://jobs/{}/outputs/artifacts/paths/model/".format(returned_job.name),
    name="run-model-example",
    description="Model created from run.",
    type=AssetTypes.MLFLOW_MODEL
)

ml_client.models.create_or_update(run_model)

Verifique se o modelo estava registado:

registered_model = ml_client.models.get("run-model-example", version="1")
print(f"Model '{registered_model.name}' version {registered_model.version} registered successfully.")

Limpeza de recursos

Se não planeias usar o cluster de computação para mais trabalhos de treino, elimina-o para evitar que tenhas cobranças. O cluster continua a faturar enquanto existe, mesmo com zero nós a funcionar.

ml_client.compute.begin_delete("cpu-cluster").wait()

Solucionar erros comuns

Erro Motivo Resolução
ImportError: No module named 'azure.identity' Pacote em falta azure-identity Executar pip install azure-identity
DefaultAzureCredential failed Sem sessão iniciada no Azure Execute az login primeiro ou defina variáveis de ambiente para autenticação com entidade de serviço
ComputeNotFound Incompatibilidade no nome do cluster ou cluster eliminado Verifique o nome do cluster e verifique o estado de provisionamento
EnvironmentNotFound Ambiente curado obsoleto ou indisponível Liste os ambientes disponíveis com ml_client.environments.list() e utilize uma versão atual
QuotaExceeded Quota insuficiente de vCPU para o tamanho da VM Peça um aumento de quota ou use uma VM de tamanho menor

Para problemas específicos do ambiente, consulte Resolução de problemas de compilações de imagens de ambiente.

Próximos passos

Agora que tens um modelo treinado, aprende a implementá-lo usando um endpoint online.

Para mais exemplos, consulte o repositório Azure Machine Learning exemplos GitHub.

Para mais informações sobre os comandos CLI do Azure, classes SDK Python ou APIs REST utilizadas neste artigo, consulte a seguinte documentação de referência: