1. Introducción
Descripción general
Recientemente, Cloud Run agregó compatibilidad con GPU. Está disponible como versión preliminar pública en lista de espera. Si te interesa probar la función, completa este formulario para unirte a la lista de espera. Cloud Run es una plataforma de contenedores en Google Cloud que facilita la ejecución de tu código en un contenedor sin necesidad de administrar un clúster.
Actualmente, las GPUs que ponemos a disposición son las GPUs Nvidia L4 con 24 GB de VRAM. Hay una GPU por instancia de Cloud Run, y el ajuste de escala automático de Cloud Run sigue aplicándose. Esto incluye el escalamiento horizontal de hasta 5 instancias (con aumento de cuota disponible), así como el escalamiento vertical a cero instancias cuando no hay solicitudes.
Un caso de uso de las GPUs es ejecutar tus propios modelos de lenguaje grandes (LLM) abiertos. En este instructivo, se explica cómo implementar un servicio que ejecuta un LLM.
El servicio es un servicio de backend que ejecuta vLLM, un motor de inferencia para sistemas de producción. En este codelab, se usa Gemma 2 de Google, un modelo ajustado por instrucciones con 2,000 millones de parámetros.
Qué aprenderás
- Cómo usar GPUs en Cloud Run
- Cómo usar Hugging Face para recuperar un modelo
- Cómo implementar el modelo ajustado por instrucciones Gemma 2 2b de Google en Cloud Run con vLLM como motor de inferencia
- Cómo invocar el servicio de backend para completar oraciones.
2. Configuración y requisitos
Requisitos previos
- Accediste a la consola de Cloud.
- Ya implementaste un servicio de Cloud Run. Por ejemplo, puedes seguir la guía de inicio rápido para implementar un servicio web a partir del código fuente para comenzar.
- Debes tener una cuenta de Hugging Face y haber aceptado la licencia de Gemma 2 2b en https://huggingface.co/google/gemma-2-2b-it. De lo contrario, no podrás descargar el modelo.
- Creaste un token de acceso que tiene acceso al modelo google/gemma-2-2b-it.
Activar Cloud Shell
- En la consola de Cloud, haz clic en Activar Cloud Shell
.
Si es la primera vez que inicias Cloud Shell, aparecerá una pantalla intermedia en la que se describirá qué es. Si apareció una pantalla intermedia, haz clic en Continuar.
El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.
Esta máquina virtual está cargada con todas las herramientas de desarrollo necesarias. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Gran parte de tu trabajo en este codelab, si no todo, se puede hacer con un navegador.
Una vez que te conectes a Cloud Shell, deberías ver que ya te autenticaste y que el proyecto se configuró con tu ID del proyecto.
- En Cloud Shell, ejecuta el siguiente comando para confirmar que tienes la autenticación:
gcloud auth list
Resultado del comando
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- En Cloud Shell, ejecuta el siguiente comando para confirmar que el comando gcloud conoce tu proyecto:
gcloud config list project
Resultado del comando
[core] project = <PROJECT_ID>
De lo contrario, puedes configurarlo con el siguiente comando:
gcloud config set project <PROJECT_ID>
Resultado del comando
Updated property [core/project].
3. Habilita las APIs y establece variables de entorno
Habilita las APIs
Antes de comenzar a usar este codelab, deberás habilitar varias APIs. En este codelab, se deben usar las siguientes APIs. Para habilitar esas APIs, ejecuta el siguiente comando:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ secretmanager.googleapis.com \ artifactregistry.googleapis.com
Configura variables de entorno
Puedes establecer variables de entorno que se usarán a lo largo de este codelab.
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. Crea una cuenta de servicio
Esta cuenta de servicio se usa para compilar el servicio de Cloud Run y acceder a un secreto de Secret Manager.
Primero, crea la cuenta de servicio ejecutando este comando:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run vllm SA to access secret manager"
En segundo lugar, otorga el rol de usuario de Vertex AI a la cuenta de servicio.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/secretmanager.secretAccessor
Ahora, crea un secreto en Secret Manager llamado HF_TOKEN para tu token de acceso de Hugging Face. Cloud Build usa la cuenta de servicio para acceder a este secreto en el momento de la compilación y extraer el modelo Gemma 2 (2B) de Hugging Face. Obtén más información sobre los secretos y Cloud Build aquí.
printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-
Además, otorga acceso a la cuenta de servicio predeterminada de Compute al secreto HF_TOKEN en Secret Manager cuando compiles la imagen.
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. Crea la imagen en Artifact Registry
Primero, crea un repositorio en Artifact Registry.
gcloud artifacts repositories create $AR_REPO_NAME \ --repository-format docker \ --location us-central1
A continuación, crea un Dockerfile
que incorporará el secreto de Secret Manager. Puedes obtener más información sobre la marca de Docker buildx –secrets aquí.
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"}
Ahora crea un archivo 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"
Por último, envía una compilación.
gcloud builds submit --config=cloudbuild.yaml
La compilación puede tardar aproximadamente 8 minutos.
6. Implemente el servicio
Ahora puedes implementar la imagen en Cloud Run. La implementación tardará alrededor de 5 minutos. Deberás aumentar el retraso inicial de la verificación de estado en unos minutos para darle más tiempo a la imagen para que se cargue. De lo contrario, recibirás un error de Deadline Exceeded en la verificación de estado.
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. Prueba el servicio
Una vez que se implemente, puedes usar el servicio de proxy de desarrollo de Cloud Run, que agrega automáticamente un token de ID por ti, o bien puedes usar curl en la URL del servicio directamente.
Usa el servicio de proxy de desarrollo de Cloud Run
Para usar el servicio de proxy de desarrollo de Cloud Run, puedes seguir estos pasos:
Primero, ejecuta el siguiente comando:
gcloud run services proxy $SERVICE_NAME --region us-central1
A continuación, ejecuta curl en el servicio
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 }'
Cómo usar la URL del servicio directamente
Primero, recupera la URL del servicio implementado.
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
Ejecuta curl en el servicio
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 }'
Resultados
Deberías ver resultados similares a los siguientes:
{"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. ¡Felicitaciones!
¡Felicitaciones por completar el codelab!
Te recomendamos que revises la documentación de Cloud Run.
Temas abordados
- Cómo usar GPUs en Cloud Run
- Cómo usar Hugging Face para recuperar un modelo
- Cómo implementar el modelo Gemma 2 (2B) de Google en Cloud Run con vLLM como motor de inferencia
- Cómo invocar el servicio de backend para completar oraciones.
9. Limpia
Para evitar cargos involuntarios (por ejemplo, si los servicios de Cloud Run se invocan de forma involuntaria más veces que tu asignación mensual de invocaciones de Cloud Run en el nivel gratuito), puedes borrar Cloud Run o el proyecto que creaste en el paso 2.
Para borrar el servicio de Cloud Run, ve a la consola de Cloud Run en https://console.cloud.google.com/run y borra el servicio vllm-gemma-2-2b
. También puedes borrar la cuenta de servicio vllm-gemma-2-2b
.
Si decides borrar todo el proyecto, puedes ir a https://console.cloud.google.com/cloud-resource-manager, seleccionar el proyecto que creaste en el paso 2 y elegir Borrar. Si borras el proyecto, deberás cambiar de proyecto en el SDK de Cloud. Para ver la lista de todos los proyectos disponibles, ejecuta gcloud projects list
.