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

APLICÁVEL A:Extensão CLI do Azure ml v2 (atual)SDK Python azure-ai-ml v2 (atual)

Azure Machine Learning fornece várias maneiras de enviar trabalhos de treinamento de ML. Neste artigo, você aprenderá a enviar trabalhos usando os seguintes métodos:

  • CLI do Azure extensão para machine learning: a extensão ml, também conhecida como CLI v2.
  • Python SDK v2 para Azure Machine Learning.
  • API REST: a API na qual a CLI e o SDK são criados.

Pré-requisitos

Para usar o SDK:

Clonar o repositório de exemplos

Os trechos de código neste artigo são baseados em exemplos no repositório GitHub Azure Machine Learning. Para clonar o repositório em 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 a confirmação mais recente no repositório, o que reduz o tempo para concluir a operação.

Os comandos restantes neste artigo pressupõem que você esteja executando no azureml-examples diretório.

Trabalho de exemplo

Os exemplos neste artigo usam o conjunto de dados da flor íris para treinar um modelo do MLFlow.

Treinar na nuvem

Ao treinar na nuvem, você deve se conectar ao seu workspace Azure Machine Learning e selecionar um recurso de computação para executar o trabalho de treinamento.

Conectar-se ao espaço de trabalho

Dica

Use as guias a seguir para selecionar o método que você deseja usar para treinar um modelo. Selecionar uma guia alterna automaticamente todas as guias deste artigo para a mesma guia. Você pode selecionar outra guia a qualquer momento.

Para se conectar ao workspace, você precisa de parâmetros de identificador – uma assinatura, um grupo de recursos e um nome de workspace. Utilize esses detalhes no MLClient do namespace azure.ai.ml para obter um identificador do Workspace do Azure Machine Learning necessário. Para autenticar, use a autenticação padrão do Azure. Para obter mais informações sobre como configurar credenciais e se conectar a um workspace, consulte esta example.

#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 conexão imprimindo o nome do workspace:

print(ml_client.workspace_name)

Criar um recurso de computação para treinamento

Nota

Para experimentar a computação sem servidor, ignore esta etapa e prossiga para Enviar o trabalho de treinamento.

Um cluster de computação Azure Machine Learning é um recurso de computação totalmente gerenciado que você pode usar para executar o trabalho de treinamento. Nos exemplos a seguir, você cria 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 o cluster de computação existe:

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

Enviar a tarefa de treinamento

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

Nota

Para usar a computação sem servidor, exclua 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",
)

Envie 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, você configurou:

  • code - caminho em que o código para executar o comando está localizado.
  • command - comando que precisa ser executado.
  • environment – o ambiente necessário para executar o script de treinamento. Neste exemplo, use um ambiente selecionado ou pronto fornecido pelo Azure Machine Learning chamado AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest. Você também pode utilizar ambientes personalizados especificando uma imagem base do Docker e definindo um arquivo yaml do conda sobre ela.
  • inputs – dicionário de entradas usando pares nome-valor para o comando. A chave é um nome para a entrada dentro do contexto do trabalho e o valor é o valor de entrada. Referencie entradas no command usando a expressão ${{inputs.<input_name>}}. Para usar arquivos ou pastas como entradas, use a Input classe. Para obter mais informações, consulte expressões SDK e CLI v2.

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

Quando você envia o trabalho, o serviço retorna uma URL para o status do trabalho no Estúdio do Azure Machine Learning. Use a UI do Studio para exibir o progresso da tarefa. Você também pode usar returned_job.status para verificar o status atual do trabalho.

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

Importante

Os trabalhos de treinamento e comando do Azure Machine Learning não dão suporte a Registros de Contêiner do Azure que usam rótulos personalizados para nomes de domínio. Trabalhos que fazem referência a esse registro podem falhar durante a inicialização devido a erros de pull de imagem ou resolução de ambiente. Para evitar esse problema:

  • Utilize o formato padrão de servidor de logon (<registry-name>.azurecr.io) para o ACR.
  • Ao criar o registro, defina o escopo do rótulo de nome de domínio como Não seguro.

Monitorar o trabalho de treinamento

Aguarde até que o trabalho de treinamento seja concluído antes de registrar o modelo. O status do trabalho passa por StartingPreparingRunningCompleted.

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

ml_client.jobs.stream(returned_job.name)

Como alternativa, verifique o status da tarefa programaticamente:

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

Registrar o modelo treinado

Os exemplos a seguir demonstram como registrar um modelo em seu workspace Azure Machine Learning.

Dica

O trabalho de treinamento retorna uma name propriedade. Use esse nome como parte do caminho de acesso 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 foi registrado:

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

Limpar os recursos

Se você não planeja usar o cluster de computação para mais trabalhos de treinamento, exclua-o para parar de incorrer em encargos. O cluster continuará sendo cobrado enquanto existir, mesmo com zero nó em execução.

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

Solucionar erros comuns

Erro Cause Resolução
ImportError: No module named 'azure.identity' Pacote azure-identity não encontrado Execute pip install azure-identity
DefaultAzureCredential failed Não conectado ao Azure Execute az login primeiro, ou defina variáveis de ambiente para autenticação de entidade de serviço
ComputeNotFound Nome do cluster incompatível ou cluster excluído Verificar o nome do cluster e verificar o estado de provisionamento
EnvironmentNotFound Ambiente selecionado obsoleto ou indisponível Listar ambientes disponíveis com ml_client.environments.list() e usar uma versão atual
QuotaExceeded Cota de vCPU insuficiente para o tamanho da VM Solicitar um aumento de cota ou usar um tamanho de VM menor

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

Próximas etapas

Agora que você tem um modelo treinado, saiba como implantá-lo usando um ponto de extremidade online.

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

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