1. Введение
Большие языковые модели (LLM) меняют подход к созданию интеллектуальных приложений. Но подготовить эти мощные модели к реальному использованию может быть непросто. Для них требуются большие вычислительные мощности, особенно видеокарты (GPU), и продуманные способы обработки множества запросов одновременно. Кроме того, важно снизить затраты и обеспечить бесперебойную работу приложения без задержек.
Эта лабораторная работа покажет вам, как справиться с этими трудностями! Мы будем использовать два ключевых инструмента:
- vLLM : Представьте себе сверхбыстрый движок для LLM. Он позволяет вашим моделям работать гораздо эффективнее, обрабатывая больше запросов одновременно и сокращая потребление памяти.
- Google Cloud Run : это бессерверная платформа Google. Она отлично подходит для развёртывания приложений, поскольку берёт на себя всё масштабирование — от нуля до тысяч пользователей и обратно. Кроме того, Cloud Run теперь поддерживает графические процессоры , которые необходимы для хостинга LLM!
Сочетание vLLM и Cloud Run предлагает мощный, гибкий и экономичный способ обслуживания ваших LLM-программ. В этом руководстве вы развернёте открытую модель и сделаете её доступной в виде стандартного веб-API.
Чему вы научитесь**:**
- Как правильно выбрать размер модели и вариант сервировки.
- Как настроить vLLM для обслуживания конечных точек API, совместимых с OpenAI.
- Как контейнеризировать сервер vLLM с помощью Docker.
- Как загрузить образ контейнера в Google Artifact Registry.
- Как развернуть контейнер в Cloud Run с ускорением GPU.
- Как протестировать развернутую модель.
Что вам понадобится **:**
- Браузер, например Chrome, для доступа к Google Cloud Console
- Надежное интернет-соединение
- Проект Google Cloud с включенным биллингом
- Токен доступа Hugging Face (создайте его здесь , если у вас его еще нет)
- Базовые знания Python, Docker и интерфейса командной строки
- Любопытный ум и стремление к обучению
2. Прежде чем начать
Настройка проекта Google Cloud
Для этой лабораторной работы требуется проект Google Cloud с активной учетной записью для выставления счетов.
- Для занятий с инструктором: если вы занимаетесь в классе, инструктор предоставит вам необходимую информацию о проекте и оплате. Следуйте инструкциям инструктора, чтобы завершить подготовку.
- Для самостоятельного обучения: если вы занимаетесь самостоятельно, вам потребуется создать новый проект и активировать пробный платёжный аккаунт. Чтобы начать, выполните следующие действия.
- Откройте окно в режиме инкогнито, нажав ( Ctrl + Shift + N или Cmd + Shift + N )
- Перейдите на этот портал погашения из окна в режиме инкогнито.
- Войдите в систему и получите пробный платежный аккаунт с вашим личным аккаунтом Gmail.
- Следуйте инструкциям из этой колоды, чтобы завершить настройку.
Настроить Cloud Shell
Теперь давайте настроим Cloud Shell — удобный интерфейс командной строки непосредственно в Google Cloud Console.
Запустить Cloud Shell
В правом верхнем углу консоли Google Cloud Console вы увидите значок, похожий на терминал ( >_
). Нажмите на него, чтобы активировать Cloud Shell.
Разрешить доступ
При появлении запроса нажмите «Авторизовать» , чтобы предоставить Cloud Shell необходимые разрешения для взаимодействия с вашим проектом Google Cloud.
Проверить идентификатор проекта
Посмотрите на Project ID
в терминале. Он будет выделен жёлтым цветом, как показано на изображении ниже. Убедитесь, что это тот же идентификатор, который вы указали при создании проекта.
Если Project ID
отображается в терминале корректно, перейдите к шагу включения необходимых API .
Правильный идентификатор проекта (при необходимости)
Если Project ID
неверный или отображается не полностью, используйте эту команду для исправления. Перед выполнением команды обязательно замените текст your-project-id
на правильный Project ID
.
gcloud config set project your-project-id
Включить необходимые API
Чтобы использовать сервисы Google Cloud, такие как Cloud Run, необходимо сначала активировать их API для вашего проекта. Выполните следующие команды в Cloud Shell, чтобы включить необходимые сервисы для этой лабораторной работы:
gcloud services enable run.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable secretmanager.googleapis.com
gcloud services enable artifactregistry.googleapis.com
3. Выбор правильной модели
Вы можете найти множество открытых моделей на таких сайтах, как Hugging Face Hub и Kaggle . Если вы хотите использовать одну из этих моделей в сервисе, например, Google Cloud Run, вам нужно выбрать ту, которая соответствует вашим ресурсам (например, графический процессор NVIDIA L4).
Помимо размера, не забывайте учитывать, что именно может делать модель. Модели не все одинаковы; у каждой есть свои преимущества и недостатки. Например, некоторые модели могут обрабатывать разные типы входных данных (например, изображения и текст, что называется мультимодальными возможностями), в то время как другие могут запоминать и обрабатывать больше информации одновременно (что означает более широкие контекстные окна). Зачастую более крупные модели обладают более продвинутыми возможностями, такими как вызов функций и мышление .
Также важно проверить, поддерживается ли выбранная вами модель обслуживающим инструментом (в данном случае vLLM). Вы можете посмотреть все модели, поддерживаемые vLLM, здесь .
Теперь давайте рассмотрим Gemma 3 — новейшее семейство общедоступных больших языковых моделей (LLM) от Google. Gemma 3 представлена в четырёх различных масштабах сложности, измеряемых в параметрах : 1 миллиард, 4 миллиарда, 12 миллиардов и целых 27 миллиардов.
Для каждого из этих размеров вы найдете два основных типа:
- Базовая (предварительно обученная) версия: это основополагающая модель, обученная на огромном объеме данных.
- Версия с оптимизированными инструкциями: эта версия была дополнительно доработана для лучшего понимания и выполнения определенных инструкций или команд.
Более крупные модели (4 млрд, 12 млрд и 27 млрд параметров) являются мультимодальными , то есть они могут распознавать и работать как с изображениями, так и с текстом. Однако наименьший вариант с 1 млрд параметров ориентирован исключительно на текст.
В этой лабораторной работе мы будем использовать 1 миллиард вариантов Gemma 3: gemma-3-1b-it . Использование меньшей модели также поможет вам научиться работать с ограниченными ресурсами, что важно для снижения затрат и обеспечения бесперебойной работы вашего приложения в облаке.
4. Переменные среды и секреты
Создать файл среды
Прежде чем продолжить, рекомендуется собрать все конфигурации, которые вы будете использовать в этой лабораторной работе, в одном месте. Для начала откройте терминал и выполните следующие действия:
- Создайте новую папку для этого проекта.
- Перейдите во вновь созданную папку.
- Создайте в этой папке пустой файл .env (впоследствии этот файл будет содержать переменные среды)
Вот команда для выполнения этих шагов:
mkdir vllm-gemma3
cd vllm-gemma3
touch .env
Затем скопируйте перечисленные ниже переменные и вставьте их в только что созданный вами файл .env . Не забудьте заменить значения-заполнители ( your_project_id
и your_region
) на информацию о вашем проекте. Например, ( PROJECT_ID=unique-ai-project
и REGION=us-central1
).
PROJECT_ID=your_project_id
REGION=your_region
MODEL_PROVIDER=google
MODEL_VARIANT=gemma-3-1b-it
MODEL_NAME=${MODEL_PROVIDER}/${MODEL_VARIANT}
AR_REPO_NAME=vllm-gemma3-repo
SERVICE_NAME=${MODEL_VARIANT}-service
IMAGE_NAME=${REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO_NAME}/${SERVICE_NAME}
SERVICE_ACC_NAME=${SERVICE_NAME}-sa
SERVICE_ACC_EMAIL=${SERVICE_ACC_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
После редактирования и сохранения файла .env введите следующую команду, чтобы загрузить эти переменные среды в сеанс терминала:
source .env
Вы можете проверить, успешно ли загружены переменные, выполнив команду echo для одной из них. Например:
echo $SERVICE_NAME
Если вы получили то же значение, которое вы назначили в файле .env , переменные загружены успешно.
Сохраните секрет в Secret Manager
Для любых конфиденциальных данных, включая коды доступа, учетные данные и пароли, рекомендуется использовать менеджер секретов.
Перед использованием моделей Gemma 3 необходимо ознакомиться с условиями использования, так как они не имеют обязательного характера. Перейдите на страницу модели Gamma3 на сайте Hugging Face Hub и ознакомьтесь с условиями использования.
Получив токен доступа Hugging Face, перейдите на страницу Secret Manager и создайте секрет, следуя этим инструкциям.
- Перейдите в Google Cloud Console
- Выберите проект в раскрывающемся списке слева вверху.
- Найдите Secret Manager в строке поиска и нажмите на эту опцию, когда она появится.
Когда вы находитесь на странице Secret Manager:
- Нажмите кнопку +Создать секрет ,
- Заполните эту информацию:
- Имя : HF_TOKEN
- Секретное значение : <your_hf_access_token>
- После завершения нажмите кнопку «Создать секрет» .
Теперь у вас должен быть токен доступа Hugging Face в качестве секрета в Google Cloud Secret Manager .
Вы можете проверить свой доступ к секрету, выполнив следующую команду в терминале. Эта команда извлечет его из Secret Manager:
gcloud secrets versions access latest --secret=HF_TOKEN
Вы должны увидеть, как ваш токен доступа извлекается и отображается в окне терминала.
5. Создайте учетную запись службы
Для повышения безопасности и эффективного управления доступом в производственной среде службы должны работать под выделенными учетными записями служб, которые строго ограничены разрешениями, необходимыми для их конкретных задач.
Выполните эту команду, чтобы создать учетную запись службы.
gcloud iam service-accounts create $SERVICE_ACC_NAME --display-name='Cloud Run vLLM Model Serving SA'
Следующая команда прикрепляет необходимое разрешение
gcloud secrets add-iam-policy-binding HF_TOKEN \
--member="serviceAccount:${SERVICE_ACC_EMAIL}" \
--role="roles/secretmanager.secretAccessor"
6. Создайте образ в реестре артефактов.
Этот шаг включает создание образа Docker, включающего весовые коэффициенты модели и предустановленный vLLM.
1. Создайте репозиторий Docker в Artifact Registry.
Давайте создадим Docker-репозиторий в Artifact Registry для загрузки собранных образов. Выполните следующую команду в терминале:
gcloud artifacts repositories create ${AR_REPO_NAME} \
--repository-format docker \
--location ${REGION}
2. Хранение модели
Согласно документации по лучшим практикам работы с графическими процессорами , вы можете хранить модели машинного обучения в образах контейнеров или оптимизировать их загрузку из облачного хранилища . Конечно, у каждого подхода есть свои плюсы и минусы. Подробнее о них можно узнать в документации. Для простоты мы просто сохраним модель в образе контейнера.
3. Создайте Docker-файл
Создайте файл с именем Dockerfile и скопируйте в него следующее содержимое:
FROM vllm/vllm-openai:v0.9.0
ARG MODEL_NAME
ARG HF_TOKEN
ENV HF_HOME=/model-cache
ENV MODEL_NAME=${MODEL_NAME}
# Use the HF_TOKEN argument to log in and download the model
RUN huggingface-cli login --token ${HF_TOKEN} && \
huggingface-cli download ${MODEL_NAME}
ENV HF_HUB_OFFLINE=1
EXPOSE 8080
ENTRYPOINT python3 -m vllm.entrypoints.openai.api_server \
--port ${PORT:-8080} \
--model ${MODEL_NAME} \
--gpu-memory-utilization 0.90 \
${MAX_MODEL_LEN:+--max-model-len "$MAX_MODEL_LEN"}
4. Создайте файл cloudbuild.yaml
Затем создайте файл cloudbuild.yaml
в том же каталоге. Этот файл определяет шаги, которые должен выполнить Cloud Build. Скопируйте и вставьте следующее содержимое в файл cloudbuild.yaml:
steps:
- name: 'gcr.io/cloud-builders/docker'
entrypoint: 'bash'
args:
- '-c'
- |
docker build \
--build-arg MODEL_NAME=${_MODEL_NAME} \
--build-arg HF_TOKEN=$$HF_TOKEN_SECRET \
-t ${_IMAGE_NAME} .
secretEnv: ['HF_TOKEN_SECRET']
images:
- '${_IMAGE_NAME}'
availableSecrets:
secretManager:
- versionName: projects/${PROJECT_ID}/secrets/HF_TOKEN/versions/latest
env: 'HF_TOKEN_SECRET'
5. Отправьте сборку в Cloud Build.
Скопируйте и вставьте следующий код и запустите его в терминале:
gcloud builds submit . \
--config=cloudbuild.yaml \
--region=${REGION} \
--substitutions=_MODEL_NAME=${MODEL_NAME},_IMAGE_NAME=${IMAGE_NAME}
Эта команда загружает ваш код ( Dockerfile
и cloudbuild.yaml
), передает ваши переменные оболочки в качестве подстановок ( _MODEL_NAME
и _IMAGE_NAME
) и запускает сборку.
Cloud Build теперь выполнит шаги, описанные в cloudbuild.yaml
. Вы можете следить за журналами в терминале или перейдя по ссылке на сведения о сборке в Cloud Console. После завершения сборки образ контейнера будет доступен в вашем репозитории Artifact Registry и готов к развертыванию.
7. Протестируйте услугу
Выполните следующую команду в терминале, чтобы создать прокси-сервер, который позволит вам получить доступ к службе, работающей на локальном хосте:
gcloud run services proxy ${SERVICE_NAME} --region ${REGION}
В новом окне терминала выполните эту команду curl
, чтобы проверить соединение.
curl -X POST http://localhost:8080/v1/completions \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemma-3-1b-it",
"prompt": "Cloud Run is a ",
"max_tokens": 128,
"temperature": 0.90
}'
Если вы видите похожий вывод, как показано ниже:
{"id":"cmpl-e96d05d2893d42939c1780d44233defa","object":"text_completion","created":1746870778,"model":"google/gemma-3-1b-it","choices":[{"index":0,"text":"100% managed Kubernetes service. It's a great option for many use cases.\n\nHere's a breakdown of key features and considerations:\n\n* **Managed Kubernetes:** This means Google handles the underlying infrastructure, including scaling, patching, and maintenance. You don't need to worry about managing Kubernetes clusters.\n* **Serverless:** You only pay for the compute time your application actually uses. No charges when your code isn't running.\n* **Scalability:** Cloud Run automatically scales your application based on demand. You can easily scale up or down to handle fluctuating traffic.\n*","logprobs":null,"finish_reason":"length","stop_reason":null,"prompt_logprobs":null}],"usage":{"prompt_tokens":6,"total_tokens":134,"completion_tokens":128,"prompt_tokens_details":null}}
8. Заключение
Поздравляем! Вы успешно завершили эту практику. Вы узнали, как:
- Выберите подходящий размер модели для целевого развертывания.
- Настройте vLLM для обслуживания API, совместимого с OpenAI.
- Обеспечьте безопасную контейнеризацию сервера vLLM и моделируйте веса с помощью Docker.
- Поместите образ контейнера в Google Artifact Registry.
- Разверните службу с ускорением на GPU в Cloud Run.
- Протестируйте аутентифицированную, развернутую модель.
Не стесняйтесь исследовать возможность использования других интересных моделей, таких как Llama, Mistral или Qwen, чтобы продолжить свое обучение!
9. Уборка
Чтобы избежать будущих расходов, важно удалить созданные вами ресурсы. Выполните следующие команды, чтобы очистить свой проект.
1. Удалить службу Cloud Run:
gcloud run services delete ${SERVICE_NAME} --region=${REGION} --quiet
2. Удалить репозиторий реестра артефактов:
gcloud artifacts repositories delete ${AR_REPO_NAME} --location=${REGION} --quiet
3. Удалить учетную запись службы:
gcloud iam service-accounts delete ${SERVICE_ACC_EMAIL} --quiet
4. Удалить секрет из Secret Manager:
gcloud secrets delete HF_TOKEN --quiet