En esta guía, se muestra cómo optimizar los costos de la carga de trabajo cuando implementas un modelo de lenguaje extenso (LLM). La infraestructura de GKE utiliza una combinación de modo de aprovisionamiento de inicio flexible, VMs Spot y perfiles de clase de procesamiento personalizados para optimizar los costos de la carga de trabajo.
En esta guía, se usa Mixtral 8x7b como ejemplo de LLM que puedes implementar.
Esta guía está dirigida a ingenieros de aprendizaje automático (AA), administradores y operadores de plataformas, y a especialistas en datos y AI que estén interesados en usar las capacidades de organización de contenedores de Kubernetes para la entrega de LLM. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Tareas y roles comunes de los usuarios de GKE Enterprise.
Fondo
En esta sección, se describen las técnicas disponibles que puedes usar para obtener recursos de procesamiento, incluidos los aceleradores de GPU, según los requisitos de tus cargas de trabajo de IA o AA. Estas técnicas se denominan estrategias de disponibilidad de aceleradores en GKE.
GPU
Las unidades de procesamiento gráfico (GPU) te permiten acelerar cargas de trabajo específicas, como el aprendizaje automático y el procesamiento de datos. GKE ofrece nodos equipados con estas potentes GPUs para optimizar el rendimiento de las tareas de aprendizaje automático y procesamiento de datos. GKE proporciona una variedad de opciones de tipos de máquinas para la configuración de nodos, incluidos los tipos de máquinas con GPUs NVIDIA H100, A100 y L4.
Para obtener más información, consulta Acerca de las GPUs en GKE.
Modo de aprovisionamiento de inicio flexible
El modo de aprovisionamiento de inicio flexible es un tipo de reserva de GPU en el que GKE conserva tu solicitud de GPU y aprovisiona recursos automáticamente cuando la capacidad esté disponible. Considera usar el modo de aprovisionamiento de inicio flexible para las cargas de trabajo que necesiten capacidad de GPU por un tiempo limitado, hasta siete días, y no tengan una fecha de inicio fija. Para obtener más información, consulta el modo de aprovisionamiento de inicio flexible.
VMs Spot
Puedes usar las GPUs con VM Spot si tus cargas de trabajo pueden tolerar interrupciones frecuentes en los nodos. Usar las VMs Spot o el modo de aprovisionamiento de inicio flexible reduce el precio de la ejecución de GPUs. El uso de VMs Spot combinado con el modo de aprovisionamiento de inicio flexible proporciona una opción de resguardo cuando la capacidad de las VMs Spot no está disponible.
Para obtener más información, consulta Cómo usar VMs Spot con grupos de nodos de GPU.
Clases de procesamiento personalizadas
Puedes solicitar GPUs con clases de procesamiento personalizadas. Las clases de procesamiento personalizadas te permiten definir una jerarquía de configuraciones de nodos para que GKE las priorice durante las decisiones de escalamiento de nodos, de modo que las cargas de trabajo se ejecuten en el hardware que seleccionaste. Para obtener más información, consulta Acerca de las clases de procesamiento personalizadas.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Make sure that you have the following role or roles on the project:
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
Ir a IAM - Selecciona el proyecto.
- Haz clic en Grant access.
-
En el campo Principales nuevas, ingresa tu identificador de usuario. Esta suele ser la dirección de correo electrónico de una Cuenta de Google.
- En la lista Seleccionar un rol, elige un rol.
- Para otorgar funciones adicionales, haz clic en Agregar otro rol y agrega cada rol adicional.
- Haz clic en Guardar.
-
- Asegúrate de tener un clúster de GKE Autopilot o Standard que ejecute la versión 1.32.2-gke.1652000 o posterior. Tu clúster debe habilitar el aprovisionamiento automático de nodos y configurar los límites de GPU.
- Crea una cuenta de Hugging Face, si todavía no la tienes.
- Asegúrate de que tu proyecto tenga suficiente cuota para las GPUs NVIDIA L4. Para obtener más información, consulta Acerca de las GPUs y Cuotas de asignación.
Obtén acceso al modelo
Si aún no tienes uno, genera un nuevo token de Hugging Face:
- Haz clic en Tu perfil > Configuración > Tokens de acceso.
- Selecciona Token nuevo.
- Especifica el nombre que desees y un rol de al menos
Read
. - Selecciona Generate un token.
Crea un perfil de clase de procesamiento personalizado
En esta sección, crearás un perfil de clase de procesamiento personalizado. Los perfiles de clase de procesamiento personalizados definen los tipos y las relaciones entre los múltiples recursos de procesamiento que usa tu carga de trabajo.
- En la consola de Google Cloud, haz clic en
Activar Cloud Shell en la consola de Google Cloud para iniciar una sesión de Cloud Shell. Se abrirá una sesión en el panel inferior de la consola de Google Cloud.
Crea un archivo de manifiesto
dws-flex-start.yaml
:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: dws-model-inference-class spec: priorities: - machineType: g2-standard-24 spot: true - machineType: g2-standard-24 flexStart: enabled: true nodeRecycling: leadTimeSeconds: 3600 nodePoolAutoCreation: enabled: true
Aplica el manifiesto
dws-flex-start.yaml
:kubectl apply -f dws-flex-start.yaml
GKE implementa máquinas g2-standard-24
con aceleradores L4.
GKE usa clases de procesamiento para priorizar primero las VM Spot y, en segundo lugar, el modo de aprovisionamiento de inicio flexible.
Implementa la carga de trabajo de LLM
Crea un Secret de Kubernetes que contenga el token de Hugging Face con el siguiente comando:
kubectl create secret generic model-inference-secret \ --from-literal=HUGGING_FACE_TOKEN=HUGGING_FACE_TOKEN \ --dry-run=client -o yaml | kubectl apply -f -
Reemplaza
HUGGING_FACE_TOKEN
por tu token de acceso de Hugging Face.Crea un archivo llamado
mixtral-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: inference-mixtral-ccc spec: nodeSelector: cloud.google.com/compute-class: dws-model-inference-class replicas: 1 selector: matchLabels: app: llm template: metadata: labels: app: llm spec: containers: - name: llm image: us-docker.pkg.dev/deeplearning-platform-release/gcr.io/huggingface-text-generation-inference-cu124.2-3.ubuntu2204.py311 resources: requests: cpu: "5" memory: "40Gi" nvidia.com/gpu: "2" limits: cpu: "5" memory: "40Gi" nvidia.com/gpu: "2" env: - name: MODEL_ID value: mistralai/Mixtral-8x7B-Instruct-v0.1 - name: NUM_SHARD value: "2" - name: PORT value: "8080" - name: QUANTIZE value: bitsandbytes-nf4 - name: HUGGING_FACE_HUB_TOKEN valueFrom: secretKeyRef: name: model-inference-secret key: HUGGING_FACE_TOKEN volumeMounts: - mountPath: /dev/shm name: dshm - mountPath: /tmp name: ephemeral-volume volumes: - name: dshm emptyDir: medium: Memory - name: ephemeral-volume ephemeral: volumeClaimTemplate: metadata: labels: type: ephemeral spec: accessModes: ["ReadWriteOnce"] storageClassName: "premium-rwo" resources: requests: storage: 100Gi
En este manifiesto, el campo
mountPath
se establece en/tmp
, ya que es la ruta de acceso en la que se establece la variable de entornoHF_HOME
en el contenedor de aprendizaje profundo (DLC) para la inferencia de generación de texto (TGI), en lugar de la ruta de acceso predeterminada/data
que se establece en la imagen predeterminada de TGI. El modelo descargado se almacenará en este directorio.Implementa el modelo:
kubectl apply -f mixtral-deployment.yaml
GKE programa un Pod nuevo para que se implemente, lo que activa el escalador automático del grupo de nodos para que agregue un segundo nodo antes de implementar la segunda réplica del modelo.
Verifica el estado del modelo:
watch kubectl get deploy inference-mixtral-ccc
Si el modelo se implementó de forma correcta, el resultado es similar al siguiente:
NAME READY UP-TO-DATE AVAILABLE AGE inference-mixtral-ccc 1/1 1 1 10m
Para salir de la visualización, presiona
CTRL + C
.Consulta los grupos de nodos que aprovisionó GKE:
kubectl get nodes -L cloud.google.com/gke-nodepool
El resultado es similar a este:
NAME STATUS ROLES AGE VERSION GKE-NODEPOOL gke-flex-na-nap-g2-standard--0723b782-fg7v Ready <none> 10m v1.32.3-gke.1152000 nap-g2-standard-24-spot-gpu2-1gbdlbxz gke-flex-nap-zo-default-pool-09f6fe53-fzm8 Ready <none> 32m v1.32.3-gke.1152000 default-pool gke-flex-nap-zo-default-pool-09f6fe53-lv2v Ready <none> 32m v1.32.3-gke.1152000 default-pool gke-flex-nap-zo-default-pool-09f6fe53-pq6m Ready <none> 32m v1.32.3-gke.1152000 default-pool
El nombre del grupo de nodos creado indica el tipo de máquina. En este caso, GKE aprovisionó VMs Spot.
Interactúa con el modelo con curl
En esta sección, se muestra cómo puedes realizar una prueba de inferencia básica para verificar el modelo implementado.
Configura la redirección de puertos al modelo:
kubectl port-forward service/llm-service 8080:8080
El resultado es similar a este:
Forwarding from 127.0.0.1:8080 -> 8080
En una sesión de terminal nueva, usa
curl
para chatear con tu modelo:curl http://localhost:8080/v1/completions \ -X POST \ -H "Content-Type: application/json" \ -d '{ "model": "mixtral-8x7b-instruct-gptq", "prompt": "<s>[INST]Who was the first president of the United States?[/INST]", "max_tokens": 40}'
El resultado es similar al siguiente:
George Washington was a Founding Father and the first president of the United States, serving from 1789 to 1797.
Limpia
Para evitar que se apliquen cargos a tu Google Cloud cuenta por los recursos usados en esta página, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Borra el recurso individual
Borra los recursos de Kubernetes que creaste en esta guía:
kubectl delete deployment inference-mixtral-ccc kubectl delete service llm-service kubectl delete computeclass dws-model-inference-class kubectl delete secret model-inference-secret
Borra el clúster:
gcloud container clusters delete CLUSTER_NAME
¿Qué sigue?
- Obtén más información para entrenar una carga de trabajo pequeña con el modo de aprovisionamiento de inicio flexible.
- Obtén más información sobre las GPU en GKE.