Triển khai một mô hình AI trên GKE bằng NVIDIA NIM

1. Giới thiệu

Lớp học lập trình thực hành này sẽ hướng dẫn bạn cách triển khai và quản lý một mô hình AI được chứa trong vùng chứa trên Google Kubernetes Engine (GKE), bằng cách sử dụng sức mạnh của các vi dịch vụ NVIDIA NIM™.

Hướng dẫn này dành cho những nhà phát triển và nhà khoa học dữ liệu đang tìm cách:

  • Đơn giản hoá việc triển khai suy luận AI: Tìm hiểu cách sử dụng NIM được tạo sẵn để triển khai các mô hình AI vào quy trình sản xuất trên GKE nhanh chóng và dễ dàng hơn.
  • Tối ưu hoá hiệu suất trên GPU NVIDIA: Trải nghiệm thực tế khi triển khai NIM sử dụng NVIDIA TensorRT để suy luận được tối ưu hoá trên GPU trong cụm GKE.
  • Mở rộng quy mô khối lượng công việc suy luận AI: Khám phá cách mở rộng quy mô việc triển khai NIM dựa trên nhu cầu bằng cách sử dụng Kubernetes để tự động mở rộng quy mô và quản lý tài nguyên điện toán.

2. Kiến thức bạn sẽ học được

Sau khi hoàn thành hướng dẫn này, bạn sẽ có kinh nghiệm về:

  1. Triển khai NIM trên GKE: Triển khai một NIM NVIDIA được tạo sẵn cho nhiều tác vụ suy luận trên cụm GKE của bạn.
  2. Quản lý việc triển khai NIM: Sử dụng các lệnh kubectl để quản lý, giám sát và mở rộng quy mô NIM đã triển khai.
  3. Mở rộng quy mô khối lượng công việc suy luận: Tận dụng các tính năng của Kubernetes để tự động mở rộng quy mô việc triển khai NIM dựa trên nhu cầu về lưu lượng truy cập.

3. Tìm hiểu về các thành phần

GPU trong Google Kubernetes Engine (GKE)

GPU cho phép bạn tăng tốc các khối lượng công việc cụ thể đang chạy trên các nút của mình, chẳng hạn như học máy và xử lý dữ liệu. GKE cung cấp nhiều lựa chọn về loại máy để định cấu hình nút, bao gồm cả các loại máy có GPU NVIDIA H100, L4 và A100.

NVIDIA NIM

NVIDIA NIM là một bộ vi dịch vụ suy luận dễ sử dụng, giúp tăng tốc quá trình triển khai các mô hình cơ sở trên mọi đám mây hoặc trung tâm dữ liệu, đồng thời giúp bảo mật dữ liệu của bạn.

NVIDIA AI Enterprise

NVIDIA AI Enterprise là một nền tảng phần mềm toàn diện, dựa trên đám mây, giúp tăng tốc các quy trình khoa học dữ liệu và hợp lý hoá quá trình phát triển cũng như triển khai các trợ lý ảo cấp sản xuất và các ứng dụng AI tạo sinh khác. Có trên GCP Marketplace.

4. Điều kiện tiên quyết

  • Dự án: Một dự án trên Google Cloud đã bật tính năng thanh toán.
  • Quyền: Đủ quyền để tạo các cụm GKE và các tài nguyên liên quan khác.
  • Helm: Helm là một trình quản lý gói cho Kubernetes.
  • NVIDIA GPU Operator: Một tiện ích bổ sung kubernetes tự động hoá việc quản lý tất cả các thành phần phần mềm NVIDIA cần thiết để cung cấp GPU.
  • Khoá API của NVIDIA: Nhấp vào đường liên kết này rồi làm theo hướng dẫn về cách tạo tài khoản và tạo khoá API. Bạn cần có khoá API để tải vùng chứa NIM xuống.
  • GPU NVIDIA: Một trong các GPU dưới đây sẽ hoạt động (Xin lưu ý rằng bạn có thể làm theo các bước này để yêu cầu tăng hạn mức nếu không có đủ GPU)
  • Không bắt buộcGCloud SDK: Trong trường hợp bạn không sử dụng Cloud Shell trong Cổng GCP, hãy đảm bảo bạn đã cài đặt và định cấu hình Google Cloud SDK.
  • Không bắt buộckubectl: Trong trường hợp bạn không sử dụng Cloud Shell trong Cổng thông tin GCP, vui lòng đảm bảo bạn đã cài đặt và định cấu hình công cụ dòng lệnh kubectl.

5. Tạo một cụm GKE có GPU

  1. Mở Cloud Shell hoặc cửa sổ dòng lệnh.
  2. Chỉ định các tham số sau:
    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
    

Xin lưu ý rằng bạn có thể phải thay đổi các giá trị cho NODE_POOL_MACHINE_TYPE, CLUSTER_MACHINE_TYPE và GPU_TYPE dựa trên loại phiên bản điện toán và GPU mà bạn đang sử dụng.

  1. Tạo cụm GKE:
    gcloud container clusters create ${CLUSTER_NAME} \
        --project=${PROJECT_ID} \
        --location=${ZONE} \
        --release-channel=rapid \
        --machine-type=${CLUSTER_MACHINE_TYPE} \
        --num-nodes=1
    
  2. Tạo nhóm nút 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. Định cấu hình Khoá API NVIDIA NGC

Khoá API NGC cho phép bạn kéo hình ảnh tuỳ chỉnh từ NVIDIA NGC. Cách chỉ định khoá:

export NGC_CLI_API_KEY="<YOUR NGC API KEY>"

Đây là khoá đã được tạo, trong phần Điều kiện tiên quyết.

7. Triển khai và kiểm thử NVIDIA NIM

  1. Tìm nạp biểu đồ 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
    
  2. Tạo một vùng chứa tên NIM:
    kubectl create namespace nim
    
  3. Định cấu hình các khoá bí mật:
    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. Thiết lập cấu hình 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. Triển khai NIM:
    helm install my-nim nim-llm-1.1.2.tgz -f nim_custom_value.yaml --namespace nim
    
    Xác minh rằng nhóm NIM đang chạy:
    kubectl get pods -n nim
    
  6. Kiểm thử việc triển khai NIM:
    Sau khi xác minh rằng dịch vụ NIM của chúng tôi đã được triển khai thành công, chúng tôi có thể đưa ra các yêu cầu suy luận để xem loại ý kiến phản hồi mà chúng tôi sẽ nhận được từ dịch vụ NIM. Để làm việc này, chúng ta bật tính năng chuyển tiếp cổng trên dịch vụ để có thể truy cập vào NIM từ máy chủ cục bộ trên cổng 8000:
    kubectl port-forward service/my-nim-nim-llm 8000:8000 -n nim
    
    Tiếp theo, chúng ta có thể mở một cửa sổ dòng lệnh hoặc thẻ khác trong Cloud Shell và thử yêu cầu sau:
    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
    }'
    
    Nếu bạn nhận được một đoạn tin nhắn hoàn chỉnh từ dịch vụ NIM, tức là dịch vụ này đang hoạt động như dự kiến!

8. Dọn dẹp

Xoá cụm GKE:

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

9. Bước tiếp theo

Hãy xem các bài viết sau để biết thêm thông tin: