О практической работе
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
- В консоли Cloud нажмите «Активировать Cloud Shell» .
.
Если вы запускаете Cloud Shell впервые, вам будет показан промежуточный экран с описанием его функций. Если вы увидели промежуточный экран, нажмите «Продолжить» .
Подготовка и подключение к Cloud Shell займет всего несколько минут.
Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог объёмом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Значительную часть работы в этой лабораторной работе, если не всю, можно выполнить в браузере.
После подключения к Cloud Shell вы увидите, что вы прошли аутентификацию и проекту присвоен идентификатор вашего проекта.
- Выполните следующую команду в 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`
- Выполните следующую команду в 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 secret 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 при создании образа.
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
5. Создайте образ в Artifact Registry
Сначала создайте репозиторий в Artifact Registry.
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. Развертывание займёт около 5 минут. Вам потребуется увеличить начальную задержку проверки работоспособности на несколько минут, чтобы дать образу больше времени для загрузки. В противном случае проверка работоспособности выдаст ошибку «Истекает срок».
gcloud beta run deploy $SERVICE_NAME \ --image=$REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --cpu=8 \ --memory=32Gi \ --gpu=1 \ --port=8000 \ --gpu-type=nvidia-l4 \ --region $REGION \ --no-allow-unauthenticated \ --max-instances 3 \ --no-cpu-throttling \ --no-gpu-zonal-redundancy \ --startup-probe tcpSocket.port=8000,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240
7. Протестируйте услугу
После развертывания вы можете либо использовать прокси-сервис Cloud Run dev , который автоматически добавит вам идентификационный токен, либо напрямую указать URL-адрес сервиса.
Использование прокси-сервиса Cloud Run dev
Чтобы использовать службу прокси-сервера Cloud Run dev, выполните следующие действия:
Сначала выполните следующую команду
gcloud run services proxy $SERVICE_NAME --region us-central1
Далее, запустите службу curl
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 для получения модели.
- Как развернуть модель Gemma 2 (2B) от Google в 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
.
О практической работе
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
- В консоли Cloud нажмите «Активировать Cloud Shell» .
.
Если вы запускаете Cloud Shell впервые, вам будет показан промежуточный экран с описанием его функций. Если вы увидели промежуточный экран, нажмите «Продолжить» .
Подготовка и подключение к Cloud Shell займет всего несколько минут.
Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог объёмом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Значительную часть работы в этой лабораторной работе, если не всю, можно выполнить в браузере.
После подключения к Cloud Shell вы увидите, что вы прошли аутентификацию и проекту присвоен идентификатор вашего проекта.
- Выполните следующую команду в 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`
- Выполните следующую команду в 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 secret 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 при создании образа.
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
5. Создайте образ в Artifact Registry
Сначала создайте репозиторий в Artifact Registry.
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. Развертывание займёт около 5 минут. Вам потребуется увеличить начальную задержку проверки работоспособности на несколько минут, чтобы дать образу больше времени для загрузки. В противном случае проверка работоспособности выдаст ошибку «Истекает срок».
gcloud beta run deploy $SERVICE_NAME \ --image=$REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --cpu=8 \ --memory=32Gi \ --gpu=1 \ --port=8000 \ --gpu-type=nvidia-l4 \ --region $REGION \ --no-allow-unauthenticated \ --max-instances 3 \ --no-cpu-throttling \ --no-gpu-zonal-redundancy \ --startup-probe tcpSocket.port=8000,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240
7. Протестируйте услугу
После развертывания вы можете либо использовать прокси-сервис Cloud Run dev , который автоматически добавит вам идентификационный токен, либо напрямую указать URL-адрес сервиса.
Использование прокси-сервиса Cloud Run dev
Чтобы использовать службу прокси-сервера Cloud Run dev, выполните следующие действия:
Сначала выполните следующую команду
gcloud run services proxy $SERVICE_NAME --region us-central1
Далее, запустите службу curl
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 для получения модели.
- Как развернуть модель Gemma 2 (2B) от Google в 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
.