1. บทนำ
Codelab แบบลงมือปฏิบัตินี้จะแนะนำวิธีทำให้โมเดล AI ที่มีคอนเทนเนอร์ใช้งานได้และจัดการโมเดลดังกล่าวใน Google Kubernetes Engine (GKE) โดยใช้ความสามารถของไมโครเซอร์วิส NVIDIA NIM™
บทแนะนำนี้ออกแบบมาสำหรับนักพัฒนาซอฟต์แวร์และนักวิทยาศาสตร์ข้อมูลที่ต้องการทำสิ่งต่อไปนี้
- ลดความซับซ้อนในการติดตั้งใช้งานการอนุมาน AI: ดูวิธีใช้ NIM ที่สร้างไว้ล่วงหน้าเพื่อติดตั้งใช้งานโมเดล AI ในการผลิตบน GKE ได้เร็วและง่ายขึ้น
- เพิ่มประสิทธิภาพใน GPU ของ NVIDIA: รับประสบการณ์การใช้งานจริงในการติดตั้งใช้งาน NIM ที่ใช้ NVIDIA TensorRT เพื่อการอนุมานที่เพิ่มประสิทธิภาพใน GPU ภายในคลัสเตอร์ GKE
- ปรับขนาดภาระงานการอนุมาน AI: ดูวิธีปรับขนาดการติดตั้งใช้งาน NIM ตามความต้องการโดยใช้ Kubernetes เพื่อการปรับขนาดอัตโนมัติและการจัดการทรัพยากรการประมวลผล
2. สิ่งที่คุณจะได้เรียนรู้
เมื่อจบบทแนะนำนี้ คุณจะได้รับประสบการณ์ในการทำสิ่งต่อไปนี้
- การติดตั้งใช้งาน NIM ใน GKE: ติดตั้งใช้งาน NVIDIA NIM ที่สร้างไว้ล่วงหน้าสำหรับงานการอนุมานต่างๆ ในคลัสเตอร์ GKE
- การจัดการการติดตั้งใช้งาน NIM: ใช้คำสั่ง kubectl เพื่อจัดการ ตรวจสอบ และปรับขนาด NIM ที่ติดตั้งใช้งาน
- การปรับขนาดภาระงานการอนุมาน: ใช้ฟีเจอร์ 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
- ตัวดำเนินการ GPU ของ NVIDIA: ส่วนเสริม Kubernetes ที่ช่วยจัดการคอมโพเนนต์ซอฟต์แวร์ทั้งหมดของ NVIDIA ที่จำเป็นต่อการจัดสรร GPU โดยอัตโนมัติ
- คีย์ API ของ NVIDIA: คลิกลิงก์นี้ แล้วทำตามวิธีการสร้างบัญชีและสร้างคีย์ API คุณจะต้องมีคีย์ API เพื่อดาวน์โหลดคอนเทนเนอร์ NIM
- GPU ของ NVIDIA: GPU อย่างใดอย่างหนึ่งต่อไปนี้ควรใช้งานได้ (โปรดทราบว่าคุณทำตามขั้นตอนเหล่านี้เพื่อขอเพิ่มโควต้าได้ หากมี GPU ไม่เพียงพอ)
- ไม่บังคับ - GCloud SDK: หากไม่ได้ใช้ Cloud Shell ในพอร์ทัล GCP โปรดตรวจสอบว่าคุณได้ติดตั้งและกำหนดค่า Google Cloud SDK แล้ว
- ไม่บังคับ - kubectl: หากไม่ได้ใช้ Cloud Shell ในพอร์ทัล GCP โปรดตรวจสอบว่าคุณได้ติดตั้งและกำหนดค่าเครื่องมือบรรทัดคำสั่ง kubectl แล้ว
5. สร้างคลัสเตอร์ GKE ที่มี GPU
- เปิด 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
โปรดทราบว่าคุณอาจต้องเปลี่ยนค่าสำหรับ NODE_POOL_MACHINE_TYPE, CLUSTER_MACHINE_TYPE และ GPU_TYPE โดยอิงตามประเภทอินสแตนซ์ Compute และ GPU ที่คุณใช้
- สร้างคลัสเตอร์ GKE
gcloud container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --location=${ZONE} \ --release-channel=rapid \ --machine-type=${CLUSTER_MACHINE_TYPE} \ --num-nodes=1
- สร้าง 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. กำหนดค่าคีย์ API ของ NVIDIA NGC
คีย์ API ของ NGC ช่วยให้คุณดึงอิมเมจที่กำหนดเองจาก NVIDIA NGC ได้ วิธีระบุคีย์
export NGC_CLI_API_KEY="<YOUR NGC API KEY>"
นี่คือคีย์ที่สร้างขึ้น ซึ่งเป็นส่วนหนึ่งของข้อกำหนดเบื้องต้น
7. ติดตั้งใช้งานและทดสอบ NVIDIA NIM
- ดึงแผนภูมิ 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
- สร้างเนมสเปซ 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 ทำงานอยู่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 ในการดำเนินการนี้ เราจะเปิดใช้การส่งต่อพอร์ตในบริการเพื่อให้เข้าถึง NIM จาก localhost ในพอร์ต 8000 ได้ จากนั้นเราจะเปิดเทอร์มินัลหรือแท็บอื่นใน 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. ขั้นตอนถัดไป
ดูข้อมูลเพิ่มเติมได้ที่บทความต่อไปนี้