O Azure Machine Learning fornece várias formas de submeter tarefas de preparação de ML. Neste artigo, irá aprender a submeter tarefas com os seguintes métodos:
Extensão da CLI do Azure para machine learning: a ml extensão, também referida como CLI v2.
SDK Python v2 para o Azure Machine Learning.
API REST: a API na qual a CLI e o SDK estão incorporados.
O utilitário curl . O programa curl está disponível na Subsistema Windows para Linux ou em qualquer distribuição UNIX.
Dica
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 partem do princípio de que está a utilizar o Bash.
O utilitário jq para o processamento de JSON. Este utilitário é utilizado para extrair valores dos documentos JSON que são devolvidos a partir de chamadas à API REST.
Clonar o repositório de exemplos
Os fragmentos de código neste artigo baseiam-se em exemplos no repositório do GitHub de exemplos do Azure ML. Para clonar o repositório para o seu ambiente de desenvolvimento, utilize o seguinte comando:
Utilize --depth 1 para clonar apenas a consolidação mais recente para o repositório, o que reduz o tempo para concluir a operação.
Trabalho de exemplo
Os exemplos neste artigo utilizam o conjunto de dados flor de íris para preparar um modelo do MLFlow.
Preparar na cloud
Ao preparar na cloud, tem de se ligar à área de trabalho do Azure Machine Learning e selecionar um recurso de computação que será utilizado para executar a tarefa de preparação.
1. Ligar à área de trabalho
Dica
Utilize os separadores abaixo para selecionar o método que pretende utilizar para preparar um modelo. Selecionar um separador mudará automaticamente todos os separadores deste artigo para o mesmo separador. Pode selecionar outro separador em qualquer altura.
Para ligar à área de trabalho, precisa de parâmetros de identificador – uma subscrição, um grupo de recursos e um nome de área de trabalho. Irá utilizar estes detalhes no MLClient do espaço de azure.ai.ml nomes para obter um identificador para a área de trabalho do Azure Machine Learning necessária. Para autenticar, utilize a autenticação predefinida do Azure. Veja este exemplo para obter mais detalhes sobre como configurar credenciais e ligar a uma área de trabalho.
#import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
#Enter details of your AzureML 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 utilizar a CLI do Azure, precisa de parâmetros de identificador – uma subscrição, um grupo de recursos e um nome de área de trabalho. Embora possa especificar estes parâmetros para cada comando, também pode definir predefinições que serão utilizadas para todos os comandos. Utilize os seguintes comandos para definir valores predefinidos. Substitua <subscription ID>, <AzureML workspace name>e <resource group> pelos valores da configuração:
az account set --subscription <subscription ID>
az configure --defaults workspace=<AzureML workspace name> group=<resource group>
Os exemplos da API REST neste artigo utilizam $SUBSCRIPTION_IDmarcadores de posição , $RESOURCE_GROUP, $LOCATIONe $WORKSPACE . Substitua os marcadores de posição pelos seus próprios valores da seguinte forma:
$SUBSCRIPTION_ID: o ID da subscrição do Azure.
$RESOURCE_GROUP: o grupo de recursos do Azure que contém a área de trabalho.
$LOCATION: a região do Azure onde está localizada a área de trabalho.
$WORKSPACE: o nome da área de trabalho do Azure Machine Learning.
$COMPUTE_NAME: o nome do cluster de cálculo do Azure Machine Learning.
O fornecedor de serviços utiliza o api-version argumento para garantir a 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 prepara com a API REST, os scripts de dados e de preparação têm de ser carregados para uma conta de armazenamento à qual a área de trabalho possa aceder. O exemplo seguinte obtém as informações de armazenamento da área de trabalho e guarda-as em variáveis para que possamos utilizá-la mais tarde:
Um cluster de cálculo do AzureML é um recurso de computação totalmente gerido que pode ser utilizado para executar a tarefa de preparação. Nos exemplos seguintes, é criado um cluster de cálculo com o nome cpu-compute .
Embora uma resposta seja devolvida após alguns segundos, isto apenas indica que o pedido de criação foi aceite. A criação do cluster pode demorar vários minutos a ser concluída.
# 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, configurou:
code - caminho onde o código para executar o comando está localizado
command - comando que tem de ser executado
environment - o ambiente necessário para executar o script de preparação. Neste exemplo, utilizamos um ambiente organizado ou pronto a utilizar fornecido pelo AzureML chamado AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. Utilizamos a versão mais recente deste ambiente com a @latest diretiva . Também pode utilizar ambientes personalizados ao especificar uma imagem de docker de base e especificar um yaml conda em cima da mesma.
inputs - dicionário de entradas com pares de valor de nome para o comando . A chave é um nome para a entrada no contexto da tarefa e o valor é o valor de entrada. As entradas são referenciadas na utilização command da ${{inputs.<input_name>}} expressão . Para utilizar ficheiros ou pastas como entradas, pode utilizar a Input classe .
Quando submete a tarefa, é devolvido um URL ao estado da tarefa no estúdio do AzureML. Utilize a IU do estúdio para ver o progresso da tarefa. Também pode utilizar returned_job.status para verificar o estado atual da tarefa.
O az ml job create comando utilizado neste exemplo requer um ficheiro de definição de tarefa YAML. Os conteúdos do ficheiro utilizado neste exemplo são:
code - caminho onde o código para executar o comando está localizado
command - comando que tem de ser executado
inputs - dicionário de entradas com pares de valor de nome para o comando . A chave é um nome para a entrada no contexto da tarefa e o valor é o valor de entrada. As entradas são referenciadas na utilização command da ${{inputs.<input_name>}} expressão .
environment - o ambiente necessário para executar o script de preparação. Neste exemplo, utilizamos um ambiente organizado ou pronto a utilizar fornecido pelo AzureML chamado AzureML-sklearn-0.24-ubuntu18.04-py37-cpu. Utilizamos a versão mais recente deste ambiente com a @latest diretiva . Também pode utilizar ambientes personalizados ao especificar uma imagem de docker de base e especificar um yaml conda em cima da mesma.
Para submeter a tarefa, utilize o seguinte comando. O ID de execução (nome) da tarefa de preparação é armazenado na $run_id variável :
run_id=$(az ml job create -f jobs/single-step/scikit-learn/iris/job.yml --query name -o tsv)
Pode utilizar o ID de execução armazenado para devolver informações sobre a tarefa. O --web parâmetro abre a IU Web do AzureML Studio, onde pode explorar detalhes sobre a tarefa:
az ml job show -n $run_id --web
Como parte da submissão da tarefa, os scripts de preparação e os dados têm de ser carregados para uma localização de armazenamento na cloud à qual a área de trabalho do AzureML possa aceder.
Utilize o seguinte comando da CLI do Azure para carregar o script de preparação. O comando especifica o diretório que contém os ficheiros necessários para a preparação e não um ficheiro individual. Se quiser utilizar REST para carregar os dados, veja a referência Colocar Blob :
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/testjob -s cli/jobs/single-step/scikit-learn/iris/src/ --account-name $AZURE_STORAGE_ACCOUNT
Crie uma referência com versões para os dados de preparação. Neste exemplo, os dados já estão na cloud e estão localizados em https://azuremlexamples.blob.core.windows.net/datasets/iris.csv. Para obter mais informações sobre a referência de dados, veja Dados no Azure Machine Learning:
Registe uma referência com versões para o script de preparação para utilização com uma tarefa. Neste exemplo, a localização do script é a conta de armazenamento predefinida e o contentor para o qual carregou no passo 1. O ID do código de preparação com versões é devolvido e armazenado na $TRAIN_CODE variável :
Crie o ambiente que o cluster utilizará para executar o script de preparação. Neste exemplo, utilizamos um ambiente organizado ou pronto a utilizar fornecido pelo AzureML chamado AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu. O comando seguinte obtém uma lista das versões de ambiente, sendo que a mais recente está na parte superior da coleção. jq é utilizado para obter o ID da versão mais recente ([0]), que é depois armazenada na $ENVIRONMENT variável .
Por fim, submeta a tarefa. O exemplo seguinte mostra como submeter a tarefa, referenciar o ID do código de preparação, o ID do ambiente, o URL dos dados de entrada e o ID do cluster de cálculo. A localização de saída da tarefa será armazenada na $JOB_OUTPUT variável :
Dica
O nome da tarefa tem de ser exclusivo. Neste exemplo, uuidgen é utilizado para gerar um valor exclusivo para o nome.
A name propriedade devolvida pela tarefa de preparação é utilizada como parte do caminho para o modelo.
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import ModelType
run_model = Model(
path="azureml://jobs/{}/outputs/artifacts/paths/model/".format(returned_job.name),
name="run-model-example",
description="Model created from run.",
type=ModelType.MLFLOW
)
ml_client.models.create_or_update(run_model)
Dica
O nome (armazenado na $run_id variável) é utilizado 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
Dica
O nome (armazenado na $run_id variável) é utilizado como parte do caminho para o modelo.
Para obter mais exemplos, veja o repositório do GitHub de exemplos do AzureML .
Para obter mais informações sobre os comandos da CLI do Azure, as classes do SDK Python ou as APIs REST utilizadas neste artigo, veja a seguinte documentação de referência: