Cách chạy Transformers.js trên GPU Cloud Run

1. Giới thiệu

Tổng quan

Gần đây, Cloud Run đã thêm tính năng hỗ trợ GPU. Tính năng này được cung cấp dưới dạng bản xem trước công khai trong danh sách chờ. Nếu bạn muốn dùng thử tính năng này, hãy điền vào biểu mẫu này để tham gia danh sách chờ. Cloud Run là một nền tảng vùng chứa trên Google Cloud giúp bạn dễ dàng chạy mã trong một vùng chứa mà không cần phải quản lý cụm.

Hiện tại, chúng tôi cung cấp GPU Nvidia L4 với 24 GB vRAM. Mỗi phiên bản Cloud Run có một GPU và tính năng tự động điều chỉnh tỷ lệ của Cloud Run vẫn được áp dụng. Điều đó bao gồm việc mở rộng quy mô lên tới 5 phiên bản (có thể tăng hạn mức), cũng như giảm quy mô về 0 phiên bản khi không có yêu cầu nào.

Transformers.js được thiết kế để có chức năng tương đương với thư viện python của trình chuyển đổi Hugging Face, nghĩa là bạn có thể chạy cùng một mô hình được huấn luyện trước bằng một API rất giống nhau. Bạn có thể tìm hiểu thêm trên trang web Transformers.js.

Trong lớp học lập trình này, bạn sẽ tạo và triển khai một ứng dụng cho Cloud Run sử dụng Transformers.js và GPU.

Kiến thức bạn sẽ học được

  • Cách chạy ứng dụng bằng Transformers.js trên Cloud Run bằng GPU

2. Bật API và đặt biến môi trường

Trước khi có thể bắt đầu sử dụng lớp học lập trình này, bạn sẽ cần bật một số API. Lớp học lập trình này yêu cầu sử dụng các API sau. Bạn có thể bật các API đó bằng cách chạy lệnh sau:

gcloud services enable run.googleapis.com \
    storage.googleapis.com \
    cloudbuild.googleapis.com \

Sau đó, bạn có thể thiết lập các biến môi trường sẽ được dùng trong suốt lớp học lập trình này.

PROJECT_ID=<YOUR_PROJECT_ID>

AR_REPO_NAME=repo
REGION=us-central1

3. Tạo ứng dụng Transformers.js

Trước tiên, tạo một thư mục cho mã nguồn và cd vào thư mục đó.

mkdir transformers-js-codelab && cd $_

Tạo một tệp 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"
    }
  }

Tạo một tệp có tên là 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}`);
});

Tạo Dockerfile. Dockerfile sẽ cài đặt thêm trình điều khiển NVIDIA cần thiết cho 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. Tạo và triển khai dịch vụ Cloud Run

Tạo kho lưu trữ trong Artifact Registry.

gcloud artifacts repositories create $AR_REPO_NAME \
  --repository-format docker \
  --location us-central1

Gửi mã của bạn đến Cloud Build.

IMAGE=us-central1-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/gpu-transformers-js
gcloud builds submit --tag $IMAGE

Tiếp theo, hãy triển khai 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. Kiểm thử dịch vụ

Bạn có thể kiểm thử dịch vụ này bằng cách chạy lệnh sau:

SERVICE_URL=$(gcloud run services describe transformers-js-codelab --region $REGION --format 'value(status.url)')

curl $SERVICE_URL

và bạn sẽ thấy nội dung tương tự như sau:

[{"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. Xin chúc mừng!

Chúc mừng bạn đã hoàn thành lớp học lập trình!

Bạn nên tham khảo tài liệu về GPU Cloud Run.

Nội dung đã đề cập

  • Cách chạy ứng dụng bằng Transformers.js trên Cloud Run bằng GPU

7. Dọn dẹp

Để tránh các khoản phí vô tình (ví dụ: nếu các dịch vụ Cloud Run vô tình bị gọi nhiều lần hơn số lần phân bổ lệnh gọi Cloud Run hằng tháng của bạn ở cấp miễn phí), bạn có thể xoá Cloud Run hoặc xoá dự án bạn đã tạo ở Bước 2.

Để xoá dịch vụ Cloud Run, hãy truy cập vào Cloud Run Cloud Console tại https://console.cloud.google.com/run rồi xoá dịch vụ transformers-js-codelab.

Nếu chọn xoá toàn bộ dự án, bạn có thể truy cập vào https://console.cloud.google.com/cloud-resource-manager, chọn dự án bạn đã tạo ở Bước 2 rồi chọn Xoá. Nếu xoá dự án, bạn sẽ phải thay đổi các dự án trong Cloud SDK của mình. Bạn có thể xem danh sách tất cả dự án hiện có bằng cách chạy gcloud projects list.