Criar trabalhos e dados de entrada para pontos de extremidade em lote
Ao usar pontos de extremidade em lote no Aprendizado de Máquina do Azure, você pode executar operações em lote longas em grandes quantidades de dados de entrada. Os dados podem ser localizados em diferentes locais, como em diferentes regiões. Certos tipos de pontos de extremidade em lote também podem receber parâmetros literais como entradas.
Este artigo descreve como especificar entradas de parâmetros para pontos de extremidade em lote e criar trabalhos de implantação. O processo suporta trabalhar com dados de várias fontes, como ativos de dados, armazenamentos de dados, contas de armazenamento e arquivos locais.
Pré-requisitos
Um ponto de extremidade e implantação em lote. Para criar esses recursos, consulte Implantar modelos MLflow em implantações em lote no Azure Machine Learning.
Permissões para executar uma implantação de ponto de extremidade em lote. Você pode usar as funções de Cientista de Dados, Colaborador e Proprietário do AzureML para executar uma implantação. Para revisar permissões específicas necessárias para definições de função personalizadas, consulte Autorização em pontos de extremidade em lote.
Credenciais para invocar um ponto de extremidade. Para obter mais informações, consulte Estabelecer autenticação.
Acesso de leitura aos dados de entrada do cluster de computação onde o ponto de extremidade é implantado.
Gorjeta
Determinadas situações exigem o uso de um armazenamento de dados sem credenciais ou de uma conta externa do Armazenamento do Azure como entrada de dados. Nesses cenários, certifique-se de configurar clusters de computação para acesso a dados, pois a identidade gerenciada do cluster de computação é usada para montar a conta de armazenamento. Você ainda tem controle de acesso granular, porque a identidade do trabalho (invocador) é usada para ler os dados subjacentes.
Estabelecer autenticação
Para invocar um ponto de extremidade, você precisa de um token válido do Microsoft Entra. Quando você invoca um ponto de extremidade, o Aprendizado de Máquina do Azure cria um trabalho de implantação em lote sob a identidade associada ao token.
- Se você usar a CLI do Azure Machine Learning (v2) ou o SDK do Azure Machine Learning para Python (v2) para invocar pontos de extremidade, não precisará obter o token do Microsoft Entra manualmente. Durante o login, o sistema autentica sua identidade de usuário. Ele também recupera e passa o token para você.
- Se você usar a API REST para invocar pontos de extremidade, precisará obter o token manualmente.
Você pode usar suas próprias credenciais para a invocação, conforme descrito nos procedimentos a seguir.
Use a CLI do Azure para entrar com autenticação interativa ou de código de dispositivo:
az login
Para obter mais informações sobre vários tipos de credenciais, consulte Como executar trabalhos usando diferentes tipos de credenciais.
Criar empregos básicos
Para criar um trabalho a partir de um ponto de extremidade em lote, invoque o ponto de extremidade. A invocação pode ser feita usando a CLI do Azure Machine Learning, o SDK do Azure Machine Learning para Python ou uma chamada de API REST.
Os exemplos a seguir mostram noções básicas de invocação para um ponto de extremidade em lote que recebe uma única pasta de dados de entrada para processamento. Para obter exemplos que envolvem várias entradas e saídas, consulte Compreender entradas e saídas.
Use a invoke
operação em pontos de extremidade de lote:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
Invocar uma implantação específica
Os pontos de extremidade em lote podem hospedar várias implantações sob o mesmo ponto de extremidade. O ponto de extremidade padrão é usado, a menos que o usuário especifique o contrário. Você pode usar os procedimentos a seguir para alterar a implantação que você usa.
Use o argumento --deployment-name
ou -d
para especificar o nome da implantação:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--deployment-name $DEPLOYMENT_NAME \
--input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
Configurar propriedades do trabalho
Você pode configurar algumas propriedades de trabalho no momento da invocação.
Nota
Atualmente, você pode configurar propriedades de trabalho somente em pontos de extremidade em lote com implantações de componentes de pipeline.
Configurar o nome do experimento
Use os procedimentos a seguir para configurar o nome do experimento.
Use o argumento --experiment-name
para especificar o nome do experimento:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--experiment-name "my-batch-job-experiment" \
--input https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
Compreender entradas e saídas
Os pontos de extremidade em lote fornecem uma API durável que os consumidores podem usar para criar trabalhos em lote. A mesma interface pode ser usada para especificar as entradas e saídas esperadas pela sua implantação. Use entradas para passar qualquer informação que seu ponto de extremidade precisa para executar o trabalho.
Os pontos de extremidade em lote suportam dois tipos de entradas:
- Entradas de dados ou ponteiros para um local de armazenamento específico ou ativo do Azure Machine Learning
- Entradas literais ou valores literais como números ou cadeias de caracteres que você deseja passar para o trabalho
O número e o tipo de entradas e saídas dependem do tipo de implantação em lote. As implantações de modelo sempre exigem uma entrada de dados e produzem uma saída de dados. Não há suporte para entradas literais em implantações de modelo. Em contraste, as implantações de componentes de pipeline fornecem uma construção mais geral para a construção de pontos de extremidade. Em uma implantação de componente de pipeline, você pode especificar qualquer número de entradas de dados, entradas literais e saídas.
A tabela a seguir resume as entradas e saídas para implantações em lote:
Tipo de implementação | Número de entradas | Tipos de entrada suportados | Número de saídas | Tipos de saída suportados |
---|---|---|---|---|
Implantação do modelo | 1 | Introdução de dados | 1 | Saídas de dados |
Implantação de componentes de pipeline | 0-N | Entradas de dados e entradas literais | 0-N | Saídas de dados |
Gorjeta
As entradas e saídas são sempre nomeadas. Cada nome serve como uma chave para identificar os dados e passar o valor durante a invocação. Como as implantações de modelo sempre exigem uma entrada e uma saída, os nomes são ignorados durante a invocação em implantações de modelo. Você pode atribuir o nome que melhor descreve seu caso de uso, como sales_estimation
.
Explore entradas de dados
As entradas de dados referem-se a entradas que apontam para um local onde os dados são colocados. Como os pontos de extremidade em lote geralmente consomem grandes quantidades de dados, não é possível passar os dados de entrada como parte da solicitação de invocação. Em vez disso, você especifica o local onde o ponto de extremidade do lote deve ir para procurar os dados. Os dados de entrada são montados e transmitidos na instância de computação de destino para melhorar o desempenho.
Os pontos de extremidade em lote podem ler arquivos localizados nos seguintes tipos de armazenamento:
-
Ativos de dados do Azure Machine Learning, incluindo os tipos de pasta (
uri_folder
) e arquivo (uri_file
). - Armazenamentos de dados do Azure Machine Learning, incluindo o Armazenamento de Blobs do Azure, o Azure Data Lake Storage Gen1 e o Azure Data Lake Storage Gen2.
- Contas de Armazenamento do Azure, incluindo Blob Storage, Data Lake Storage Gen1 e Data Lake Storage Gen2.
- Pastas e arquivos de dados locais, quando você usa a CLI do Azure Machine Learning ou o SDK do Azure Machine Learning para Python para invocar pontos de extremidade. Mas os dados locais são carregados no armazenamento de dados padrão do seu espaço de trabalho do Azure Machine Learning.
Importante
Aviso de descontinuação: os ativos de dados do tipo FileDataset
(V1) foram preteridos e serão desativados no futuro. Os pontos de extremidade em lote existentes que dependem dessa funcionalidade continuarão a funcionar. Mas não há suporte para conjuntos de dados V1 em pontos de extremidade em lote que são criados com:
- Versões da CLI do Azure Machine Learning v2 que estão geralmente disponíveis (2.4.0 e mais recentes).
- Versões da API REST que estão disponíveis em geral (2022-05-01 e mais recentes).
Explore entradas literais
Entradas literais referem-se a entradas que podem ser representadas e resolvidas no momento da invocação, como cadeias de caracteres, números e valores booleanos. Normalmente, você usa entradas literais para passar parâmetros para seu ponto de extremidade como parte de uma implantação de componente de pipeline. Os pontos de extremidade em lote suportam os seguintes tipos literais:
string
boolean
float
integer
As entradas literais só são suportadas em implantações de componentes de pipeline. Para ver como especificar pontos de extremidade literais, consulte Criar trabalhos com entradas literais.
Explore saídas de dados
As saídas de dados referem-se ao local onde os resultados de um trabalho em lote são colocados. Cada saída tem um nome identificável e o Azure Machine Learning atribui automaticamente um caminho exclusivo a cada saída nomeada. Você pode especificar outro caminho, se necessário.
Importante
Os pontos de extremidade em lote suportam apenas saídas de gravação em armazenamentos de dados de Armazenamento de Blob. Se precisar gravar em uma conta de armazenamento com namespaces hierárquicos habilitados, como o Data Lake Storage Gen2, você poderá registrar o serviço de armazenamento como um armazenamento de dados de Armazenamento de Blob, pois os serviços são totalmente compatíveis. Dessa forma, você pode gravar saídas de pontos de extremidade em lote para o Data Lake Storage Gen2.
Criar trabalhos com entradas de dados
Os exemplos a seguir mostram como criar trabalhos ao usar entradas de dados de ativos de dados, armazenamentos de dados e contas de Armazenamento do Azure.
Usar dados de entrada de um ativo de dados
Os ativos de dados do Azure Machine Learning (anteriormente conhecidos como conjuntos de dados) são suportados como entradas para trabalhos. Siga estas etapas para executar um trabalho de ponto de extremidade em lote que usa dados de entrada armazenados em um ativo de dados registrado no Aprendizado de Máquina do Azure.
Aviso
Atualmente, não há suporte para ativos de dados do tipo tabela (MLTable
).
Crie o ativo de dados. Neste exemplo, ele consiste em uma pasta que contém vários arquivos CSV. Você usa pontos de extremidade em lote para processar os arquivos em paralelo. Você pode pular esta etapa se seus dados já estiverem registrados como um ativo de dados.
Crie uma definição de ativo de dados em um arquivo YAML chamado heart-data.yml:
$schema: https://azuremlschemas.azureedge.net/latest/data.schema.json name: heart-data description: An unlabeled data asset for heart classification. type: uri_folder path: data
Crie o ativo de dados:
az ml data create -f heart-data.yml
Configure a entrada:
DATA_ASSET_ID=$(az ml data show -n heart-data --label latest | jq -r .id)
O ID do ativo de dados tem o formato
/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/data/<data-asset-name>/versions/<data-asset-version>
.Execute o ponto de extremidade:
Use o
--set
argumento para especificar a entrada. Primeiro, substitua qualquer hífenes no nome do ativo de dados por caracteres de sublinhado. As teclas podem conter apenas caracteres alfanuméricos e caracteres sublinhados.az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --set inputs.heart_data.type="uri_folder" inputs.heart_data.path=$DATA_ASSET_ID
Para um ponto de extremidade que serve a uma implantação de modelo, você pode usar o
--input
argumento para especificar a entrada de dados, porque uma implantação de modelo sempre requer apenas uma entrada de dados.az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $DATA_ASSET_ID
O argumento
--set
tende a produzir comandos longos quando você especifica várias entradas. Nesses casos, você pode listar suas entradas em um arquivo e, em seguida, consultar o arquivo quando invocar seu ponto de extremidade. Por exemplo, você pode criar um arquivo YAML chamado inputs.yml que contém as seguintes linhas:inputs: heart_data: type: uri_folder path: /subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/data/heart-data/versions/1
Em seguida, você pode executar o seguinte comando, que usa o
--file
argumento para especificar as entradas:az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
Usar dados de entrada de um armazenamento de dados
Seus trabalhos de implantação em lote podem fazer referência direta a dados que estão em armazenamentos de dados registrados do Azure Machine Learning. Neste exemplo, você primeiro carrega alguns dados em um armazenamento de dados em seu espaço de trabalho do Azure Machine Learning. Em seguida, você executa uma implantação em lote nesses dados.
Este exemplo usa o armazenamento de dados padrão, mas você pode usar um armazenamento de dados diferente. Em qualquer espaço de trabalho do Azure Machine Learning, o nome do armazenamento de dados de blob padrão é workspaceblobstore. Se você quiser usar um armazenamento de dados diferente nas etapas a seguir, substitua workspaceblobstore
pelo nome do seu armazenamento de dados preferido.
Carregue dados de exemplo para o armazenamento de dados. Os dados de exemplo estão disponíveis no repositório azureml-examples . Você pode encontrar os dados na pasta sdk/python/endpoints/batch/deploy-models/heart-classifier-mlflow/data desse repositório.
- No estúdio do Azure Machine Learning, abra a página de ativos de dados para seu armazenamento de dados de blob padrão e procure o nome de seu contêiner de blob.
- Use uma ferramenta como o Gerenciador de Armazenamento do Azure ou o AzCopy para carregar os dados de exemplo em uma pasta chamada heart-disease-uci-unlabeled nesse contêiner.
Configure as informações de entrada:
Coloque o caminho do
INPUT_PATH
arquivo na variável:DATA_PATH="heart-disease-uci-unlabeled" INPUT_PATH="azureml://datastores/workspaceblobstore/paths/$DATA_PATH"
Observe como a
paths
pasta faz parte do caminho de entrada. Esse formato indica que o valor a seguir é um caminho.Execute o ponto de extremidade:
Use o
--set
argumento para especificar a entrada:az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --set inputs.heart_data.type="uri_folder" inputs.heart_data.path=$INPUT_PATH
Para um ponto de extremidade que serve a uma implantação de modelo, você pode usar o
--input
argumento para especificar a entrada de dados, porque uma implantação de modelo sempre requer apenas uma entrada de dados.az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_PATH --input-type uri_folder
O argumento
--set
tende a produzir comandos longos quando você especifica várias entradas. Nesses casos, você pode listar suas entradas em um arquivo e, em seguida, consultar o arquivo quando invocar seu ponto de extremidade. Por exemplo, você pode criar um arquivo YAML chamado inputs.yml que contém as seguintes linhas:inputs: heart_data: type: uri_folder path: azureml://datastores/workspaceblobstore/paths/<data-path>
Se os dados estiverem em um arquivo, use o
uri_file
tipo para a entrada.Em seguida, você pode executar o seguinte comando, que usa o
--file
argumento para especificar as entradas:az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
Usar dados de entrada de uma conta de Armazenamento do Azure
Os pontos de extremidade em lote do Azure Machine Learning podem ler dados de locais de nuvem em contas de Armazenamento do Azure, públicas e privadas. Use as etapas a seguir para executar um trabalho de ponto de extremidade em lote com dados em uma conta de armazenamento.
Para obter mais informações sobre configurações adicionais necessárias para ler dados de contas de armazenamento, consulte Configurar clusters de computação para acesso a dados.
Configure a entrada:
Defina a
INPUT_DATA
variável:INPUT_DATA="https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data"
Se os dados estiverem em um arquivo, use um formato semelhante ao seguinte para definir o caminho de entrada:
INPUT_DATA="https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data/heart.csv"
Execute o ponto de extremidade:
Use o
--set
argumento para especificar a entrada:az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --set inputs.heart_data.type="uri_folder" inputs.heart_data.path=$INPUT_DATA
Para um ponto de extremidade que serve a uma implantação de modelo, você pode usar o
--input
argumento para especificar a entrada de dados, porque uma implantação de modelo sempre requer apenas uma entrada de dados.az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $INPUT_DATA --input-type uri_folder
O
--set
argumento tende a produzir comandos longos quando você especifica várias entradas. Nesses casos, você pode listar suas entradas em um arquivo e, em seguida, consultar o arquivo quando invocar seu ponto de extremidade. Por exemplo, você pode criar um arquivo YAML chamado inputs.yml que contém as seguintes linhas:inputs: heart_data: type: uri_folder path: https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data
Em seguida, você pode executar o seguinte comando, que usa o
--file
argumento para especificar as entradas:az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
Se os dados estiverem em um arquivo, use o
uri_file
tipo no arquivo inputs.yml para a entrada de dados.
Crie trabalhos com entradas literais
As implantações de componentes de pipeline podem ter entradas literais. Para obter um exemplo de uma implantação em lote que contém um pipeline básico, consulte Como implantar pipelines com pontos de extremidade em lote.
O exemplo a seguir mostra como especificar uma entrada chamada score_mode
, do tipo string
, com um valor de append
:
Coloque suas entradas em um arquivo YAML, como um chamado inputs.yml:
inputs:
score_mode:
type: string
default: append
Execute o seguinte comando, que usa o --file
argumento para especificar as entradas.
az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs.yml
Você também pode usar o --set
argumento para especificar o tipo e o valor padrão. Mas essa abordagem tende a produzir comandos longos quando você especifica várias entradas:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--set inputs.score_mode.type="string" inputs.score_mode.default="append"
Criar trabalhos com saídas de dados
O exemplo a seguir mostra como alterar o local de uma saída chamada score
. Para completar, o exemplo também configura uma entrada chamada heart_data
.
Este exemplo usa o armazenamento de dados padrão, workspaceblobstore. Mas você pode usar qualquer outro armazenamento de dados em seu espaço de trabalho, desde que seja uma conta de Armazenamento de Blob. Se você quiser usar um armazenamento de dados diferente, substitua workspaceblobstore
nas etapas a seguir pelo nome do seu armazenamento de dados preferido.
Obtenha a ID do armazenamento de dados.
DATA_STORE_ID=$(az ml datastore show -n workspaceblobstore | jq -r '.id')
O ID do armazenamento de dados tem o formato
/subscriptions/<subscription-ID>/resourceGroups/<resource-group-name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace-name>/datastores/workspaceblobstore
.Crie uma saída de dados:
Defina os valores de entrada e saída em um arquivo chamado inputs-and-outputs.yml. Use o ID do armazenamento de dados no caminho de saída. Para completar, defina também a entrada de dados.
inputs: heart_data: type: uri_folder path: https://azuremlexampledata.blob.core.windows.net/data/heart-disease-uci/data outputs: score: type: uri_file path: <data-store-ID>/paths/batch-jobs/my-unique-path
Nota
Observe como a
paths
pasta faz parte do caminho de saída. Esse formato indica que o valor a seguir é um caminho.Execute a implantação:
Use o
--file
argumento para especificar os valores de entrada e saída:az ml batch-endpoint invoke --name $ENDPOINT_NAME --file inputs-and-outputs.yml