教學課程:將 NVIDIA Llama3 NIM 部署至 Azure 容器應用程式

NVIDIA 推論微服務 (NIM) 是最佳化的容器化 AI 推論微服務,可簡化並加速您建置 AI 應用程式的方式。 這些模型已經預先封裝、具可擴展性並且已經最佳化效能,可作為安全端點直接部署在 Azure 容器應用程式上。 當您搭配無伺服器 GPU 使用 Azure Container Apps 時,您可以有效率地執行這些 NIM,而不需要管理基礎結構。

在本教學課程中,您將瞭解如何使用無伺服器 GPU 將 Llama3 NVIDIA NIM 部署至 Azure 容器應用程式。

本教學課程會使用 Azure Container Registry 的進階執行個體,在使用無伺服器 GPU 時改善冷啟動效能。 如果您不想使用進階 Azure 容器登錄,請務必修改本教學課程中的命令,以設定az acr create--skubasic

先決條件

Resource Description
Azure 帳戶 具有有效訂閱的 Azure 帳戶。

如果您沒有,可以免費建立一個
Azure CLI 安裝 Azure CLI
NVIDIA NGC API 金鑰 您可以從 NVIDIA GPU Cloud (NGC) 網站取得 API 金鑰。

設定

若要從 CLI 登入 Azure,請執行下列命令並遵循提示來完成驗證流程。

az login

若要確定您執行的是最新版本 CLI,請執行升級命令。

az upgrade

接下來,安裝或更新 CLI 的 Azure 容器應用程式延伸模組。

如果您在 Azure CLI 中執行 az containerapp 命令或 PowerShell 模組中的 Cmdlet Az.App 時收到遺漏參數的錯誤,請確定您已安裝最新版的 Azure Container Apps 擴充功能。

az extension add --name containerapp --upgrade

備註

從 2024 年 5 月開始,Azure CLI 延伸模組預設不會再啟用預覽功能。 若要存取容器應用程式預覽功能,請使用 --allow-preview true 安裝容器應用程式延伸模組。

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

現在已安裝目前的延伸模組或模組,請註冊 Microsoft.AppMicrosoft.OperationalInsights 命名空間。

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
  1. 藉由命名資源群組並設定位置來設定環境變數。

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

    接下來,產生唯一的容器登錄名稱。

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

    最後,設定變數來命名環境,並識別環境、工作負載設定檔類型、容器應用程式名稱和容器。

    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>
    

建立 Azure 資源群組

建立資源群組,以組織與容器應用程式部署相關的服務。

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION
  1. 建立 Azure Container Registry (ACR)。

    備註

    本教學課程會使用進階 Azure Container Registry 來改善使用無伺服器 GPU 時的冷啟動效能。 如果您不想使用進階 Azure 容器登錄,請修改下列命令,並將 --sku 設定為 basic

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

將 NVIDIA NIM 映像匯入 Azure Container Registry

接下來,將映像從 NVIDIA GPU 雲端匯入 Azure Container Registry。

備註

NVIDIA NIC 每個都有自己的硬體需求。 請確定您選擇的 GPU 類型支援您選擇的 NIM 。 本教學中使用的 Llama3 NIM 可以在 NVIDIA A100 GPU 上執行。

  1. 向 Azure Container Registry 進行驗證。

    az acr login --name $ACR_NAME
    
  2. 將映像推送至 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
    
    

當您的容器應用程式執行時,它會從容器登錄中提取容器。 當您有較大的映像時,例如 AI 工作負載,此映像提取可能需要一些時間。 藉由啟用成品串流,您的容器應用程式會先載入映像的重要部分,從而減少啟動容器的時間量。 使用下列步驟來啟用成品串流。

備註

下列命令可能需要很長時間才能完成。

  1. 在容器登錄中心啟用工件串流。

    az acr artifact-streaming update \
        --name $ACR_NAME \
        --repository llama-3.1-8b-instruct \
        --enable-streaming True
    
  2. 在容器映像上啟用工件串流。

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

建立您的容器應用程式

接下來,您可以使用 NVIDIA GPU 雲端 API 金鑰建立容器應用程式。

  1. 建立容器應用程式環境。

    az containerapp env create \
      --name $CONTAINERAPPS_ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    
  2. 將 GPU 工作負載設定檔新增至您的環境。

    az containerapp env workload-profile add \
        --resource-group $RESOURCE_GROUP \
        --name $CONTAINERAPPS_ENVIRONMENT \
        --workload-profile-type $GPU_TYPE \
        --workload-profile-name LLAMA_PROFILE
    
  3. 建立容器應用程式。

    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
    

    此命令會傳回容器應用程式的 URL。 在文字編輯器中將此值放在一邊,以便在後續命令中使用。

備註

某些 NIM 的啟動時間較長。 若要考慮此問題,您可以設定 健康探測,或設定容器應用程式的最小副本數 --min-replicas 1,以讓副本隨時執行。

驗證應用程式是否正常運作

您可以將請求 POST 請求傳送至應用程式,以驗證部署是否成功。

在執行此命令之前,請確保您將 <YOUR_CONTAINER_APP_URL> 替換為上一個命令返回的容器應用程式 URL。

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

使用磁碟區掛載改善效能 (選用)

啟動並搭配 Azure 容器註冊表使用構件串流時,Azure 容器應用仍會在啟動時從容器註冊表拉取映像。 此動作會導致極非經常性存取啟動,即便使用最佳化的成品串流也是如此。

為了加快極非經常性存取啟動速度,許多 NIM 提供磁區掛載路徑,以將映像儲存在快取目錄中。 您可以使用此快取目錄來儲存 NIM 需要執行的模型加權及其他檔案。

若要設定 Llama3 NIM 的磁碟區掛載,您需要按照 ./opt/nim/.cache中的指定,在 上設定磁碟區掛載。 若要這樣做,請遵循 磁碟區掛載教學課程 中的步驟,並將磁碟區掛載路徑設定為 /opt/nim/.cache

清理資源

如果您不打算繼續使用此應用程式,請執行下列命令來刪除資源群組以及本教學課程中建立的所有資源。

謹慎

下列命令會刪除指定的資源群組和其中包含的所有資源。 此命令也會刪除本教學課程範圍之外存在於此資源群組中的任何資源。

az group delete --name $RESOURCE_GROUP

小提示

有問題嗎? 在 Azure 容器應用程式存放庫 (英文) 中提出問題,讓我們在 GitHub 上了解該問題。