Serviço de alto desempenho com o Triton Inference Server

APLICA-SE A:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Saiba como usar o NVIDIA Triton Inference Server no Azure Machine Learning com pontos de extremidade online.

Triton é multi-framework, software de código aberto que é otimizado para inferência. Ele suporta estruturas populares de aprendizado de máquina como TensorFlow, ONNX Runtime, PyTorch, NVIDIA TensorRT e muito mais. Ele pode ser usado para suas cargas de trabalho de CPU ou GPU.

Há principalmente duas abordagens que você pode adotar para aproveitar os modelos Triton ao implantá-los no endpoint online: implantação sem código ou implantação de código completo (traga seu próprio contêiner).

  • A implantação sem código para modelos Triton é uma maneira simples de implantá-los, pois você só precisa trazer modelos Triton para implantar.
  • A implantação de código completo (Bring your own container) para modelos Triton é uma maneira mais avançada de implantá-los, pois você tem controle total sobre a personalização das configurações disponíveis para o servidor de inferência Triton.

Para ambas as opções, o servidor de inferência Triton executará a inferência com base no modelo Triton, conforme definido pela NVIDIA. Por exemplo, modelos de conjunto podem ser usados para cenários mais avançados.

O Triton é suportado em endpoints online gerenciados e em endpoints online do Kubernetes.

Neste artigo, você aprenderá como implantar um modelo usando a implantação sem código para Triton em um ponto de extremidade online gerenciado. São fornecidas informações sobre como usar a CLI (linha de comando), o Python SDK v2 e o estúdio Azure Machine Learning. Se você quiser personalizar ainda mais diretamente usando a configuração do servidor de inferência Triton, consulte Usar um contêiner personalizado para implantar um modelo e o exemplo BYOC para Triton (definição de implantação e script de ponta a ponta).

Nota

O uso do contêiner NVIDIA Triton Inference Server é regido pelo contrato de licença do NVIDIA AI Enterprise Software e pode ser usado por 90 dias sem uma assinatura de produto empresarial. Para obter mais informações, consulte NVIDIA AI Enterprise no Azure Machine Learning.

Pré-requisitos

Antes de seguir as etapas neste artigo, verifique se você tem os seguintes pré-requisitos:

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

  • Você deve ter pacotes Python adicionais instalados para pontuação e pode instalá-los com o código abaixo. Estas incluem:

    • Numpy - Uma biblioteca de computação numérica e matriz
    • Triton Inference Server Client - Facilita solicitações para o Triton Inference Server
    • Almofada - Uma biblioteca para operações de imagem
    • Gevent - Uma biblioteca de rede usada ao se conectar ao Triton Server
pip install numpy
pip install tritonclient[http]
pip install pillow
pip install gevent
  • Acesso a VMs da série NCv3 para sua assinatura do Azure.

    Importante

    Talvez seja necessário solicitar um aumento de cota para sua assinatura antes de poder usar essa série de VMs. Para obter mais informações, consulte NCv3-series.

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

As informações neste documento são baseadas no uso de um modelo armazenado no formato ONNX, portanto, a estrutura de diretórios do repositório de modelos é <model-repository>/<model-name>/1/model.onnx. Especificamente, este modelo realiza a identificação de imagens.

As informações neste artigo são baseadas em exemplos de código contidos no repositório azureml-examples . Para executar os comandos localmente sem ter que copiar/colar YAML e outros arquivos, clone o repositório e, em seguida, altere os diretórios para o cli diretório no repositório:

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

Se você ainda não definiu os padrões para a CLI do Azure, salve suas configurações padrão. Para evitar passar os valores da sua assinatura, espaço de trabalho e grupo de recursos várias vezes, use os comandos a seguir. Substitua os seguintes parâmetros por valores para sua configuração específica:

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

Gorjeta

Você pode ver quais são seus padrões atuais usando o az configure -l comando.

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

Definir a configuração de implantação

APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

Esta seção mostra como você pode implantar em um ponto de extremidade online gerenciado usando a CLI do Azure com a extensão de Aprendizado de Máquina (v2).

Importante

Para Triton no-code-deployment, o teste via endpoints locais não é suportado no momento.

  1. Para evitar digitar um caminho para vários comandos, use o seguinte comando para definir uma variável de BASE_PATH ambiente. Esta variável aponta para o diretório onde o modelo e os arquivos de configuração YAML associados estão localizados:

    BASE_PATH=endpoints/online/triton/single-model
    
  2. Use o comando a seguir para definir o nome do ponto de extremidade que será criado. Neste exemplo, um nome aleatório é criado para o ponto de extremidade:

    export ENDPOINT_NAME=triton-single-endpt-`echo $RANDOM`
    
  3. Crie um arquivo de configuração YAML para seu endpoint. O exemplo a seguir configura o nome e o modo de autenticação do ponto de extremidade. O usado nos comandos a seguir está localizado no /cli/endpoints/online/triton/single-model/create-managed-endpoint.yml repositório azureml-examples clonado anteriormente:

    create-managed-endpoint.yaml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: my-endpoint
    auth_mode: aml_token
    
  4. Crie um arquivo de configuração YAML para a implantação. O exemplo a seguir configura uma implantação chamada azul para o ponto de extremidade definido na etapa anterior. O usado nos comandos a seguir está localizado no /cli/endpoints/online/triton/single-model/create-managed-deployment.yml repositório azureml-examples clonado anteriormente:

    Importante

    Para que o Triton no-code-deployment (NCD) funcione, é necessário type: triton_model​definir type como triton_model​ . Para obter mais informações, consulte Esquema YAML modelo CLI (v2).

    Essa implantação usa uma VM Standard_NC6s_v3. Talvez seja necessário solicitar um aumento de cota para sua assinatura antes de poder usar essa VM. Para obter mais informações, consulte NCv3-series.

    $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
    

Implementar no Azure

APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

  1. Para criar um novo ponto de extremidade usando a configuração YAML, use o seguinte comando:

    az ml online-endpoint create -n $ENDPOINT_NAME -f $BASE_PATH/create-managed-endpoint.yaml
    
  2. Para criar a implantação usando a configuração YAML, use o seguinte comando:

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

Testar o parâmetro de avaliação

APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

Quando a implantação for concluída, use o comando a seguir para fazer uma solicitação de pontuação para o ponto de extremidade implantado.

Gorjeta

O arquivo /cli/endpoints/online/triton/single-model/triton_densenet_scoring.py no repositório azureml-examples é usado para pontuação. A imagem passada para o ponto de extremidade precisa de pré-processamento para atender aos requisitos de tamanho, tipo e formato, e pós-processamento para mostrar o rótulo previsto. O triton_densenet_scoring.py usa a tritonclient.http biblioteca para se comunicar com o servidor de inferência Triton. Este arquivo é executado no lado do cliente.

  1. Para obter o uri de pontuação do ponto de extremidade, 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 uma chave de autenticação, use o seguinte comando:

    auth_token=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME --query accessToken -o tsv)
    
  3. Para pontuar dados com o ponto de extremidade, use 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 script é 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
    

Excluir o ponto de extremidade e o modelo

APLICA-SE A:Extensão ml da CLI do Azure v2 (atual)

  1. Quando terminar o ponto de extremidade, use o seguinte comando para excluí-lo:

    az ml online-endpoint delete -n $ENDPOINT_NAME --yes
    
  2. Use o seguinte comando para arquivar seu modelo:

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

Próximos passos

Para saber mais, leia estes artigos: