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 ออกแบบมาให้ทำงานเทียบเท่ากับไลบรารี Transformers Python ของ Hugging Face ซึ่งหมายความว่าคุณสามารถเรียกใช้โมเดลที่ผ่านการฝึกล่วงหน้าเดียวกันโดยใช้ API ที่คล้ายกันมาก ดูข้อมูลเพิ่มเติมได้ที่เว็บไซต์ Transformers.js
ในโค้ดแล็บนี้ คุณจะได้สร้างและทำให้แอปใช้งานได้ใน 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 ของ 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