Partilhar via


Tutorial: Implantar um NVIDIA Llama3 NIM em aplicativos de contêiner do Azure

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

Neste tutorial, você aprenderá a implantar um Llama3 NVIDIA NIM em 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 inicialização a frio ao trabalhar com GPUs sem servidor. Se você não quiser usar um Registro de Contêiner do Azure premium, certifique-se de modificar o az acr create comando neste tutorial para definir --sku como basic.

Pré-requisitos

Recurso Descrição
Conta do Azure Uma conta do Azure com uma assinatura ativa.

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

Configuração

Para entrar no Azure a partir da CLI, execute o seguinte comando 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 Aplicativos de Contêiner do Azure para a CLI.

Se você receber erros sobre parâmetros ausentes ao executar az containerapp comandos na CLI do Azure ou cmdlets do Az.App módulo no PowerShell, certifique-se de ter a versão mais recente 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 não habilitam mais recursos de visualização por padrão. Para acessar os recursos de visualização do Container Apps, instale a extensão Container Apps com --allow-preview trueo .

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

Agora que a extensão ou módulo atual está instalado, registre os Microsoft.App namespaces 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 de registro de contêiner exclusivo.

    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="llama-3.1-8b-instruct:latest"
    

Criar um grupo de recursos do Azure

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

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

    Observação

    Este tutorial usa um Registro de Contêiner do Azure premium para melhorar o desempenho de inicialização a 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
    

Puxe, marque e empurre sua imagem

Em seguida, extraia a imagem da NVIDIA GPU Cloud e envie por push para o Azure Container Registry.

Observação

As NICs NVIDIA têm seus próprios requisitos de hardware. Certifique-se de que o tipo de GPU selecionado suporta o NIM da sua escolha. O Llama3 NIM usado neste tutorial pode ser executado em GPUs NVIDIA A100.

  1. Autentique-se no registro de contêiner NVIDIA.

    docker login nvcr.io
    

    Depois de executar esse comando, o processo de entrada solicita que você insira um nome de usuário. Insira $oauthtoken para o valor do seu nome de usuário.

    Em seguida, ser-lhe-á solicitada uma palavra-passe. Digite sua chave NVIDIA NGC API aqui. Uma vez autenticado no registro NVIDIA, você pode autenticar no registro do Azure.

  2. Autentique-se no Registro de Contêiner do Azure.

    az acr login --name $ACR_NAME
    
  3. Puxe a imagem Llama3 NIM.

    docker pull nvcr.io/nim/meta/$CONTAINER_AND_TAG
    
  4. Etiquete a imagem.

    docker tag nvcr.io/nim/meta/$CONTAINER_AND_TAG $ACR_NAME.azurecr.io/$CONTAINER_AND_TAG
    
  5. Envie a imagem para o Registro de Contêiner do Azure.

    docker push $ACR_NAME.azurecr.io/$CONTAINER_AND_TAG
    

Quando seu aplicativo de contêiner é executado, ele extrai o contêiner do seu registro de contêiner. Quando você tem imagens maiores, como no caso de cargas de trabalho de IA, essa extração de imagem pode levar algum tempo. Ao habilitar o streaming de artefatos, você reduz o tempo necessário e seu aplicativo de contêiner pode levar muito tempo para ser iniciado se você não habilitar o streaming de artefatos. Use as etapas a seguir para habilitar o streaming de artefatos.

Observação

Os comandos a seguir podem levar alguns minutos para serem concluídos.

  1. Habilite o streaming de artefatos em seu 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
    

Crie seu aplicativo de contêiner

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

  1. Crie o aplicativo de contêiner.

    az containerapp env create \
      --name $CONTAINERAPPS_ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION \
      --enable-workload-profiles
    
  2. Adicione o perfil de carga de trabalho da 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
    

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

Verifique se o aplicativo funciona

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

Antes de executar esse comando, substitua a <YOUR_CONTAINER_APP_URL> URL pela URL do aplicativo 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
  }'

Melhorar o desempenho com montagens de volume (opcional)

Ao iniciar e utilizar o streaming de artefactos com o Azure Container Registry, o Azure Container Apps continua a puxar as imagens do registo de contêineres durante a inicialização. Essa ação resulta em um arranque a frio, mesmo com o streaming de artefactos otimizado.

Para tempos de arranque a frio ainda mais rápidos, muitos dos NIMs fornecem um caminho de montagem de volume para armazenar a imagem num 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 NIM Llama3, você precisa definir uma montagem de volume no ./opt/nim/.cache conforme especificado na documentação NVIDIA Llama-3.1-8b. Para fazer isso, siga as etapas no tutorial de montagens de volume e defina o caminho de montagem de volume como /opt/nim/.cache.

Limpeza de recursos

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

Atenção

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

az group delete --name $RESOURCE_GROUP

Sugestão

Tem problemas? Informe-nos no GitHub abrindo um problema no repositório de Aplicativos de Contêiner do Azure.