O Azure Machine Learning fornece várias maneiras de enviar trabalhos de treinamento de ML. Neste artigo, você aprenderá como enviar trabalhos usando os seguintes métodos:
Extensão da CLI do Azure para aprendizado de máquina: a ml extensão, 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.
Para usar as informações da API REST, você precisa dos seguintes itens:
Uma entidade de serviço em seu espaço de trabalho. As solicitações REST administrativas usam a autenticação da entidade de serviço.
Um token de autenticação da entidade de serviço. Siga as etapas em Recuperar um token de autenticação da entidade de serviço para recuperar esse token.
No PowerShell, curl é um alias para Invoke-WebRequest e curl -d "key=val" -X POST uri torna-se Invoke-WebRequest -Body "key=val" -Method POST -Uri uri.
Embora seja possível chamar a API REST do PowerShell, os exemplos neste artigo pressupõem que você esteja usando o Bash.
O utilitário jq para processar JSON. Este utilitário é usado para extrair valores dos documentos JSON que são retornados de chamadas de API REST.
Clone o repositório de exemplos
Os trechos de código neste artigo são baseados em exemplos no repositório GitHub de exemplos do Aprendizado de Máquina do Azure. Para clonar o repositório para seu ambiente de desenvolvimento, use o seguinte comando:
Use --depth 1 para clonar apenas a confirmação mais recente para o repositório, o que reduz o tempo para concluir a operação.
Exemplo de trabalho
Os exemplos neste artigo usam o conjunto de dados da flor da íris para treinar um modelo MLFlow.
Treine na nuvem
Ao treinar na nuvem, você deve se conectar ao seu espaço de trabalho do Azure Machine Learning e selecionar um recurso de computação que será usado para executar o trabalho de treinamento.
1. Conecte-se ao espaço de trabalho
Gorjeta
Use as guias abaixo para selecionar o método que deseja usar para treinar um modelo. Selecionar uma guia alternará automaticamente todas as guias neste artigo para a mesma guia. Você pode selecionar outra guia a qualquer momento.
Para se conectar ao espaço de trabalho, você precisa de parâmetros de identificador - uma assinatura, um grupo de recursos e um nome do espaço de trabalho. Você usará esses detalhes no MLClient namespace from para azure.ai.ml obter um identificador para o espaço de trabalho necessário do Azure Machine Learning. Para autenticar, use a autenticação padrão do Azure. Confira este exemplo para obter mais detalhes sobre como configurar credenciais e conectar-se a um espaço de trabalho.
#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)
Ao usar a CLI do Azure, você precisa de parâmetros de identificador - uma assinatura, um grupo de recursos e um nome de espaço de trabalho. Embora você possa especificar esses parâmetros para cada comando, também pode definir padrões que serão usados para todos os comandos. Use os comandos a seguir para definir valores padrão. Substitua <subscription ID>, <Azure Machine Learning workspace name>e <resource group> pelos valores para sua configuração:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
Os exemplos de API REST neste artigo usam $SUBSCRIPTION_ID, $RESOURCE_GROUP, $LOCATIONe $WORKSPACE espaços reservados. Substitua os espaços reservados pelos seus próprios valores da seguinte forma:
$SUBSCRIPTION_ID: Sua ID de assinatura do Azure.
$RESOURCE_GROUP: O grupo de recursos do Azure que contém seu espaço de trabalho.
$LOCATION: A região do Azure onde seu espaço de trabalho está localizado.
$WORKSPACE: O nome do seu espaço de trabalho do Azure Machine Learning.
$COMPUTE_NAME: O nome do cluster de computação do Azure Machine Learning.
O REST administrativo solicita um token de autenticação da entidade de serviço. Você pode recuperar um token com o seguinte comando. O token é armazenado na variável de $TOKEN ambiente:
O provedor de serviços usa o argumento para garantir a api-version compatibilidade. O api-version argumento varia de serviço para serviço. Defina a versão da API como uma variável para acomodar versões futuras:
API_VERSION="2022-05-01"
Quando você treina usando a API REST, os dados e os scripts de treinamento devem ser carregados em uma conta de armazenamento que o espaço de trabalho possa acessar. O exemplo a seguir obtém as informações de armazenamento para seu espaço de trabalho e as salva em variáveis para que possamos usá-las mais tarde:
Um cluster de computação do Azure Machine Learning é um recurso de computação totalmente gerenciado que pode ser usado para executar o trabalho de treinamento. Nos exemplos a seguir, um cluster de computação chamado cpu-compute é criado.
Embora uma resposta seja retornada após alguns segundos, isso indica apenas que a solicitação de criação foi aceita. Pode levar vários minutos para que a criação do cluster seja concluída.
Para executar esse script, você usará um command que executa main.py script Python localizado em ./sdk/python/jobs/single-step/lightgbm/iris/src/. O comando será executado enviando-o como um job para o Azure Machine Learning.
Nota
Para usar computação sem servidor, exclua compute="cpu-cluster" este código.
# 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 acima, você configurou:
code - caminho onde o código para executar o comando está localizado
command - comando que precisa ser executado
environment - o ambiente necessário para executar o guião de formação. Neste exemplo, usamos um ambiente com curadoria ou pronto fornecido pelo Azure Machine Learning chamado AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Usamos a versão mais recente deste ambiente usando a @latest diretiva. Você também pode usar ambientes personalizados especificando uma imagem docker base e especificando um conda yaml sobre ela.
inputs - dicionário de entradas usando pares de valor de nome para o comando. A chave é um nome para a entrada dentro do contexto do trabalho e o valor é o valor de entrada. As entradas são referenciadas no command uso da ${{inputs.<input_name>}} expressão. Para usar arquivos ou pastas como entradas, você pode usar 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, uma URL é retornada para o status do trabalho no estúdio do Azure Machine Learning. Use a interface do usuário do estúdio para exibir o progresso do trabalho. Você também pode usar returned_job.status para verificar o status atual do trabalho.
O az ml job create comando usado neste exemplo requer um arquivo de definição de trabalho YAML. O conteúdo do arquivo usado neste exemplo é:
Nota
Para usar computação sem servidor, exclua compute: azureml:cpu-cluster" este código.
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code: src
command: >-
python main.py
--iris-csv ${{inputs.iris_csv}}
inputs:
iris_csv:
type: uri_file
path: https://azuremlexamples.blob.core.windows.net/datasets/iris.csv
environment: azureml:AzureML-lightgbm-3.3@latest
compute: azureml:cpu-cluster
display_name: lightgbm-iris-example
experiment_name: lightgbm-iris-example
description: Train a LightGBM model on the Iris dataset.
No acima, você configurou:
code - caminho onde o código para executar o comando está localizado
command - comando que precisa ser executado
inputs - dicionário de entradas usando pares de valor de nome para o comando. A chave é um nome para a entrada dentro do contexto do trabalho e o valor é o valor de entrada. As entradas são referenciadas no command uso da ${{inputs.<input_name>}} expressão. Para obter mais informações, consulte Expressões SDK e CLI v2.
environment - o ambiente necessário para executar o guião de formação. Neste exemplo, usamos um ambiente com curadoria ou pronto fornecido pelo Azure Machine Learning chamado AzureML-lightgbm-3.3. Usamos a versão mais recente deste ambiente usando a @latest diretiva. Você também pode usar ambientes personalizados especificando uma imagem docker base e especificando um conda yaml sobre ela.
Para enviar o trabalho, use o seguinte comando. O ID de execução (nome) do trabalho de treinamento é armazenado na $run_id variável:
run_id=$(az ml job create -f jobs/single-step/lightgbm/iris/job.yml --query name -o tsv)
Você pode usar o ID de execução armazenado para retornar informações sobre o trabalho. O --web parâmetro abre a interface do usuário da Web do estúdio de Aprendizado de Máquina do Azure, onde você pode detalhar o trabalho:
az ml job show -n $run_id --web
Como parte do envio de trabalho, os scripts e dados de treinamento devem ser carregados em um local de armazenamento em nuvem que seu espaço de trabalho do Azure Machine Learning possa acessar.
Use o seguinte comando da CLI do Azure para carregar o script de treinamento. O comando especifica o diretório que contém os arquivos necessários para treinamento, não um arquivo individual. Se você quiser usar REST para carregar os dados, consulte a referência Colocar Blob :
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/testjob -s cli/jobs/single-step/lightgbm/iris/src/ --account-name $AZURE_STORAGE_ACCOUNT
Crie uma referência versionada para os dados de treinamento. Neste exemplo, os dados já estão na nuvem e localizados em https://azuremlexamples.blob.core.windows.net/datasets/iris.csv. Para obter mais informações sobre como referenciar dados, consulte Dados no Azure Machine Learning:
Registre uma referência versionada ao script de treinamento para uso com um trabalho. Neste exemplo, o local do script é a conta de armazenamento padrão e o contêiner para o qual você carregou na etapa 1. A ID do código de treinamento versionado é retornada e armazenada na $TRAIN_CODE variável:
Crie o ambiente que o cluster usará para executar o script de treinamento. Neste exemplo, usamos um ambiente com curadoria ou pronto fornecido pelo Azure Machine Learning chamado AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. O comando a seguir recupera uma lista das versões do ambiente, com a mais recente na parte superior da coleção. jq é usado para recuperar o ID da versão mais recente ([0]), que é então armazenado na $ENVIRONMENT variável.
Por fim, envie o trabalho. O exemplo a seguir mostra como enviar o trabalho, fazer referência à ID do código de treinamento, à ID do ambiente, à URL dos dados de entrada e à ID do cluster de computação. O local de saída do trabalho será armazenado na $JOB_OUTPUT variável:
Gorjeta
O nome do trabalho deve ser exclusivo. Neste exemplo, uuidgen é usado para gerar um valor exclusivo para o nome.
Nota
Para usar computação sem servidor, exclua a \"computeId\": linha neste código.
A name propriedade retornada pelo trabalho de treinamento é usada 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)
Gorjeta
O nome (armazenado na $run_id variável) é usado como parte do caminho para o modelo.
az ml model create -n sklearn-iris-example -v 1 -p runs:/$run_id/model --type mlflow_model
Gorjeta
O nome (armazenado na $run_id variável) é usado como parte do caminho para o modelo.
Para obter mais exemplos, consulte o repositório GitHub de exemplos do Azure Machine Learning.
Para obter mais informações sobre os comandos da CLI do Azure, classes do SDK Python ou APIs REST usadas neste artigo, consulte a seguinte documentação de referência: