ทำให้โมเดล AI ใช้งานได้ใน GKE ด้วย NVIDIA NIM

1. บทนำ

Codelab แบบลงมือปฏิบัติจริงนี้จะแนะนำคุณตลอดขั้นตอนการติดตั้งใช้งานและจัดการโมเดล AI ที่เป็นคอนเทนเนอร์บน Google Kubernetes Engine (GKE) โดยใช้ศักยภาพของ ไมโครเซอร์วิส NVIDIA NIM™

บทแนะนำนี้ออกแบบมาสำหรับนักพัฒนาซอฟต์แวร์และนักวิทยาศาสตร์ข้อมูลที่ต้องการทำสิ่งต่อไปนี้

  • ลดความซับซ้อนในการติดตั้งใช้งานการอนุมาน AI: เรียนรู้วิธีใช้ NIM ที่สร้างไว้ล่วงหน้าเพื่อติดตั้งใช้งานโมเดล AI ในการใช้งานจริงบน GKE ได้เร็วขึ้นและง่ายขึ้น
  • เพิ่มประสิทธิภาพบน GPU ของ NVIDIA: รับประสบการณ์จริงในการติดตั้งใช้งาน NIM ที่ใช้ NVIDIA TensorRT เพื่อการอนุมานที่เพิ่มประสิทธิภาพบน GPU ภายในคลัสเตอร์ GKE
  • ปรับขนาดภาระงานการอนุมาน AI: สำรวจวิธีปรับขนาดการติดตั้งใช้งาน NIM ตามความต้องการโดยใช้ Kubernetes เพื่อการปรับขนาดอัตโนมัติและการจัดการทรัพยากรการประมวลผล

2. สิ่งที่คุณจะได้เรียนรู้

เมื่อจบบทแนะนำนี้ คุณจะได้รับประสบการณ์ในการทำสิ่งต่อไปนี้

  1. ติดตั้งใช้งาน NIM บน GKE: ติดตั้งใช้งาน NVIDIA NIM ที่สร้างไว้ล่วงหน้าสำหรับงานการอนุมานต่างๆ บนคลัสเตอร์ GKE
  2. จัดการการติดตั้งใช้งาน NIM: ใช้คำสั่ง kubectl เพื่อจัดการ ตรวจสอบ และปรับขนาด NIM ที่ติดตั้งใช้งาน
  3. ปรับขนาดภาระงานการอนุมาน: ใช้ฟีเจอร์ Kubernetes เพื่อปรับขนาดอัตโนมัติของการติดตั้งใช้งาน NIM ตามความต้องการด้านการรับส่งข้อมูล

3. เรียนรู้เกี่ยวกับคอมโพเนนต์

GPU ใน Google Kubernetes Engine (GKE)

GPU ช่วยให้คุณเร่งความเร็วภาระงานที่เฉพาะเจาะจงซึ่งทำงานบนโหนดได้ เช่น แมชชีนเลิร์นนิงและการประมวลผลข้อมูล GKE มีตัวเลือกประเภทเครื่องที่หลากหลายสำหรับการกำหนดค่าโหนด รวมถึงประเภทเครื่องที่มี GPU NVIDIA H100, L4 และ A100

NVIDIA NIM

NVIDIA NIM เป็นชุดไมโครเซอร์วิสการอนุมานที่ใช้งานง่ายสำหรับการเร่งการติดตั้งใช้งานโมเดลพื้นฐานบนระบบคลาวด์หรือศูนย์ข้อมูลใดก็ได้ และช่วยรักษาความปลอดภัยของข้อมูล

NVIDIA AI Enterprise

NVIDIA AI Enterprise เป็นแพลตฟอร์มซอฟต์แวร์แบบครบวงจรที่ดำเนินการบนระบบคลาวด์ ซึ่งช่วยเร่งไปป์ไลน์วิทยาศาสตร์ข้อมูล และปรับปรุงการพัฒนาและการทำให้ใช้งานได้ของโคไพลอตและแอปพลิเคชัน Generative AI อื่นๆ ระดับการใช้งานจริง มีจำหน่ายผ่าน GCP Marketplace

4. ข้อกำหนดเบื้องต้น

  • โปรเจ็กต์: โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
  • สิทธิ์: สิทธิ์ที่เพียงพอในการสร้างคลัสเตอร์ GKE และทรัพยากรอื่นๆ ที่เกี่ยวข้อง
  • Helm: Helm เป็นตัวจัดการแพ็กเกจสำหรับ Kubernetes
  • NVIDIA GPU Operator: ส่วนเสริม Kubernetes ที่ทำให้การจัดการคอมโพเนนต์ซอฟต์แวร์ทั้งหมดของ NVIDIA ที่จำเป็นสำหรับการจัดสรร GPU เป็นไปโดยอัตโนมัติ
  • คีย์ NVIDIA API: คลิก ลิงก์นี้ แล้วทำตามวิธีการสร้างบัญชีและสร้างคีย์ API คุณจะต้องใช้คีย์ API เพื่อดาวน์โหลดคอนเทนเนอร์ NIM
  • GPU ของ NVIDIA: GPU รายการใดรายการหนึ่งต่อไปนี้ควรทำงานได้ (โปรดทราบว่าคุณสามารถทำตาม ขั้นตอนเหล่านี้ เพื่อขอเพิ่มโควต้า หากคุณมี GPU ไม่เพียงพอ)
  • ไม่บังคับ - GCloud SDK:** ในกรณีที่คุณไม่ได้ใช้ Cloud Shell ในพอร์ทัล GCP โปรดตรวจสอบว่าคุณได้ติดตั้งและกำหนดค่า Google Cloud SDK แล้ว
  • ไม่บังคับ - kubectl:** ในกรณีที่คุณไม่ได้ใช้ Cloud Shell ในพอร์ทัล GCP โปรดตรวจสอบว่าคุณได้ติดตั้งและกำหนดค่าเครื่องมือบรรทัดคำสั่ง kubectl แล้ว

5. สร้างคลัสเตอร์ GKE ที่มี GPU

  1. เปิด Cloud Shell หรือเทอร์มินัล
  2. ระบุพารามิเตอร์ต่อไปนี้
    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
    

โปรดทราบว่าคุณอาจต้องเปลี่ยนค่าสำหรับ NODE_POOL_MACHINE_TYPE, CLUSTER_MACHINE_TYPE และ GPU_TYPE ตามประเภทอินสแตนซ์ Compute และ GPU ที่คุณใช้

  1. สร้างคลัสเตอร์ GKE โดยใช้คำสั่งต่อไปนี้
    gcloud container clusters create ${CLUSTER_NAME} \
        --project=${PROJECT_ID} \
        --location=${ZONE} \
        --release-channel=rapid \
        --machine-type=${CLUSTER_MACHINE_TYPE} \
        --num-nodes=1
    
  2. สร้าง 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. กำหนดค่าคีย์ NVIDIA NGC API

คีย์ NGC API ช่วยให้คุณดึงข้อมูลรูปภาพที่กำหนดเองจาก NVIDIA NGC ได้ วิธีระบุคีย์

export NGC_CLI_API_KEY="<YOUR NGC API KEY>"

นี่คือคีย์ที่สร้างขึ้นซึ่งเป็นส่วนหนึ่งของข้อกำหนดเบื้องต้น

7. ติดตั้งใช้งานและทดสอบ NVIDIA NIM

  1. ดึงข้อมูลแผนภูมิ Helm ของ 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. สร้างเนมสเปซ NIM โดยใช้คำสั่งต่อไปนี้
    kubectl create namespace nim
    
  3. กำหนดค่าข้อมูลลับโดยใช้คำสั่งต่อไปนี้
    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. ตั้งค่าการกำหนดค่า 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. เปิดตัวการติดตั้งใช้งาน NIM โดยใช้คำสั่งต่อไปนี้
    helm install my-nim nim-llm-1.1.2.tgz -f nim_custom_value.yaml --namespace nim
    
    ยืนยันว่าพ็อด NIM ทำงานอยู่โดยใช้คำสั่งต่อไปนี้
    kubectl get pods -n nim
    
  6. ทดสอบการติดตั้งใช้งาน NIM โดยใช้คำสั่งต่อไปนี้:
    เมื่อยืนยันแล้วว่าบริการ NIM ของเราติดตั้งใช้งานเรียบร้อยแล้ว เราจะส่งคำขอการอนุมานเพื่อดูประเภทความคิดเห็นที่เราจะได้รับจากบริการ NIM ในการดำเนินการนี้ เราจะเปิดใช้การส่งต่อพอร์ตในบริการเพื่อให้เข้าถึง NIM จาก localhost ของเราในพอร์ต 8000 ได้โดยใช้คำสั่งต่อไปนี้
    kubectl port-forward service/my-nim-nim-llm 8000:8000 -n nim
    
    จากนั้นเราจะเปิดเทอร์มินัลหรือแท็บอื่นใน Cloud Shell แล้วลองส่งคำขอต่อไปนี้
    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
    }'
    
    หากคุณได้รับการตอบกลับการสนทนาจากบริการ NIM แสดงว่าบริการทำงานตามที่คาดไว้

8. การทำความสะอาดข้อมูล

ลบคลัสเตอร์ GKE โดยใช้คำสั่งต่อไปนี้

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

9. ขั้นตอนถัดไป

ดูข้อมูลเพิ่มเติมได้จากบทความต่อไปนี้