كيفية تشغيل Transformers.js على وحدات معالجة الرسومات في Cloud Run

1. مقدمة

نظرة عامة

أضافت خدمة Cloud Run مؤخرًا ميزة استخدام وحدة معالجة الرسومات. وهي متاحة كميزة تجريبية علنية في قائمة الانتظار. إذا أردت تجربة الميزة، يُرجى ملء هذا النموذج للانضمام إلى قائمة الانتظار. Cloud Run هو نظام أساسي للحاويات على Google Cloud، ما يسهِّل تشغيل الرمز في حاوية بدون الحاجة إلى إدارة مجموعة.

وفي الوقت الحالي، نجد أن وحدات معالجة الرسومات التي نوفّرها هي وحدات معالجة الرسومات من فئة Nvidia L4 المزوّدة بذاكرة وصول عشوائي (vRAM) بسعة 24 غيغابايت. هناك وحدة معالجة رسومات واحدة لكل مثيل في Cloud Run، ولا يزال المقياس التلقائي في Cloud Run مطبّقًا. ويشمل ذلك زيادة عدد النُسخ إلى 5 نُسخ (مع توفّر زيادة الحصة)، بالإضافة إلى تقليل عدد النُسخ إلى 0 نُسخ في حال عدم توفّر أي طلبات.

تم تصميم Transformers.js ليكون مكافئًا وظيفيًا لمكتبة Python الخاصة بـ Transformers من Hugging Face، ما يعني أنّه يمكنك تشغيل النماذج نفسها المدربة مسبقًا باستخدام واجهة برمجة تطبيقات مشابهة جدًا. ويمكنك معرفة المزيد من المعلومات على موقع Transformers.js الإلكتروني.

في هذا الدرس التطبيقي حول الترميز، ستنشئ تطبيقًا وتنشره على Cloud Run يستخدم Transformers.js ووحدات معالجة الرسومات.

المعلومات التي ستطّلع عليها

  • كيفية تشغيل تطبيق باستخدام Transformers.js على Cloud Run باستخدام وحدات معالجة الرسومات

2. تفعيل واجهات برمجة التطبيقات وضبط متغيّرات البيئة

قبل أن تتمكّن من بدء استخدام هذا الدليل التعليمي للترميز، هناك عدة واجهات برمجة تطبيقات يجب تفعيلها. يتطلّب هذا الدرس التطبيقي استخدام واجهات برمجة التطبيقات التالية. يمكنك تفعيل واجهات برمجة التطبيقات هذه من خلال تنفيذ الأمر التالي:

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

أولاً، أنشئ دليلاً لرمز المصدر ثم انتقِل إلى هذا الدليل.

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.

ننصحك بمراجعة المستندات حول وحدات معالجة الرسومات التي تعمل في السحابة الإلكترونية.

المواضيع التي تناولناها

  • كيفية تشغيل تطبيق باستخدام Transformers.js على Cloud Run باستخدام وحدات معالجة الرسومات

7- تَنظيم

لتجنُّب تحصيل رسوم بدون قصد (على سبيل المثال، إذا تمّ استدعاء خدمات Cloud Run بدون قصد أكثر من عدد عمليات الاستدعاء الشهرية المخصّصة لك في الفئة المجانية)، يمكنك إما حذف Cloud Run أو حذف المشروع الذي أنشأته في الخطوة 2.

لحذف خدمة Cloud Run، انتقِل إلى Cloud Run Cloud Console على الرابط https://console.cloud.google.com/run واحذِف خدمة transformers-js-codelab.

إذا اخترت حذف المشروع بأكمله، يمكنك الانتقال إلى https://console.cloud.google.com/cloud-resource-manager واختيار المشروع الذي أنشأته في الخطوة 2 ثم اختيار "حذف". في حال حذف المشروع، عليك تغيير المشاريع في حزمة تطوير البرامج (SDK) من Cloud. يمكنك عرض قائمة بجميع المشاريع المتاحة من خلال تشغيل gcloud projects list.