Cara Menjalankan Transformers.js di GPU Cloud Run

1. Pengantar

Ringkasan

Cloud Run baru-baru ini menambahkan dukungan GPU. Fitur ini tersedia sebagai pratinjau publik yang memerlukan pendaftaran dalam daftar tunggu. Jika Anda tertarik untuk mencoba fitur ini, isi formulir ini untuk bergabung dalam daftar tunggu. Cloud Run adalah platform container di Google Cloud yang memudahkan Anda menjalankan kode dalam container, tanpa mengharuskan Anda mengelola cluster.

Saat ini, GPU yang kami sediakan adalah GPU Nvidia L4 dengan vRAM 24 GB. Ada satu GPU per instance Cloud Run, dan penskalaan otomatis Cloud Run tetap berlaku. Hal ini mencakup penskalaan hingga 5 instance (dengan peningkatan kuota yang tersedia), serta penskalaan hingga nol instance saat tidak ada permintaan.

Transformers.js dirancang agar setara secara fungsional dengan library python transformers Hugging Face, yang berarti Anda dapat menjalankan model terlatih yang sama menggunakan API yang sangat mirip. Anda dapat mempelajari lebih lanjut di situs Transformers.js.

Dalam codelab ini, Anda akan membuat dan men-deploy aplikasi ke Cloud Run yang menggunakan Transformers.js dan GPU.

Yang akan Anda pelajari

  • Cara menjalankan aplikasi menggunakan Transformers.js di Cloud Run menggunakan GPU

2. Mengaktifkan API dan Menetapkan Variabel Lingkungan

Sebelum Anda dapat mulai menggunakan codelab ini, ada beberapa API yang perlu diaktifkan. Codelab ini memerlukan penggunaan API berikut. Anda dapat mengaktifkan API tersebut dengan menjalankan perintah berikut:

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

Kemudian, Anda dapat menetapkan variabel lingkungan yang akan digunakan di seluruh codelab ini.

PROJECT_ID=<YOUR_PROJECT_ID>

AR_REPO_NAME=repo
REGION=us-central1

3. Membuat aplikasi Transformers.js

Pertama, buat direktori untuk kode sumber dan cd ke direktori tersebut.

mkdir transformers-js-codelab && cd $_

Buat file 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"
    }
  }

Buat file bernama 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}`);
});

Buat Dockerfile. Dockerfile akan menginstal driver NVIDIA tambahan yang diperlukan untuk 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. Membangun dan men-deploy layanan Cloud Run

Buat repositori di Artifact Registry.

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

Kirimkan kode Anda ke Cloud Build.

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

Selanjutnya, deploy ke 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. Uji layanan

Anda dapat menguji layanan dengan menjalankan perintah berikut:

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

curl $SERVICE_URL

dan Anda akan melihat sesuatu yang mirip dengan berikut ini:

[{"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. Selamat!

Selamat, Anda telah menyelesaikan codelab.

Sebaiknya tinjau dokumentasi tentang GPU Cloud Run.

Yang telah kita bahas

  • Cara menjalankan aplikasi menggunakan Transformers.js di Cloud Run menggunakan GPU

7. Pembersihan

Untuk menghindari biaya yang tidak disengaja (misalnya, jika layanan Cloud Run tidak sengaja dipanggil lebih banyak daripada alokasi pemanggilan Cloud Run bulanan Anda di tingkat gratis), Anda dapat menghapus Cloud Run atau menghapus project yang Anda buat di Langkah 2.

Untuk menghapus layanan Cloud Run, buka Konsol Cloud Run di https://console.cloud.google.com/run, lalu hapus layanan transformers-js-codelab.

Jika Anda memilih untuk menghapus seluruh project, Anda dapat membuka https://console.cloud.google.com/cloud-resource-manager, memilih project yang Anda buat di Langkah 2, lalu memilih Hapus. Jika menghapus project, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list.