Serviço de alto desempenho com o servidor de inferência Triton

APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)SDK do Python azure-ai-ml v2 (atual)

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

Triton é um software de código aberto de várias estruturas que é otimizado para inferência. Ele dá suporte a estruturas populares de aprendizado de máquina, como TensorFlow, ONNX Runtime, PyTorch, NVIDIA TensorRT e muito mais. Ele pode ser usado nas cargas de trabalho de CPU ou GPU.

Há, principalmente, duas abordagens que você pode adotar para aproveitar os modelos Triton ao implantá-los no ponto de extremidade 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 (traga seu próprio contêiner) para modelos Triton é uma maneira mais avançada de implantá-los, pois você tem controle total sobre como personalizar as configurações disponíveis para o servidor de inferência Triton.

Para ambas as opções, o servidor de inferência Triton executará 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 tem suporte em pontos de extremidade online gerenciados e pontos de extremidade online do Kubernetes.

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

Observação

O uso do contêiner NVIDIA Triton Inference Server é regido pelo contrato de licença 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 adicionais do Python instalados para pontuação e pode instalá-los com o código abaixo. Eles incluem:

    • Numpy – uma matriz e uma biblioteca de computação numérica
    • Triton Inference Server Client – Facilita as solicitações para o Triton Inference Server
    • Pillow – 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 usar essa série de VMs. Para saber mais, confira NCv3-series.

O Servidor de Inferência NVIDIA Triton requer uma estrutura de repositório de modelo específica em que haja 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 de modelo e pelos requisitos do back-end que dá suporte ao modelo. Para ver toda a estrutura do repositório de modelo https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_repository.md#model-files

As informações neste documento se baseiam no uso de um modelo armazenado no formato ONNX, ou seja, a estrutura de diretório do repositório de modelo é <model-repository>/<model-name>/1/model.onnx. Mais especificamente, esse modelo executa a identificação da imagem.

As informações deste artigo se baseiam em exemplos de código contidos no repositório azureml-examples. Para executar os comandos localmente sem precisar copiar/colar YAML e outros arquivos, clone o repositório e altere os diretórios para o diretório cli 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 da CLI do Azure, salve as configurações padrão. Para evitar passar os valores para sua assinatura, espaço de trabalho e grupo de recursos várias vezes, use os seguintes comandos. Substitua os seguintes parâmetros por valores para a sua configuração específica:

  • Substitua <subscription> por sua ID da assinatura do Azure.
  • Substitua <workspace> pelo nome do workspace do Azure Machine Learning.
  • Substitua <resource-group> pelo grupo de recursos do Azure que contém o workspace.
  • Substitua <location> pela região do Azure que contém o workspace.

Dica

Para ver quais são seus padrões atuais, use o comando az configure -l.

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 de ML da CLI do Azurev2 (atual)

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

Importante

Para Triton sem código-implantação, não há suporte para o teste por meio de pontos de extremidade locais .

  1. Para evitar digitar um caminho para vários comandos, use o comando a seguir para definir uma variável de ambiente BASE_PATH. Essa variável aponta para o diretório em que 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 ponto de extremidade. O exemplo a seguir configura o nome e o modo de autenticação do ponto de extremidade. O que é usado nos comandos a seguir está localizado em /cli/endpoints/online/triton/single-model/create-managed-endpoint.yml no 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 blue para o ponto de extremidade definido na etapa anterior. O que é usado nos comandos a seguir está localizado em /cli/endpoints/online/triton/single-model/create-managed-deployment.yml no repositório azureml-examples clonado anteriormente:

    Importante

    Para que o NCD (Triton sem implantação de código) funcione, a configuração type para triton_model​ é necessária, type: triton_model​. Para saber mais, confira o esquema YAML do modelo da 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 usar essa VM. Para saber mais, confira 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
    

Implantar no Azure

APLICA-SE A: Extensão de ML da CLI do Azurev2 (atual)

  1. Para criar um 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 ponto de extremidade

APLICA-SE A: Extensão de ML da CLI do Azurev2 (atual)

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

Dica

O arquivo /cli/endpoints/online/triton/single-model/triton_densenet_scoring.py no repositório azureml-examples é usado para pontuação. A imagem transmitida ao 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 biblioteca tritonclient.http para se comunicar com o servidor de inferência Triton. Esse 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 comando a seguir. Ele envia a imagem de um peacock (https://aka.ms/peacock-pic ao ponto de extremidade:

    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 de ML da CLI do Azurev2 (atual)

  1. Depois de 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 o modelo:

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

Próximas etapas

Para saber mais, examine estes artigos: