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

1. Введение

Обзор

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

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

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

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

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

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

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.

Сначала создайте каталог для исходного кода и перейдите в этот каталог.

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 .

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

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

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 .