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 היא פלטפורמת תוכנה מקצה לקצה שמבוססת על ענן ומאיצה את תהליכי העבודה של מדע הנתונים, ומייעלת את הפיתוח והפריסה של טייסים אוטומטיים ברמת ייצור ושל אפליקציות אחרות של בינה מלאכותית גנרטיבית. זמין דרך 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 nimkubectl 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. המאמרים הבאים
מידע נוסף זמין במאמרים הבאים: