En esta guía, se muestra cómo optimizar los costos de las cargas de trabajo de entrega de LLM en GKE. En este instructivo, se usa una combinación de VMs de inicio flexible, VMs Spot y ComputeClasses para la inferencia rentable.
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 especialistas en datos y en IA que estén interesados en usar las capacidades de organización de contenedores de Kubernetes para entregar LLM. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en Google Cloud el contenido, consulta Roles y tareas comunes del usuario de GKE.
Precios de inicio flexible
Se recomienda el inicio flexible si tu carga de trabajo requiere recursos aprovisionados de forma dinámica según sea necesario, durante un máximo de siete días con reservas a corto plazo, sin administración compleja de cuotas y acceso rentable. El inicio flexible cuenta con la tecnología del programador dinámico de cargas de trabajo y se factura con los precios del programador dinámico de cargas de trabajo:
- Puedes recibir un descuento (hasta un 53%) para CPUs virtuales, GPUs, TPUs y cualquier disco SSD local conectado.
- Pagas por uso (PAYG).
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 de gráficos (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 tipo de máquina 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 Información sobre las GPU en GKE.
Inicio flexible
El inicio flexible, con la tecnología de Dynamic Workload Scheduler, es una opción de consumo de GPU en la que GKE conserva tu solicitud de GPU y aprovisiona automáticamente VMs de inicio flexible cuando la capacidad está disponible. Considera usar el inicio flexible para las cargas de trabajo que necesitan capacidad de GPU por un tiempo limitado, hasta siete días, y que no tienen una fecha de inicio fija. Para obtener más información, consulta Inicio flexible.
VMs Spot
Puedes usar las GPU con VMs Spot si tus cargas de trabajo pueden tolerar interrupciones frecuentes en los nodos. Usar VMs Spot o el inicio flexible reduce el precio de la ejecución de GPU. Usar VMs Spot combinadas con el 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.
ComputeClasses
Puedes solicitar GPUs con ComputeClasses. ComputeClasses te permite definir una jerarquía de configuraciones de nodos para que GKE priorice durante las decisiones de ajuste de escala de nodos, de modo que las cargas de trabajo se ejecuten en el hardware seleccionado. Para obtener más información, consulta Acerca de ComputeClasses personalizadas.
Antes de comenzar
- Accede a tu Google Cloud cuenta. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- 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 la cuota interrumpible suficiente para las GPUs NVIDIA L4. Para obtener más información, consulta Cuotas interrumpibles.
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 un nombre de tu elección y un rol de al menos
Read. - Selecciona Generate un token.
Crea una ComputeClass
En esta sección, crearás una ComputeClass personalizada. ComputeClasses define los tipos y las relaciones entre varios recursos de procesamiento que usa tu carga de trabajo.
- En la Google Cloud consola, haz clic en
Activar Cloud Shell en la Google Cloud consola para iniciar una sesión de Cloud Shell. Se abrirá una sesión en el panel inferior de la Google Cloud consola.
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: trueAplica 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
ComputeClasses para
priorizar primero las VMs Spot y, luego, las VMs de inicio flexible
segundo.
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_TOKENpor 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: replicas: 1 selector: matchLabels: app: llm template: metadata: labels: app: llm spec: nodeSelector: cloud.google.com/compute-class: dws-model-inference-class 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: 100GiEn este manifiesto, el campo
mountPathse establece en/tmp, ya que es la ruta en la que se establece la variable de entornoHF_HOMEen el Deep Learning Container (DLC) para la inferencia de generación de texto (TGI), en lugar de la ruta/datapredeterminada que se establece dentro de la imagen predeterminada de TGI. El modelo descargado se almacenará en este directorio.Implementa el modelo:
kubectl apply -f mixtral-deployment.yamlGKE programa un Pod nuevo para implementar, lo que activa el escalador automático del grupo de nodos para agregar un segundo nodo antes de implementar la segunda réplica del modelo.
Verifica el estado del modelo:
watch kubectl get deploy inference-mixtral-cccSi el modelo se implementó correctamente, el resultado es similar al siguiente:
NAME READY UP-TO-DATE AVAILABLE AGE inference-mixtral-ccc 1/1 1 1 10mPara salir de la visualización, presiona
CTRL + C.Espera a que el contenedor descargue el modelo y comience a entregarlo:
watch "kubectl logs $(kubectl get pods -l app=llm -o custom-columns=:metadata.name --no-headers) | tail"Para salir de la visualización, presiona
CTRL + C.Observa los grupos de nodos que aprovisionó GKE:
kubectl get nodes -L cloud.google.com/gke-nodepoolEl 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-poolEl nombre del grupo de nodos creado indica el tipo de máquina. En este caso, GKE aprovisionó VMs Spot.
Expón el modelo:
kubectl expose deployment/inference-mixtral-ccc --port 8080 --name=llm-service
Interactúa con el modelo usando 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:8080El resultado es similar a este:
Forwarding from 127.0.0.1:8080 -> 8080En una sesión de terminal nueva, chatea con tu modelo usando
curl: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
- En la Google Cloud consola, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que deseas borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.
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-secretBorra 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 inicio flexible.
- Obtén más información sobre las GPU en GKE.