1. מבוא
בשיעור ה-Lab המעשי הזה תלמדו איך לפרוס מודל 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 היא פלטפורמת תוכנה מקצה לקצה, מבוססת-ענן, שמאיצה את צינורות עיבוד הנתונים ומייעלת את הפיתוח והפריסה של טייסים אוטומטיים ברמת ייצור ושל אפליקציות אחרות של AI גנרטיבי. זמין דרך GCP Marketplace.
4. דרישות מוקדמות
- פרויקט: פרויקט ב-Google Cloud שהחיוב בו מופעל.
- הרשאות: הרשאות מספיקות ליצירת אשכולות GKE ומשאבים קשורים אחרים.
- Helm: Helm הוא מנהל חבילות ל-Kubernetes.
- NVIDIA GPU Operator: תוסף ל-Kubernetes שמבצע אוטומטית את הניהול של כל רכיבי התוכנה של NVIDIA שנדרשים להקצאת GPU.
- מפתח NVIDIA API: לוחצים על הקישור הזה ופועלים לפי ההוראות ליצירת חשבון וליצירת מפתח API. כדי להוריד את מאגר התגים של NIM, צריך מפתח API.
- מעבדי 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
- יצירת מאגר צמתים של 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
מפתח ה-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 מהמחשב המקומי שלנו ביציאה 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. המאמרים הבאים
מידע נוסף זמין במאמרים הבאים: