Tutorial: Implantar um NIM do NVIDIA Llama3 nos Aplicativos de Contêiner do Azure

Os NIMs (Microsserviços de Inferência) NVIDIA são microsserviços de inferência de IA em contêineres que simplificam e aceleram a forma como você cria aplicativos de IA. Esses modelos são pré-empacotados, escalonáveis e ajustados ao desempenho para implantação direta como pontos de extremidade seguros nos Aplicativos de Contêiner do Azure. Ao usar os Aplicativos de Contêiner do Azure com GPUs sem servidor, você pode executar esses NIMs com eficiência sem precisar gerenciar a infraestrutura subjacente.

Neste tutorial, você aprenderá a implantar um NIM NVIDIA llama3 nos Aplicativos de Contêiner do Azure usando GPUs sem servidor.

Este tutorial usa uma instância premium do Registro de Contêiner do Azure para melhorar o desempenho de início frio ao trabalhar com GPUs sem servidor. Se você não quiser usar um Registro de Contêiner do Azure premium, modifique o az acr create comando neste tutorial para definir --sku como basic.

Pré-requisitos

Resource Description
Conta do Azure Uma conta do Azure com uma assinatura ativa.

Se não tiver uma, poderá criar uma gratuitamente.
CLI do Azure Instale a CLI do Azure.
Chave de API NGC NVIDIA Você pode obter uma chave de API no site NGC (NVIDIA GPU Cloud).

Configuração

Para entrar no Azure usando a CLIl, execute o comando a seguir e siga os prompts para concluir o processo de autenticação.

az login

Para garantir que você esteja executando a versão mais recente da CLI, execute o comando “upgrade”.

az upgrade

Em seguida, instale ou atualize a extensão dos Aplicativos de Contêiner do Azure para a CLI.

Se você receber erros sobre parâmetros ausentes ao executar comandos az containerapp na CLI do Azure ou cmdlets do módulo Az.App no PowerShell, verifique se está usando a última versão da extensão Aplicativos de Contêiner do Azure instalada.

az extension add --name containerapp --upgrade

Observação

A partir de maio de 2024, as extensões da CLI do Azure já não permitem funcionalidades de versão prévia do recurso por padrão. Para acessar a versão prévia dos recursos dos Aplicativos de Contêiner, instale a extensão dos Aplicativos de Contêiner com --allow-preview true.

az extension add --name containerapp --upgrade --allow-preview true

Agora que a extensão ou módulo atual está instalado, registre os namespaces Microsoft.App e Microsoft.OperationalInsights.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
  1. Configure variáveis de ambiente nomeando o grupo de recursos e definindo o local.

    RESOURCE_GROUP="my-resource-group"
    LOCATION="swedencentral"
    

    Em seguida, gere um nome exclusivo do registro de contêiner.

    SUFFIX=$(head /dev/urandom | tr -dc 'a-z0-9' | head -c 6)
    ACR_NAME="mygpututorialacr${SUFFIX}"
    

    Por fim, defina variáveis para nomear o ambiente e identificar o ambiente, o tipo de perfil de carga de trabalho, o nome do aplicativo de contêiner e o contêiner.

    CONTAINERAPPS_ENVIRONMENT="my-environment-name"
    GPU_TYPE="Consumption-GPU-NC24-A100"
    CONTAINER_APP_NAME="llama3-nim"
    CONTAINER_AND_TAG="meta/llama-3.1-8b-instruct:latest"
    NGC_SECRET=<Your NVIDIA NGC API Key>
    

Criar um grupo de recursos do Azure

Crie um grupo de recursos para organizar os serviços relacionados à implantação do aplicativo de contêiner.

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION
  1. Criar um ACR (Registro de Contêiner do Azure).

    Observação

    Este tutorial usa um Registro de Contêiner do Azure premium para melhorar o desempenho de início frio ao trabalhar com GPUs sem servidor. Se você não quiser usar um Registro de Contêiner do Azure premium, modifique o comando a seguir e defina --sku como basic.

    az acr create \
      --resource-group $RESOURCE_GROUP \
      --name $ACR_NAME \
      --location $LOCATION \
      --sku premium
    

Importar a imagem NVIDIA NIM para o Registro de Contêiner do Azure

Em seguida, importe a imagem da Nuvem de GPU NVIDIA para o Registro de Contêiner do Azure.

Observação

As NICs NVIDIA têm seus próprios requisitos de hardware. Verifique se o tipo de GPU selecionado dá suporte ao NIM de sua escolha. O NIM do Llama3 usado neste tutorial pode ser executado em GPUs NVIDIA A100.

  1. Autenticar no Registro de Contêiner do Azure.

    az acr login --name $ACR_NAME
    
  2. Envie a imagem por push para o Registro de Contêiner do Azure.

    az acr import \
        --name $ACR_NAME \
        --source nvcr.io/nim/$CONTAINER_AND_TAG \
        --image $CONTAINER_AND_TAG \
        --username '$oauthtoken' \
        --password $NGC_SECRET
    
    

Quando o aplicativo de contêiner é executado, ele extrai o contêiner do registro de contêiner. Quando você tem imagens maiores, como no caso das cargas de trabalho de IA, a transferência dessas imagens pode levar algum tempo para ser concluída. Ao habilitar o streaming de artefatos, seu aplicativo de contêiner carregará as partes essenciais da imagem primeiro, reduzindo a quantidade de tempo para inicializar seu contêiner. Use as etapas a seguir para habilitar o streaming de artefatos.

Observação

Os comandos a seguir podem levar muito tempo para serem concluídos.

  1. Habilite o streaming de artefatos no registro de contêiner.

    az acr artifact-streaming update \
        --name $ACR_NAME \
        --repository llama-3.1-8b-instruct \
        --enable-streaming True
    
  2. Habilite o streaming de artefatos na imagem do contêiner.

    az acr artifact-streaming create \
      --name $ACR_NAME \
      --image $CONTAINER_AND_TAG
    

Criar seu aplicativo de contêiner

Em seguida, você cria um aplicativo de contêiner com a chave de API de Nuvem da GPU NVIDIA.

  1. Crie o ambiente do aplicativo de contêiner.

    az containerapp env create \
      --name $CONTAINERAPPS_ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    
  2. Adicione o perfil de carga de trabalho de GPU ao seu ambiente.

    az containerapp env workload-profile add \
        --resource-group $RESOURCE_GROUP \
        --name $CONTAINERAPPS_ENVIRONMENT \
        --workload-profile-type $GPU_TYPE \
        --workload-profile-name LLAMA_PROFILE
    
  3. Crie o aplicativo de contêiner.

    az containerapp create \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --environment $CONTAINERAPPS_ENVIRONMENT \
      --image $ACR_NAME.azurecr.io/$CONTAINER_AND_TAG \
      --cpu 24 \
      --memory 220 \
      --target-port 8000 \
      --ingress external \
      --secrets ngc-api-key=<PASTE_NGC_API_KEY_HERE> \
      --env-vars NGC_API_KEY=secretref:ngc-api-key \
      --registry-server $ACR_NAME.azurecr.io \
      --workload-profile-name LLAMA_PROFILE \
      --query properties.configuration.ingress.fqdn
    

    Esse comando retorna a URL do seu aplicativo de contêiner. Defina esse valor de lado em um editor de texto para uso em um comando a seguir.

Observação

Alguns NIMs têm tempos de inicialização mais longos. Para considerar isso, você pode configurar uma investigação de integridade ou definir a contagem de réplicas mínimas do aplicativo do seu contêiner com --min-replicas 1 para manter uma réplica em execução continuamente.

Verificar se o aplicativo funciona

Você pode verificar uma implantação bem-sucedida enviando uma solicitação POST para seu aplicativo.

Antes de executar esse comando, substitua a <YOUR_CONTAINER_APP_URL> URL pela URL do aplicativo de contêiner retornada do comando anterior.

curl -X POST \
  'http://<YOUR_CONTAINER_APP_URL>/v1/completions' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "meta/llama-3.1-8b-instruct",
    "prompt":  [{"role":"user", "content":"Once upon a time..."}],
    "max_tokens": 64
  }'

Aprimorar o desempenho com montagens de volume (opcional)

Ao iniciar e usar o streaming de artefatos com o Registro de Contêiner do Azure, os Aplicativos de Contêiner do Azure ainda estão extraindo as imagens do registro de contêiner na inicialização. Essa ação resulta em um início frio mesmo com o streaming de artefato otimizado.

Para tempos de início a frio ainda mais rápidos, muitos dos NIMs fornecem um caminho de montagem de volume para armazenar sua imagem em um diretório de cache. Você pode usar esse diretório de cache para armazenar os pesos do modelo e outros arquivos que o NIM precisa executar.

Para configurar uma montagem de volume para o Llama3 NIM, você precisa definir uma montagem de volume no ./opt/nim/.cache conforme especificado na documentação do NVIDIA Llama-3.1-8b. Para fazer isso, siga as etapas no tutorial de montagem de volumes e ajuste o caminho de montagem de volume para /opt/nim/.cache.

Limpar os recursos

Se você não quiser continuar a usar este aplicativo, execute o comando a seguir para excluir o grupo de recursos junto com todos os recursos criados neste tutorial.

Cuidado

O comando a seguir exclui o grupo de recursos especificado e todos os recursos contidos nele. Esse comando também exclui todos os recursos fora do escopo deste tutorial que existem neste grupo de recursos.

az group delete --name $RESOURCE_GROUP

Dica

Está enfrentando problemas? Informe-nos no GitHub abrindo uma issue no repositório Aplicativos de Contêiner do Azure.