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

1. Giới thiệu

Tổng quan

Cloud Run mới bổ sung tính năng hỗ trợ GPU. Tính năng này hiện đang ở giai đoạn dùng thử công khai (có 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 vùng chứa mà không cần quản lý một cụm.

Hiện tại, GPU mà chúng tôi cung cấp là 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 mở rộng quy mô của Cloud Run vẫn được áp dụng. Điều này bao gồm việc mở rộng quy mô lên đến 5 phiên bản (có thể tăng hạn mức), cũng như giảm quy mô xuống 0 phiên bản khi không có yêu cầu.

Transformers.js được thiết kế để có chức năng tương đương với thư viện Python của 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 tương tự. 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 lên Cloud Run bằ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 các biến môi trường

Để có thể bắt đầu sử dụng lớp học lập trình này, bạn cần bật một số API. Lớp học lập trình này yêu cầu bạn 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, hãy tạo một thư mục cho mã nguồn và chuyển đến thư mục đó.

mkdir transformers-js-codelab && cd $_

Tạo 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 các trình điều khiển NVIDIA bổ sung 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 một 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 lên 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ụ 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 này!

Bạn nên xem 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 bị tính phí ngoài ý muốn (ví dụ: nếu các dịch vụ Cloud Run được gọi nhiều lần hơn mức phân bổ gọi Cloud Run hằng tháng của bạn trong bậc miễn phí), bạn có thể xoá Cloud Run hoặc xoá dự án mà bạn đã tạo ở Bước 2.

Để xoá dịch vụ Cloud Run, hãy truy cập Cloud Console của Cloud Run 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ẽ cần thay đổi dự án trong Cloud SDK. Bạn có thể xem danh sách tất cả các dự án có sẵn bằng cách chạy gcloud projects list.