Men-deploy model AI di GKE dengan NVIDIA NIM

1. Pengantar

Codelab interaktif ini akan memandu Anda men-deploy dan mengelola model AI dalam container di Google Kubernetes Engine (GKE), menggunakan kecanggihan microservice NVIDIA NIM™.

Tutorial ini dirancang untuk developer dan ilmuwan data yang ingin:

  • Menyederhanakan deployment inferensi AI: Pelajari cara menggunakan NIM bawaan untuk men-deploy model AI ke produksi di GKE dengan lebih cepat dan mudah.
  • 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:

  1. Men-deploy NIM di GKE: Deploy NVIDIA NIM yang telah dibuat sebelumnya untuk berbagai tugas inferensi ke cluster GKE Anda.
  2. Mengelola deployment NIM: Gunakan perintah kubectl untuk mengelola, memantau, dan menskalakan NIM yang di-deploy.
  3. Menskalakan workload inferensi: Manfaatkan fitur Kubernetes untuk menskalakan otomatis deployment NIM Anda berdasarkan permintaan traffic.

3. Mempelajari komponen

GPU di Google Kubernetes Engine (GKE)

GPU memungkinkan Anda mempercepat workload tertentu yang berjalan di node Anda, 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 serangkaian 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 menyeluruh berbasis cloud yang mempercepat pipeline data science serta menyederhanakan pengembangan dan deployment kopilot kelas produksi dan aplikasi AI generatif lainnya. Tersedia melalui GCP Marketplace.

4. Prasyarat

  • Project: Project Google Cloud dengan penagihan diaktifkan.
  • 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 tentang 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, Anda dapat mengikuti langkah-langkah ini untuk meminta peningkatan kuota, jika Anda tidak memiliki cukup GPU)
  • 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

  1. Buka Cloud Shell atau terminal Anda.
  2. 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.

  1. 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
    
  2. 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 menarik 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

  1. Ambil Helm Chart NIM LLM:
    helm fetch https://helm.ngc.nvidia.com/nim/charts/nim-llm-1.3.0.tgz --username='$oauthtoken' --password=$NGC_CLI_API_KEY
    
  2. Buat Namespace NIM:
    kubectl create namespace nim
    
  3. Mengonfigurasi 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
    
  4. Menyiapkan 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
    
  5. Meluncurkan deployment NIM:
    helm install my-nim nim-llm-1.1.2.tgz -f nim_custom_value.yaml --namespace nim
    
    Verifikasi bahwa pod NIM sedang berjalan:
    kubectl get pods -n nim
    
  6. Menguji deployment NIM:
    Setelah kami memverifikasi bahwa layanan NIM kami berhasil di-deploy, kami dapat membuat permintaan inferensi untuk melihat jenis masukan yang akan kami terima dari layanan NIM. Untuk melakukannya, kita mengaktifkan penerusan port pada layanan agar dapat mengakses NIM dari localhost di port 8000:
    kubectl port-forward service/my-nim-nim-llm 8000:8000 -n nim
    
    Selanjutnya, kita dapat membuka terminal atau tab lain di Cloud Shell dan mencoba permintaan berikut:
    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
    }'
    
    Jika Anda mendapatkan penyelesaian chat dari layanan NIM, berarti layanan tersebut berfungsi seperti yang diharapkan.

8. Pembersihan

Hapus cluster GKE:

gcloud container clusters delete $CLUSTER_NAME --zone=$ZONE

9. Langkah berikutnya

Baca artikel berikut untuk mengetahui informasi selengkapnya: