1. 簡介
這個實作程式碼研究室將引導您使用 NVIDIA NIM™ 微服務,在 Google Kubernetes Engine (GKE) 上部署及管理容器化 AI 模型。
本教學課程適用於想達成下列目標的開發人員和資料科學家:
- 簡化 AI 推論部署作業:瞭解如何使用預先建構的 NIM,在 GKE 中更快更輕鬆地將 AI 模型部署到正式環境。
- 提升 NVIDIA GPU 效能:實際操作,在 GKE 叢集內部署使用 NVIDIA TensorRT 的 NIM,在 GPU 上執行最佳化推論作業。
- 調度 AI 推論工作負載:瞭解如何使用 Kubernetes 自動調度及管理運算資源,根據需求調度 NIM 部署作業。
2. 學習內容
完成本教學課程後,您將能:
- 在 GKE 上部署 NIM:將預先建構的 NVIDIA NIM 部署至 GKE 叢集,執行各種推論工作。
- 管理 NIM 部署作業:使用 kubectl 指令管理、監控及調度已部署的 NIM。
- 調度推論工作負載:運用 Kubernetes 功能,根據流量需求自動調度 NIM 部署作業。
3. 瞭解元件
Google Kubernetes Engine (GKE) 中的 GPU
GPU 可加速處理節點上執行的特定工作負載,例如機器學習和資料處理。GKE 提供各種機器類型選項,供您設定節點,包括搭載 NVIDIA H100、L4 和 A100 GPU 的機器類型。
NVIDIA NIM
NVIDIA NIM 是一組易於使用的推論微服務,可加速在任何雲端或資料中心部署基礎模型,並協助確保資料安全。
NVIDIA AI Enterprise
NVIDIA AI Enterprise 是端對端的雲端原生軟體平台,可加速資料科學 pipeline,並簡化正式環境副駕駛和其他生成式 AI 應用程式的開發與部署作業。可透過 GCP Marketplace 取得。
4. 必要條件
- 專案:啟用計費功能的 Google Cloud 專案。
- 權限:有足夠的權限可建立 GKE 叢集和其他相關資源。
- Helm:Helm 是 Kubernetes 的套件管理工具。
- NVIDIA GPU 運算子:Kubernetes 外掛程式,可自動管理佈建 GPU 時所需的所有 NVIDIA 軟體元件。
- NVIDIA API 金鑰:按一下這個連結,然後按照說明建立帳戶並產生 API 金鑰。下載 NIM 容器時需要 API 金鑰。
- NVIDIA GPU:下列其中一種 GPU 應可運作 (請注意,如果 GPU 不足,您可以按照這些步驟申請增加配額)
- 選用 - GCloud SDK:** 如果您未使用 Google Cloud Platform 入口網站中的 Cloud Shell,請務必安裝及設定 Google Cloud SDK。
- 選用 - kubectl:如果您未使用 GCP 入口網站中的 Cloud Shell,請務必安裝及設定 kubectl 指令列工具。
5. 建立搭載 GPU 的 GKE 叢集
- 開啟 Cloud Shell 或終端機。
- 請指定以下參數:
export PROJECT_ID=<YOUR PROJECT ID> export REGION=<YOUR REGION> export ZONE=<YOUR ZONE> export CLUSTER_NAME=nim-demo export NODE_POOL_MACHINE_TYPE=g2-standard-16 export CLUSTER_MACHINE_TYPE=e2-standard-4 export GPU_TYPE=nvidia-l4 export GPU_COUNT=1
請注意,您可能必須根據使用的 Compute 執行個體和 GPU 類型,變更 NODE_POOL_MACHINE_TYPE、CLUSTER_MACHINE_TYPE 和 GPU_TYPE 的值。
- 建立 GKE 叢集:
gcloud container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --location=${ZONE} \ --release-channel=rapid \ --machine-type=${CLUSTER_MACHINE_TYPE} \ --num-nodes=1
- 建立 GPU 節點集區:
gcloud container node-pools create gpupool \ --accelerator type=${GPU_TYPE},count=${GPU_COUNT},gpu-driver-version=latest \ --project=${PROJECT_ID} \ --location=${ZONE} \ --cluster=${CLUSTER_NAME} \ --machine-type=${NODE_POOL_MACHINE_TYPE} \ --num-nodes=1
6. 設定 NVIDIA NGC API 金鑰
NGC API 金鑰可讓您從 NVIDIA NGC 提取自訂映像檔。如要指定金鑰:
export NGC_CLI_API_KEY="<YOUR NGC API KEY>"
這是產生的金鑰,屬於必要條件的一部分。
7. 部署及測試 NVIDIA NIM
- 擷取 NIM LLM Helm 資訊套件:
helm fetch https://helm.ngc.nvidia.com/nim/charts/nim-llm-1.3.0.tgz --username='$oauthtoken' --password=$NGC_CLI_API_KEY
- 建立 NIM 命名空間:
kubectl create namespace nim
- 設定密鑰:
kubectl create secret docker-registry registry-secret --docker-server=nvcr.io --docker-username='$oauthtoken' --docker-password=$NGC_CLI_API_KEY -n nim kubectl create secret generic ngc-api --from-literal=NGC_API_KEY=$NGC_CLI_API_KEY -n nim
- 設定 NIM 設定:
cat <<EOF > nim_custom_value.yaml image: repository: "nvcr.io/nim/meta/llama3-8b-instruct" # container location tag: 1.0.0 # NIM version you want to deploy model: ngcAPISecret: ngc-api # name of a secret in the cluster that includes a key named NGC_CLI_API_KEY and is an NGC API key persistence: enabled: true imagePullSecrets: - name: registry-secret # name of a secret used to pull nvcr.io images, see https://kubernetes.io/docs/tasks/ configure-pod-container/pull-image-private-registry/ EOF
- 啟動 NIM 部署作業:
確認 NIM Pod 正在執行:helm install my-nim nim-llm-1.1.2.tgz -f nim_custom_value.yaml --namespace nim
kubectl get pods -n nim
- 測試 NIM 部署作業:
確認 NIM 服務部署成功後,我們就可以提出推論要求,瞭解 NIM 服務會提供哪種意見回饋。為此,我們會在服務上啟用通訊埠轉送,以便透過通訊埠 8000 上的 localhost 存取 NIM: 接著,我們可以在 Cloud Shell 中開啟另一個終端機或分頁,然後嘗試下列要求:kubectl port-forward service/my-nim-nim-llm 8000:8000 -n nim
如果從 NIM 服務取得對話完成結果,表示服務運作正常!curl -X 'POST' \ 'http://localhost:8000/v1/chat/completions' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "messages": [ { "content": "You are a polite and respectful chatbot helping people plan a vacation.", "role": "system" }, { "content": "What should I do for a 4 day vacation in Spain?", "role": "user" } ], "model": "meta/llama3-8b-instruct", "max_tokens": 128, "top_p": 1, "n": 1, "stream": false, "stop": "\n", "frequency_penalty": 0.0 }'
8. 清除
刪除 GKE 叢集:
gcloud container clusters delete $CLUSTER_NAME --zone=$ZONE
9. 後續步驟
詳情請參閱下列文章: