1. Pengantar
Codelab praktik ini akan memandu Anda men-deploy dan mengelola model AI dalam container di Google Kubernetes Engine (GKE), menggunakan kemampuan microservice NVIDIA NIM™.
Tutorial ini dirancang untuk developer dan data scientist yang ingin:
- Menyederhanakan deployment inferensi AI: Pelajari cara menggunakan NIM bawaan untuk deployment model AI yang lebih cepat dan mudah ke dalam produksi di GKE.
- Mengoptimalkan performa di GPU NVIDIA: Dapatkan pengalaman langsung dalam men-deploy NIM yang menggunakan NVIDIA TensorRT untuk inferensi yang dioptimalkan di GPU dalam cluster GKE Anda.
- Menskalakan workload inferensi AI: Pelajari cara menskalakan deployment NIM berdasarkan permintaan menggunakan Kubernetes untuk penskalaan otomatis dan pengelolaan resource komputasi.
2. Yang akan Anda pelajari
Setelah menyelesaikan tutorial ini, Anda akan memiliki pengalaman dalam:
- Men-deploy NIM di GKE: Men-deploy NVIDIA NIM bawaan untuk berbagai tugas inferensi ke cluster GKE Anda.
- Mengelola deployment NIM: Menggunakan perintah kubectl untuk mengelola, memantau, dan menskalakan NIM yang di-deploy.
- Menskalakan workload inferensi: Menggunakan fitur Kubernetes untuk menskalakan otomatis deployment NIM berdasarkan permintaan traffic.
3. Mempelajari komponen
GPU di Google Kubernetes Engine (GKE)
GPU memungkinkan Anda mempercepat workload tertentu yang berjalan di node, seperti machine learning dan pemrosesan data. GKE menyediakan berbagai opsi jenis mesin untuk konfigurasi node, termasuk jenis mesin dengan GPU NVIDIA H100, L4, dan A100.
NVIDIA NIM
NVIDIA NIM adalah sekumpulan microservice inferensi yang mudah digunakan untuk mempercepat deployment model dasar di cloud atau pusat data mana pun dan membantu menjaga keamanan data Anda.
NVIDIA AI Enterprise
NVIDIA AI Enterprise adalah platform software berbasis cloud end-to-end yang mempercepat pipeline ilmu data dan menyederhanakan pengembangan serta deployment co-pilot kelas produksi dan aplikasi AI generatif lainnya. Tersedia melalui GCP Marketplace.
4. Prasyarat
- Project: Project Google Cloud yang mengaktifkan penagihan.
- Izin: Izin yang memadai untuk membuat cluster GKE dan resource terkait lainnya.
- Helm: Helm adalah pengelola paket untuk Kubernetes.
- Operator GPU NVIDIA: Add-on Kubernetes yang mengotomatiskan pengelolaan semua komponen software NVIDIA yang diperlukan untuk menyediakan GPU.
- Kunci API NVIDIA: Klik link ini, lalu ikuti petunjuk cara membuat akun dan membuat Kunci API. Kunci API akan diperlukan untuk mendownload container NIM.
- GPU NVIDIA: Salah satu GPU di bawah ini akan berfungsi (Perhatikan bahwa Anda dapat mengikuti langkah-langkah ini untuk meminta peningkatan kuota, jika Anda tidak memiliki GPU yang cukup)
- Opsional - GCloud SDK:** Jika Anda tidak menggunakan Cloud Shell di Portal GCP, pastikan Anda telah menginstal dan mengonfigurasi Google Cloud SDK.
- Opsional - kubectl:** Jika Anda tidak menggunakan Cloud Shell di Portal GCP, pastikan Anda telah menginstal dan mengonfigurasi alat command line kubectl.
5. Membuat cluster GKE dengan GPU
- Buka Cloud Shell atau terminal Anda.
- Tentukan parameter berikut:
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
Perhatikan bahwa Anda mungkin harus mengubah nilai untuk NODE_POOL_MACHINE_TYPE, CLUSTER_MACHINE_TYPE, dan GPU_TYPE berdasarkan jenis Instance Compute dan GPU yang Anda gunakan.
- Buat Cluster GKE:
gcloud container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --location=${ZONE} \ --release-channel=rapid \ --machine-type=${CLUSTER_MACHINE_TYPE} \ --num-nodes=1 - Buat node pool 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. Mengonfigurasi Kunci API NVIDIA NGC
Kunci API NGC memungkinkan Anda mengambil image kustom dari NVIDIA NGC. Untuk menentukan kunci Anda:
export NGC_CLI_API_KEY="<YOUR NGC API KEY>"
Ini adalah kunci yang dibuat, sebagai bagian dari Prasyarat.
7. Men-deploy dan menguji NVIDIA NIM
- Ambil Diagram Helm LLM NIM:
helm fetch https://helm.ngc.nvidia.com/nim/charts/nim-llm-1.3.0.tgz --username='$oauthtoken' --password=$NGC_CLI_API_KEY - Buat Namespace NIM:
kubectl create namespace nim - Konfigurasi secret:
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 - Siapkan Konfigurasi 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 - Mulai deployment NIM:
Verifikasi bahwa pod NIM berjalan:helm install my-nim nim-llm-1.1.2.tgz -f nim_custom_value.yaml --namespace nimkubectl get pods -n nim - Menguji deployment NIM:
Setelah memverifikasi bahwa layanan NIM berhasil di-deploy, kita dapat membuat permintaan inferensi untuk melihat jenis masukan yang akan kita terima dari layanan NIM. Untuk melakukannya, kita mengaktifkan penerusan port pada layanan agar dapat mengakses NIM dari localhost di port 8000: Selanjutnya, kita dapat membuka terminal atau tab lain di Cloud Shell dan mencoba permintaan berikut:kubectl port-forward service/my-nim-nim-llm 8000:8000 -n nim Jika Anda mendapatkan penyelesaian chat dari layanan NIM, berarti layanan tersebut berfungsi seperti yang diharapkan.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. Pembersihan
Hapus cluster GKE:
gcloud container clusters delete $CLUSTER_NAME --zone=$ZONE
9. Langkah berikutnya
Lihat artikel berikut untuk mengetahui informasi selengkapnya: