Serviço de alto desempenho com O Servidor de Inferência de Tritão (Pré-visualização)

APLICA-SE A:Extensão Azure CLI ml v2 (corrente)

Aprenda a usar o NVIDIA Triton Inference Server em Azure Machine Learning com pontos finais geridos online.

Tritão é um software multi-quadro, de código aberto, otimizado para inferência. Suporta quadros populares de aprendizagem automática como TensorFlow, ONNX Runtime, PyTorch, NVIDIA TensorRT, entre outros. Pode ser utilizado para as suas cargas de trabalho cpu ou GPU.

Neste artigo, você vai aprender a implementar Tritão e um modelo para um ponto final gerido on-line. A informação é fornecida sobre a utilização do CLI (linha de comando) e estúdio do Azure Machine Learning.

Nota

  • NVIDIA Triton Inference Server é um software de terceiros de código aberto que está integrado no Azure Machine Learning.
  • Enquanto os pontos finais on-line Azure Machine Learning estão geralmente disponíveis, usando Triton com uma implementação de ponto final on-line ainda está em pré-visualização.

Pré-requisitos

Antes de seguir os passos deste artigo, certifique-se de que tem os seguintes pré-requisitos:

  • Um ambiente Python 3.8 (ou superior) em funcionamento.

  • Acesso aos VMs da série NCv3 para a sua subscrição Azure.

    Importante

    Poderá ter de solicitar um aumento de quota para a sua subscrição antes de poder utilizar esta série de VMs. Para mais informações, consulte a série NCv3.

As informações contidas neste artigo baseiam-se em amostras de código contidas no repositório de exemplos azureml . Para executar os comandos localmente sem ter que copiar/colar YAML e outros ficheiros, clone o repo e, em seguida, alterar diretórios para o cli diretório no repo:

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

Se ainda não tiver definido as predefinições para o CLI Azure, guarde as definições predefinidas. Para evitar a passagem dos valores para a sua subscrição, espaço de trabalho e grupo de recursos várias vezes, utilize os seguintes comandos. Substitua os seguintes parâmetros por valores para a sua configuração específica:

  • Substitua <subscription> pelo seu ID da subscrição do Azure.
  • Substitua o <workspace> nome do espaço de trabalho Azure Machine Learning.
  • Substitua-o pelo <resource-group> grupo de recursos Azure que contém o seu espaço de trabalho.
  • Substitua-a <location> pela região Azure que contém o seu espaço de trabalho.

Dica

Pode ver quais são os seus defeitos atuais utilizando o az configure -l comando.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

O NVIDIA Triton Inference Server requer uma estrutura específica do repositório de modelos, onde existe um diretório para cada modelo e subdiretórios para a versão do modelo. O conteúdo de cada subdireção da versão modelo é determinado pelo tipo do modelo e pelos requisitos do backend que suporta o modelo. Para ver toda a estrutura do repositório modelo https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_repository.md#model-files

A informação neste documento baseia-se na utilização de um modelo armazenado em formato ONNX, pelo que a estrutura do diretório do repositório de modelos é <model-repository>/<model-name>/1/model.onnx. Especificamente, este modelo realiza a identificação de imagem.

Implementar utilizando o CLI (v2)

APLICA-SE A:Extensão Azure CLI ml v2 (corrente)

Esta secção mostra como pode implantar Tritão para gerir o ponto final online usando o CLI Azure com a extensão machine learning (v2).

Importante

Para a não implantação de código de Tritão, os testes através de pontos finais locais não são atualmente suportados.

  1. Para evitar dactilografia num caminho para vários comandos, utilize o seguinte comando para definir uma BASE_PATH variável ambiental. Esta variável aponta para o diretório onde estão localizados os ficheiros de configuração YAML do modelo e associados:

    BASE_PATH=endpoints/online/triton/single-model
    
  2. Utilize o seguinte comando para definir o nome do ponto final que será criado. Neste exemplo, é criado um nome aleatório para o ponto final:

    export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
    
  3. Instale os requisitos python utilizando os seguintes comandos:

    pip install numpy
    pip install tritonclient[http]
    pip install pillow
    pip install gevent
    
  4. Crie um ficheiro de configuração YAML para o seu ponto final. O exemplo a seguir configura o nome e o modo de autenticação do ponto final. O usado nos seguintes comandos está localizado nos /cli/endpoints/online/triton/single-model/create-managed-endpoint.yml exemplos azureml repo-lo clonado anteriormente:

    create-managed-endpoint.yaml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: my-endpoint
    auth_mode: aml_token
    
  5. Para criar um novo ponto final utilizando a configuração YAML, utilize o seguinte comando:

    az ml online-endpoint create -n $ENDPOINT_NAME -f $BASE_PATH/create-managed-endpoint.yaml
    
  6. Crie um ficheiro de configuração YAML para a implementação. O exemplo a seguir configura uma implantação chamada azul para o ponto final criado no passo anterior. O usado nos seguintes comandos está localizado nos /cli/endpoints/online/triton/single-model/create-managed-deployment.yml exemplos azureml repo-lo clonado anteriormente:

    Importante

    Para que a não implantação de códigos tritão (NCD) funcione, é necessário definir type para triton_model​ , type: triton_model​. Para obter mais informações, consulte o esquema YAML do modelo CLI (v2).

    Esta implementação utiliza um VM Standard_NC6s_v3. Poderá ter de solicitar um aumento de quota para a sua subscrição antes de poder utilizar este VM. Para mais informações, consulte a série NCv3.

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
    name: blue
    endpoint_name: my-endpoint
    model:
      name: sample-densenet-onnx-model
      version: 1
      path: ./models
      type: triton_model
    instance_count: 1
    instance_type: Standard_NC6s_v3
    
  7. Para criar a implementação utilizando a configuração YAML, utilize o seguinte comando:

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f $BASE_PATH/create-managed-deployment.yaml --all-traffic
    

Invoque o seu ponto final

Uma vez concluída a sua implantação, utilize o seguinte comando para fazer um pedido de pontuação para o ponto final implantado.

Dica

O ficheiro /cli/endpoints/online/triton/single-model/triton_densenet_scoring.py no repo de exemplos azureml é usado para pontuar. A imagem passada para o ponto final necessita de pré-processamento para atender aos requisitos de tamanho, tipo e formato, e pós-processamento para mostrar a etiqueta prevista. Usa triton_densenet_scoring.py a tritonclient.http biblioteca para comunicar com o servidor de inferência tritão.

  1. Para obter o ponto final uri, use o seguinte comando:

    scoring_uri=$(az ml online-endpoint show -n $ENDPOINT_NAME --query scoring_uri -o tsv)
    scoring_uri=${scoring_uri%/*}
    
  2. Para obter um token de autenticação, utilize o seguinte comando:

    auth_token=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME --query accessToken -o tsv)
    
  3. Para marcar dados com o ponto final, utilize o seguinte comando. Submete a imagem de um pavão (https://aka.ms/peacock-pic) ao ponto final:

    python $BASE_PATH/triton_densenet_scoring.py --base_url=$scoring_uri --token=$auth_token --image_path $BASE_PATH/data/peacock.jpg
    

    A resposta do guião é semelhante ao seguinte texto:

    Is server ready - True
    Is model ready - True
    /azureml-examples/cli/endpoints/online/triton/single-model/densenet_labels.txt
    84 : PEACOCK
    

Elimine o seu ponto final e modelo

Uma vez terminado com o ponto final, utilize o seguinte comando para eliminá-lo:

az ml online-endpoint delete -n $ENDPOINT_NAME --yes

Utilize o seguinte comando para eliminar o seu modelo:

az ml model delete --name $MODEL_NAME --version $MODEL_VERSION

Implementar usando estúdio do Azure Machine Learning

Esta secção mostra como pode implementar Triton para gerir o ponto final online usando estúdio do Azure Machine Learning.

  1. Registe o seu modelo em formato Tritão utilizando o seguinte comando YAML e CLI. O YAML usa um modelo densenet-onnx de https://github.com/Azure/azureml-examples/tree/main/cli/endpoints/online/triton/single-model

    create-triton-model.yaml

    name: densenet-onnx-model
    version: 1
    path: ./models
    type: triton_model​
    description: Registering my Triton format model.
    
    az ml model create -f create-triton-model.yaml
    

    A imagem que se segue mostra como o seu modelo registado ficará na página modelo de estúdio do Azure Machine Learning.

    Screenshot mostrando o formato do modelo Triton na página dos Modelos.

  2. A partir do estúdio, selecione o seu espaço de trabalho e, em seguida, use a página de pontos finais ou modelos para criar a implementação do ponto final:

    1. Na página Endpoints , selecione Criar.

      Screenshot mostrando a opção de criar na página de UI endpoints.

    2. Forneça um nome e tipo de autenticação para o ponto final e, em seguida, selecione Seguinte.

    3. Ao selecionar um modelo, selecione o modelo Tritão registado anteriormente. Selecione Seguinte para continuar.

    4. Quando seleciona um modelo registado no formato Tritão, no passo Ambiente do assistente, não precisa de marcar script e ambiente.

      Screenshot mostrando nenhum código e ambiente necessários para modelos Tritão

    5. Preencha o assistente para colocar o modelo no ponto final.

      Screenshot mostrando ecrã de revisão do NCD

Passos seguintes

Para saber mais, reveja estes artigos: