Как запустить Transformers.js на графических процессорах Cloud Run

1. Введение

Обзор

В Cloud Run недавно добавили поддержку графических процессоров (GPU). Она доступна в режиме публичного предварительного просмотра (с возможностью ожидания). Если вы заинтересованы в тестировании этой функции, заполните эту форму , чтобы присоединиться к списку ожидания. Cloud Run — это контейнерная платформа на Google Cloud, которая упрощает запуск кода в контейнере, не требуя управления кластером.

Сегодня мы предоставляем только графические процессоры Nvidia L4 с 24 ГБ видеопамяти. На каждый экземпляр Cloud Run приходится один графический процессор, и автоматическое масштабирование Cloud Run по-прежнему применяется. Это включает масштабирование до 5 экземпляров (с возможностью увеличения квоты), а также масштабирование до нуля экземпляров при отсутствии запросов.

Библиотека Transformers.js разработана таким образом, чтобы быть функционально эквивалентной библиотеке Transformers для Python от Hugging Face, а это значит, что вы можете запускать те же предварительно обученные модели, используя очень похожий API. Подробнее можно узнать на веб-сайте Transformers.js .

В этом практическом занятии вы создадите и развернете приложение в Cloud Run, использующее Transformers.js и графические процессоры (GPU).

Что вы узнаете

  • Как запустить приложение с использованием Transformers.js в Cloud Run с помощью графических процессоров.

2. Включите API и установите переменные среды.

Прежде чем начать использовать этот практический пример, вам потребуется включить несколько API. Для работы с этим практическим примером необходимы следующие 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.

Создайте репозиторий в реестре артефактов.

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. Поздравляем!

Поздравляем с завершением практического занятия!

Мы рекомендуем ознакомиться с документацией по Cloud Run GPUs .

Что мы рассмотрели

  • Как запустить приложение с использованием Transformers.js в Cloud Run с помощью графических процессоров.

7. Уборка

Чтобы избежать непреднамеренных списаний средств (например, если сервисы Cloud Run будут случайно запущены больше раз, чем предусмотрено вашим ежемесячным лимитом на запуск Cloud Run в бесплатном тарифе), вы можете либо удалить Cloud Run, либо удалить проект, созданный на шаге 2.

Чтобы удалить службу Cloud Run, перейдите в консоль 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 .