1. บทนำ
ภาพรวม
เมื่อเร็วๆ นี้ Cloud Run ได้เพิ่มการรองรับ GPU โดยพร้อมให้บริการเป็นเวอร์ชันตัวอย่างแบบสาธารณะที่ต้องลงชื่อสมัครใช้ หากสนใจลองใช้ฟีเจอร์นี้ โปรดกรอกแบบฟอร์มนี้เพื่อเข้าร่วมรายชื่อผู้รอใช้ Cloud Run เป็นแพลตฟอร์มคอนเทนเนอร์ใน Google Cloud ที่ช่วยให้คุณเรียกใช้โค้ดในคอนเทนเนอร์ได้อย่างตรงไปตรงมาโดยไม่ต้องจัดการคลัสเตอร์
ปัจจุบัน GPU ที่เราให้บริการคือ GPU Nvidia L4 ที่มี vRAM 24 GB มี GPU 1 ตัวต่ออินสแตนซ์ Cloud Run และการปรับขนาดอัตโนมัติของ Cloud Run ยังคงมีผล ซึ่งรวมถึงการเพิ่มขนาดสูงสุด 5 อินสแตนซ์ (โดยมีการเพิ่มโควต้า) รวมถึงการลดขนาดเป็น 0 อินสแตนซ์เมื่อไม่มีคำขอ
Transformers.js ออกแบบมาให้เทียบเท่ากับไลบรารี Python ของ Transformers ของ Hugging Face ซึ่งหมายความว่าคุณสามารถเรียกใช้โมเดลที่ผ่านการฝึกมาก่อนเดียวกันได้โดยใช้ API ที่คล้ายกันมาก ดูข้อมูลเพิ่มเติมได้ที่เว็บไซต์ Transformers.js
ในโค้ดแล็บนี้ คุณจะได้สร้างและติดตั้งใช้งานแอปใน Cloud Run ที่ใช้ Transformers.js และ GPU
สิ่งที่คุณจะได้เรียนรู้
- วิธีเรียกใช้แอปโดยใช้ Transformers.js ใน Cloud Run โดยใช้ GPU
2. เปิดใช้ API และตั้งค่าตัวแปรสภาพแวดล้อม
ก่อนที่จะเริ่มใช้ Codelab นี้ได้ คุณจะต้องเปิดใช้ 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 Console ของ Cloud Run ที่ https://console.cloud.google.com/run แล้วลบtransformers-js-codelabบริการ
หากเลือกที่จะลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่พร้อมใช้งานได้โดยเรียกใช้ gcloud projects list