Как выполнить вывод LLM на графических процессорах Cloud Run с помощью vLLM и OpenAI Python SDK

1. Введение

Обзор

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

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

Одним из вариантов использования графических процессоров является запуск собственных открытых моделей большого языка (LLM). В этом руководстве рассказывается, как развернуть службу, на которой работает LLM.

Служба представляет собой серверную службу, на которой работает vLLM — механизм вывода для производственных систем. В этой кодовой лаборатории используется Gemma 2 от Google с моделью, настроенной с помощью инструкций, с 2 миллиардами параметров.

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

  • Как использовать графические процессоры в Cloud Run.
  • Как использовать Hugging Face для получения модели.
  • Как развернуть настроенную по инструкциям модель Gemma 2 2b от Google в Cloud Run, используя vLLM в качестве механизма вывода.
  • Как вызвать серверную службу для завершения предложения.

2. Настройка и требования

Предварительные условия

  • Вы вошли в облачную консоль.
  • Ранее вы развернули службу Cloud Run. Например, вы можете выполнить развертывание веб-службы из краткого руководства по исходному коду, чтобы начать работу.
  • У вас есть учетная запись Hugging Face и вы подтверждаете лицензию Gemma 2 2b на странице https://huggingface.co/google/gemma-2-2b-it; в противном случае вы не сможете скачать модель.
  • Вы создали токен доступа, который имеет доступ к модели google/gemma-2-2b-it.

Активировать Cloud Shell

  1. В Cloud Console нажмите «Активировать Cloud Shell». d1264ca30785e435.png .

cb81e7c8e34bc8d.png

Если вы запускаете Cloud Shell впервые, вы увидите промежуточный экран с описанием того, что это такое. Если вам был представлен промежуточный экран, нажмите «Продолжить» .

d95252b003979716.png

Подготовка и подключение к Cloud Shell займет всего несколько минут.

7833d5e1c5d18f54.png

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

После подключения к Cloud Shell вы увидите, что вы прошли аутентификацию и что для проекта установлен идентификатор вашего проекта.

  1. Выполните следующую команду в Cloud Shell, чтобы подтвердить, что вы прошли аутентификацию:
gcloud auth list

Вывод команды

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте:
gcloud config list project

Вывод команды

[core]
project = <PROJECT_ID>

Если это не так, вы можете установить его с помощью этой команды:

gcloud config set project <PROJECT_ID>

Вывод команды

Updated property [core/project].

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

Включить API

Прежде чем вы сможете начать использовать эту кодовую лабораторию, вам необходимо включить несколько API. Для этой лаборатории кода требуется использование следующих API. Вы можете включить эти API, выполнив следующую команду:

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    secretmanager.googleapis.com \
    artifactregistry.googleapis.com

Настройка переменных среды

Вы можете установить переменные среды, которые будут использоваться в этой лаборатории кода.

HF_TOKEN=<YOUR_HUGGING_FACE_TOKEN>
PROJECT_ID=<YOUR_PROJECT_ID>

REGION=us-central1
SERVICE_NAME=vllm-gemma-2-2b-it
AR_REPO_NAME=vllm-gemma-2-2b-it-repo
SERVICE_ACCOUNT=vllm-gemma-2-2b-it
SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

4. Создайте учетную запись службы.

Эта учетная запись службы используется для создания службы Cloud Run и доступа к секрету из Secret Manager.

Сначала создайте учетную запись службы, выполнив следующую команду:

gcloud iam service-accounts create $SERVICE_ACCOUNT \
  --display-name="Cloud Run vllm SA to access secrete manager"

Во-вторых, назначьте учетной записи службы роль пользователя Vertex AI.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role=roles/secretmanager.secretAccessor

Теперь создайте секрет в Secret Manager под названием HF_TOKEN для вашего токена доступа Hugging Face. Cloud Build использует учетную запись службы для доступа к этому секрету во время сборки, чтобы извлечь модель Gemma 2 (2B) из Hugging Face. Подробнее о секретах и ​​Cloud Build можно узнать здесь .

printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-

И предоставьте учетной записи службы доступ к секрету HF_TOKEN в Secret Manager.

gcloud secrets add-iam-policy-binding HF_TOKEN \
    --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
    --role='roles/secretmanager.secretAccessor'

5. Создайте образ в реестре артефактов.

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

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

Затем создайте Dockerfile , который будет включать секрет из Secret Manager. Подробнее о флаге Docker buildx –secrets можно узнать здесь .

FROM vllm/vllm-openai:latest

ENV HF_HOME=/model-cache
RUN --mount=type=secret,id=HF_TOKEN HF_TOKEN=$(cat /run/secrets/HF_TOKEN) \
    huggingface-cli download google/gemma-2-2b-it

ENV HF_HUB_OFFLINE=1

ENTRYPOINT python3 -m vllm.entrypoints.openai.api_server \
    --port ${PORT:-8000} \
    --model ${MODEL_NAME:-google/gemma-2-2b-it} \
    ${MAX_MODEL_LEN:+--max-model-len "$MAX_MODEL_LEN"}

Теперь создайте файл cloudbuild.yaml.

steps:
- name: 'gcr.io/cloud-builders/docker'
  id: build
  entrypoint: 'bash'
  secretEnv: ['HF_TOKEN']
  args: 
    - -c
    - |
        SECRET_TOKEN="$$HF_TOKEN" docker buildx build --tag=${_IMAGE} --secret id=HF_TOKEN .

availableSecrets:
  secretManager:
  - versionName: 'projects/${PROJECT_ID}/secrets/HF_TOKEN/versions/latest'
    env: 'HF_TOKEN'

images: ["${_IMAGE}"]

substitutions:  
  _IMAGE: 'us-central1-docker.pkg.dev/${PROJECT_ID}/vllm-gemma-2-2b-it-repo/vllm-gemma-2-2b-it'

options:
  dynamicSubstitutions: true
  machineType: "E2_HIGHCPU_32"

Наконец, отправьте сборку.

gcloud builds submit --config=cloudbuild.yaml

Сборка может занять около 8 минут.

6. Разверните сервис

Теперь вы готовы развернуть образ в Cloud Run.

gcloud beta run deploy $SERVICE_NAME \
--image=us-central1-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \
--service-account $SERVICE_ACCOUNT_ADDRESS \
--cpu=8 \
--memory=32Gi \
--gpu=1 --gpu-type=nvidia-l4 \
--region us-central1 \
--no-allow-unauthenticated \
--max-instances 5 \
--no-cpu-throttling

Развертывание может занять до 5 минут.

7. Протестируйте сервис

После развертывания вы можете либо использовать прокси-службу разработки Cloud Run , которая автоматически добавляет для вас токен идентификатора, либо напрямую скрутить URL-адрес службы.

Использование прокси-службы разработки Cloud Run

Чтобы использовать прокси-службу разработки Cloud Run, выполните следующие действия:

Сначала выполните следующую команду

gcloud run services proxy $SERVICE_NAME --region us-central1

Далее скручиваем сервис

curl -X POST http://localhost:8080/v1/completions \
-H "Content-Type: application/json" \
-d '{
  "model": "google/gemma-2-2b-it",
  "prompt": "Cloud Run is a",
  "max_tokens": 128,
  "temperature": 0.90
}'

Использование URL-адреса службы напрямую

Сначала получите URL-адрес развернутой службы.

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

Свернуть сервис

curl -X POST $SERVICE_URL/v1/completions \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{
  "model": "google/gemma-2-2b-it",
  "prompt": "Cloud Run is a",
  "max_tokens": 128,
  "temperature": 0.90
}'

Результаты

Вы должны увидеть результаты, подобные следующим:

{"id":"cmpl-e0e6924d4bfd4d918383c87cba5e25ac","object":"text_completion","created":1723853023,"model":"google/gemma-2-2b","choices":[{"index":0,"text":" serverless compute platform that lets you write your backend code in standard languages, such as Java, Go, PHP and Python.\n\nYou can deploy your function as a REST API that scales on demand and allows you to add additional security features such as HTTPS.\n\nTo write code for an Android app with Cloud Run, you need to use the GraalVM. This is because while Node.js is a more commonly known node-based platform, GraalVM is a virtual machine (VM) to run native code in the Cloud Run environment.\n\nNow you need graal.vm/java-11-jre.jar, the","logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":5,"total_tokens":133,"completion_tokens":128}}

8. Поздравляем!

Поздравляем с завершением работы над кодом!

Рекомендуем ознакомиться с документацией Cloud Run.

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

  • Как использовать графические процессоры в Cloud Run.
  • Как использовать Hugging Face для получения модели.
  • Как развернуть модель Google Gemma 2 (2B) в Cloud Run, используя vLLM в качестве механизма вывода.
  • Как вызвать серверную службу для завершения предложения.

9. Очистка

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

Чтобы удалить службу Cloud Run, перейдите в облачную консоль Cloud Run по адресу https://console.cloud.google.com/run и удалите службу vllm-gemma-2-2b . Вы также можете удалить учетную запись службы vllm-gemma-2-2b .

Если вы решите удалить весь проект, вы можете перейти на https://console.cloud.google.com/cloud-resource-manager , выбрать проект, созданный на шаге 2, и нажать «Удалить». Если вы удалите проект, вам придется изменить проекты в Cloud SDK. Вы можете просмотреть список всех доступных проектов, запустив gcloud projects list .