Dela via


Självstudie: Distribuera en NVIDIA Llama3 NIM till Azure Container Apps

NVIDIA Inference Microservices (NIM) är optimerade, containerbaserade AI-slutsatsdragningsmikrotjänster som förenklar och påskyndar hur du skapar AI-program. Dessa modeller är förpaketerade, skalbara och prestandajusterade för direkt distribution som säkra slutpunkter i Azure Container Apps. När du använder Azure Container Apps med GPU:er utan serverhantering, kan du köra dessa NIMs effektivt utan att behöva hantera den underliggande infrastrukturen.

I den här handledningen lär du dig att distribuera en Llama3 NVIDIA NIM till Azure Container Apps med hjälp av serverfria GPU:er.

I den här självstudien används en premiuminstans av Azure Container Registry för att förbättra prestandan vid kallstart när man arbetar med serverlösa GPU:er. Om du inte vill använda ett Premium Azure Container Registry måste du ändra kommandot i den här handledningen az acr create så att du sätter --sku till basic.

Förutsättningar

Resurs Beskrivning
Azure-konto Ett Azure-konto med en aktiv prenumeration.

Om du inte har någon sådan nu kan du skapa en kostnadsfritt.
Azure CLI (kommandoradsgränssnittet för Azure) Installera verktyget Azure CLI.
NVIDIA NGC API-nyckel Du kan hämta en API-nyckel från NVIDIA GPU Cloud-webbplatsen (NGC).

Inställningar

Om du vill logga in på Azure från CLI kör du följande kommando och följer anvisningarna för att slutföra autentiseringsprocessen.

az login

Kör uppgraderingskommandot för att säkerställa att du kör den senaste versionen av CLI.

az upgrade

Installera eller uppdatera sedan Azure Container Apps-tillägget för CLI.

Om du får fel om saknade parametrar när du kör az containerapp kommandon i Azure CLI eller cmdlets från modulen Az.App i PowerShell, kontrollera att den senaste versionen av Azure Container Apps-tillägget är installerad.

az extension add --name containerapp --upgrade

Anmärkning

Från och med maj 2024 aktiverar Azure CLI-tillägg inte längre förhandsversionsfunktioner som standard. Om du vill komma åt förhandsversionsfunktioner för Container Apps installerar du containerapptillägget med --allow-preview true.

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

Nu när det aktuella tillägget eller modulen har installerats registrerar du Microsoft.App namnrymderna och Microsoft.OperationalInsights .

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
  1. Konfigurera miljövariabler genom att namnge resursgruppen och ange platsen.

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

    Generera sedan ett unikt containerregisternamn.

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

    Ange slutligen variabler för att namnge miljön och identifiera miljön, arbetsbelastningsprofiltypen, containerappens namn och container.

    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>
    

Skapa en Azure-resursgrupp

Skapa en resursgrupp för att organisera de tjänster som är relaterade till distributionen av containerappen.

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION
  1. Skapa en ACR (Azure Container Registry).

    Anmärkning

    I den här självstudien används ett premium Azure Container Registry för att förbättra kallstartsprestandan vid arbete med serverlösa GPU:er. Om du inte vill använda ett Premium Azure Container Registry ändrar du följande kommando och anger --sku till basic.

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

Importera NVIDIA NIM-avbildningen till Ditt Azure Container Registry

Importera sedan avbildningen från NVIDIA GPU Cloud till Azure Container Registry.

Anmärkning

NVIDIA-nätverkskort har var och en sina egna maskinvarukrav. Kontrollera att den GPU-typ som du väljer stöder valfri NIM . Llama3 NIM som används i den här handledningen kan användas med NVIDIA A100 GPU:er.

  1. Autentisera till Azure Container Registry.

    az acr login --name $ACR_NAME
    
  2. Skicka avbildningen till Azure Container Registry.

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

När containerappen körs hämtas containern från containerregistret. När du har större avbildningar som vid AI-arbetsbelastningar kan det ta tid att hämta avbildningen. Genom att aktivera artefaktströmning läser containerappen in de viktigaste delarna av avbildningen först, vilket minskar tiden för att starta containern. Använd följande steg för att aktivera artefaktströmning.

Anmärkning

Följande kommandon kan ta lång tid att slutföra.

  1. Aktivera artefaktströmning i ditt containerregister.

    az acr artifact-streaming update \
        --name $ACR_NAME \
        --repository llama-3.1-8b-instruct \
        --enable-streaming True
    
  2. Aktivera artefaktströmning på containeravbildningen.

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

Skapa din containerapp

Sedan skapar du en containerapp med NVIDIA GPU Cloud API-nyckeln.

  1. Skapa containerappmiljön.

    az containerapp env create \
      --name $CONTAINERAPPS_ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    
  2. Lägg till GPU-arbetsbelastningsprofilen i din miljö.

    az containerapp env workload-profile add \
        --resource-group $RESOURCE_GROUP \
        --name $CONTAINERAPPS_ENVIRONMENT \
        --workload-profile-type $GPU_TYPE \
        --workload-profile-name LLAMA_PROFILE
    
  3. Skapa containerappen.

    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
    

    Det här kommandot returnerar URL:en för containerappen. Lägg det här värdet åt sidan i en textredigerare för användning i följande kommando.

Anmärkning

Vissa nätverksmoduler har längre starttider. För att ta hänsyn till detta kan du konfigurera en hälsoavsökning eller ställa in containerappens minsta replikantal med --min-replicas 1 för att hålla en replik igång hela tiden.

Kontrollera att programmet fungerar

Du kan verifiera en lyckad distribution genom att skicka en begäran POST till ditt program.

Innan du kör det här kommandot måste du ersätta URL:en med containerappens <YOUR_CONTAINER_APP_URL> URL som returnerades från föregående kommando.

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
  }'

Förbättra prestanda med volymmonteringar (valfritt)

När du startar och använder artefaktströmning med Azure Container Registry hämtar Azure Container Apps fortfarande avbildningarna från containerregistret vid start. Den här åtgärden resulterar i en kall start även med optimerad artefaktströmning.

För ännu snabbare kallstarttider tillhandahåller många av NIM:arna en volymmount för att lagra avbildningen i en cachekatalog. Du kan använda den här cachekatalogen för att lagra modellvikter och andra filer som NIM behöver köra.

Om du vill konfigurera en volymmontering för Llama3 NIM måste du ställa in en volymmontering på ./opt/nim/.cache såsom anges i NVIDIA Llama-3.1-8b-dokumentationen. Det gör du genom att följa stegen i självstudien om volymmonteringar och ange volymmonteringssökvägen till /opt/nim/.cache.

Rensa resurser

Om du inte fortsätter att använda det här programmet kör du följande kommando för att ta bort resursgruppen tillsammans med alla resurser som skapats i den här självstudien.

Försiktighet

Följande kommando tar bort den angivna resursgruppen och alla resurser som ingår i den. Det här kommandot tar också bort alla resurser som ligger utanför omfattningen av denna handledning och som finns i den här resursgruppen.

az group delete --name $RESOURCE_GROUP

Tips/Råd

Har du problem? Meddela oss på GitHub genom att öppna ett problem i Azure Container Apps-lagringsplatsen.