1. מבוא
סקירה כללית
ל-Cloud Run נוספה לאחרונה תמיכה ב-GPU. התכונה זמינה כגרסת Public Preview ברשימת המתנה. אם אתם רוצים לנסות את התכונה, צריך למלא את הטופס הזה כדי להצטרף לרשימת ההמתנה. Cloud Run היא פלטפורמת קונטיינרים ב-Google Cloud שמאפשרת להריץ קוד בקונטיינר בקלות, בלי שתצטרכו לנהל אשכול.
כיום, יחידות ה-GPU הזמינות הן מעבדי GPU Nvidia L4 עם זיכרון vRAM בנפח של 24GB. יש GPU אחד לכל מכונה של Cloud Run, והתאמה לעומס (autoscaling) של Cloud Run עדיין חלה. האפשרויות האלה כוללות התאמה לעומס (scaling out) עד 5 מכונות (אם יש אפשרות להגדיל את המכסה), וגם התאמה לאחור (scaling down) לאפס מכונות כשאין בקשות.
Transformers.js תוכנן להיות מקביל מבחינה פונקציונלית לספריית ה-Python של Hugging Face, כלומר אפשר להריץ את אותם מודלים שהותאמו מראש באמצעות ממשק API דומה מאוד. מידע נוסף זמין באתר של Transformers.js.
בשיעור ה-Codelab הזה תלמדו ליצור אפליקציה ולפרוס אותה ב-Cloud Run באמצעות Transformers.js ו-GPU.
מה תלמדו
- איך מריצים אפליקציה באמצעות Transformers.js ב-Cloud Run באמצעות מעבדי GPU
2. הפעלת ממשקי API והגדרת משתני סביבה
לפני שתתחילו להשתמש בקודלאב הזה, תצטרכו להפעיל כמה ממשקי API. ה-Codelab הזה מחייב שימוש בממשקי ה-API הבאים. כדי להפעיל את ממשקי ה-API האלה, מריצים את הפקודה הבאה:
gcloud services enable run.googleapis.com \ storage.googleapis.com \ cloudbuild.googleapis.com \
לאחר מכן תוכלו להגדיר משתני סביבה שישמשו במהלך הקודלאב הזה.
PROJECT_ID=<YOUR_PROJECT_ID> AR_REPO_NAME=repo REGION=us-central1
3. יצירת האפליקציה Transformers.js
קודם כול, יוצרים ספרייה עבור קוד המקור וה-cd בספרייה הזו.
mkdir transformers-js-codelab && cd $_
יוצרים קובץ package.json
.
{ "name": "huggingface", "version": "1.0.0", "main": "index.js", "type": "module", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "description": "", "dependencies": { "@huggingface/transformers": "^3.0.0-alpha.8", "@xenova/transformers": "^2.17.2", "express": "^4.17.1" } }
יצירת קובץ בשם index.js
import { pipeline } from "@xenova/transformers";
import express from 'express';
// make sure the text-generation pipeline is created first
// before anyone can access the routes
const generator = await pipeline('text-generation', 'Xenova/llama2.c-stories15M', {
device: 'cuda',
dtype: 'fp32',
});
// now create the app and routes
const app = express();
app.get('/', async (req, res) => {
const text = 'A long time ago in a galaxy far far away,';
const output = await generator(text, { max_new_tokens: 50 });
res.send(output);
});
const port = parseInt(process.env.PORT) || 8080;
app.listen(port, () => {
console.log(`transformers-js app: listening on port ${port}`);
});
יוצרים Dockerfile
. קובץ ה-dockerfile יותקן מנהלי התקנים נוספים של NVIDIA שנדרשים ל-Transformers.js
FROM node:20 WORKDIR /usr/src/app RUN apt-get update && \ apt-get install software-properties-common -y && \ wget https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/cuda-keyring_1.1-1_all.deb && \ dpkg -i cuda-keyring_1.1-1_all.deb && \ add-apt-repository contrib && \ apt-get update && \ apt-get -y install cuda-toolkit-12-6 && \ apt-get -y install cudnn-cuda-12 EXPOSE 8080 COPY package.json . RUN npm install COPY index.js . ENTRYPOINT ["node", "index.js"]
4. פיתוח ופריסה של שירות Cloud Run
יוצרים מאגר ב-Artifact Registry.
gcloud artifacts repositories create $AR_REPO_NAME \ --repository-format docker \ --location us-central1
שולחים את הקוד ל-Cloud Build.
IMAGE=us-central1-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/gpu-transformers-js gcloud builds submit --tag $IMAGE
השלב הבא: פריסת האפליקציה ב-Cloud Run
gcloud beta run deploy transformers-js-codelab \ --image=$IMAGE \ --cpu 8 --memory 32Gi \ --gpu=1 --no-cpu-throttling --gpu-type nvidia-l4 \ --allow-unauthenticated \ --region us-central1 \ --project=$PROJECT_ID \ --max-instances 1
5. בדיקת השירות
כדי לבדוק את השירות, מריצים את הפקודה הבאה:
SERVICE_URL=$(gcloud run services describe transformers-js-codelab --region $REGION --format 'value(status.url)') curl $SERVICE_URL
יוצג לכם משהו שדומה לזה:
[{"generated_text":"A long time ago in a galaxy far far away, there was a beautiful garden. Every day, the little girl would go to the garden and look at the flowers. She loved the garden so much that she would come back every day to visit it.\nOne day, the little girl was walking through"}]
6. מעולה!
כל הכבוד על השלמת ה-Codelab!
מומלץ לעיין במסמכי התיעוד בנושא מעבדי GPU ב-Cloud Run.
מה עסקנו בו
- איך מריצים אפליקציה באמצעות Transformers.js ב-Cloud Run באמצעות מעבדי GPU
7. הסרת המשאבים
כדי להימנע מחיובים לא מכוונים (לדוגמה, אם שירותי Cloud Run מופעלים בטעות יותר פעמים מאשר המכסה החודשית שלכם להפעלות של Cloud Run ברמה החינמית), אתם יכולים למחוק את Cloud Run או למחוק את הפרויקט שיצרתם בשלב 2.
כדי למחוק את השירות Cloud Run, צריך להיכנס למסוף Cloud Run Cloud בכתובת https://console.cloud.google.com/run ולמחוק את השירות transformers-js-codelab
.
אם בוחרים למחוק את הפרויקט כולו, אפשר לעבור אל https://console.cloud.google.com/cloud-resource-manager, לבחור את הפרויקט שיצרתם בשלב 2 ולבחור באפשרות Delete (מחיקה). אם תמחקו את הפרויקט, תצטרכו לשנות את הפרויקטים ב-Cloud SDK. כדי להציג את רשימת כל הפרויקטים הזמינים, מריצים את הפקודה gcloud projects list
.