En este instructivo, se muestra cómo ajustar un modelo de lenguaje grande (google/gemma-4-31b-it) Gemma 4 de 31 mil millones de parámetros en un clúster de Autopilot de Google Kubernetes Engine (GKE) con varias GPU y varios hosts en Google Cloud. Este clúster usa dos instancias de máquina virtual (VM) A4 (a4-highgpu-8g) con un total de 16 GPUs NVIDIA B200.
Los tres procesos principales que se describen en este instructivo son los siguientes:
- Implementa un clúster de GKE de varios hosts en modo Autopilot.
- Compila una imagen de contenedor personalizada con las dependencias de ajuste necesarias con Cloud Build.
- Orquesta una carga de trabajo de ajuste de datos distribuida en varios hosts en las 16 GPUs con JobSet de Kubernetes y la biblioteca Hugging Face Accelerate con Fully Sharded Data Parallel v2 (FSDP v2), y envía los puntos de control a Hugging Face Hub.
Este instructivo está dirigido a ingenieros, investigadores, administradores y operadores de plataformas de aprendizaje automático (AA), y especialistas en datos y en IA que implementan clústeres de GKE en Google Cloud para ajustar LLMs en varios hosts.
Objetivos
Accede al modelo de Gemma 4 con Hugging Face.
Prepara tu entorno.
Crea e implementa un clúster de GKE A4 de varios hosts.
Ajusta el modelo Gemma 4 31B en 16 GPUs con Kubernetes
JobSety Hugging Face Accelerate con FSDP v2.Supervisar tu trabajo
Consulta los pesos del adaptador ajustado en Hugging Face Hub.
Realizar una limpieza
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto,
usa la calculadora de precios.
Antes de comenzar
Si quieres obtener los permisos que necesitas para completar este instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
- Administrador de Kubernetes Engine (
roles/container.admin) - Administrador de Compute (
roles/compute.admin) - Administrador de almacenamiento (
roles/storage.admin) - Administrador de Artifact Registry (
roles/artifactregistry.admin) - Editor de Cloud Build (
roles/cloudbuild.builds.editor) - Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser) - Administrador de cuenta de servicio (
roles/iam.serviceAccountAdmin) - Administrador de IAM de proyecto (
roles/resourcemanager.projectIamAdmin) - Administrador de Service Usage ()
roles/serviceusage.serviceUsageAdmin
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
Habilita las APIs necesarias si aún no están habilitadas:
Roles necesarios para habilitar las APIs
Para habilitar APIs, necesitas el permiso
serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.gcloud services enable compute.googleapis.com
container.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com Habilita la cuenta de servicio predeterminada de Compute Engine para tu proyectoGoogle Cloud :
export PROJECT_NUMBER="$(gcloud projects describe "YOUR_PROJECT_ID" --format "value(project_number)")" gcloud iam service-accounts enable "${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --project=YOUR_PROJECT_IDOtorga los roles de IAM con privilegios mínimos que la cuenta de servicio predeterminada de Compute Engine necesita para compilar la imagen del contenedor y ejecutar la carga de trabajo de ajuste:
ROLES=( "roles/artifactregistry.writer" "roles/cloudbuild.builds.builder" "roles/logging.logWriter" "roles/monitoring.metricWriter" "roles/monitoring.viewer" "roles/stackdriver.resourceMetadata.writer" "roles/storage.objectViewer" ) for role in "${ROLES[@]}"; do gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --role="${role}" 1>/dev/null done unset ROLESVerifica que los roles se hayan otorgado a la cuenta de servicio predeterminada de Compute Engine:
echo "Displaying roles for ${PROJECT_NUMBER}-compute@developer.gserviceaccount.com:" gcloud projects get-iam-policy YOUR_PROJECT_ID \ --flatten="bindings[].members" \ --filter="bindings.members:serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --format="table(bindings.role)"Crea credenciales de autenticación locales para tu cuenta de usuario:
gcloud auth application-default login
Habilita el Acceso al SO para tu proyecto:
gcloud compute project-info add-metadata \ --metadata=enable-oslogin=TRUE \ --project=YOUR_PROJECT_ID
Accede a Gemma 4 con Hugging Face
Para usar Hugging Face y acceder a Gemma 4, completa los siguientes pasos:
- Accede a Hugging Face y acepta el contrato de licencia de Gemma 4.
- Crea un token de acceso de Hugging Face
write.
Haz clic en Tu perfil > Configuración > Tokens de acceso > +Crear token nuevo. - Copia y guarda el valor del token de acceso
write. Usarás este token para descargar el modelo base y enviar los puntos de control del adaptador ajustado a Hugging Face Hub antes de que GKE reduzca la escala verticalmente de los nodos de GPU.
Prepara el entorno
Para preparar tu entorno, configura las siguientes variables de entorno:
Reemplaza lo siguiente:
YOUR_PROJECT_ID: Es el ID del Google Cloud proyecto en el que deseas crear el clúster de GKE.
YOUR_CLUSTER_NAME: Es el nombre del clúster de GKE que se creará.
YOUR_REGION: Es la región en la que deseas crear tu clúster de GKE. Solo puedes crear el clúster en la región en la que existe tu reserva.
YOUR_RESERVATION_NAME: Es el identificador de tu capacidad reservada.
YOUR_HF_TOKEN: El token de acceso de Hugging Face
writeque creaste en la sección anterior.YOUR_ARTIFACT_REGISTRY_LOCATION: La Google Cloud región (por ejemplo,
us-central1) en la que deseas crear tu repositorio de Artifact Registry Para minimizar la latencia de extracción de imágenes, usa la misma región que especificaste para YOUR_REGION.YOUR_NUMBER_OF_NODES: Es la cantidad de nodos de VM A4 en tu trabajo de ajuste. Para este instructivo de varios hosts con 16 GPUs NVIDIA B200 en dos instancias de
a4-highgpu-8g, establece este valor en2.
Crea un clúster de GKE de varios hosts en modo Autopilot
Crea un clúster de GKE de varios hosts en modo Autopilot:
La creación del clúster de GKE puede tardar varios minutos en completarse. Para verificar que Google Cloud haya terminado de crear tu clúster, ve a Clústeres de Kubernetes en la consola de Google Cloud .
Configura kubectl para comunicarse con tu clúster de GKE
Configura kubectl para comunicarse con tu clúster de GKE:
Crea un secreto de Kubernetes para las credenciales de Hugging Face
Crea un secreto de Kubernetes para almacenar tu token de Hugging Face:
Prepara tu carga de trabajo
Para preparar tu carga de trabajo, haz lo siguiente:
Crea secuencias de comandos de cargas de trabajo
Para crear los archivos de configuración y las secuencias de comandos que usa tu carga de trabajo de ajuste, completa los siguientes pasos:
Crea un directorio para las secuencias de comandos de la carga de trabajo. Usa este directorio como tu directorio de trabajo.
Crea el archivo
cloudbuild.yamlpara compilar la imagen del contenedor de la carga de trabajo con Cloud Build y enviarla a Artifact Registry:Crea un archivo
Dockerfilepara definir el entorno y, luego, instala las dependencias necesarias para completar el trabajo de ajuste:Crea el archivo
accel_fsdp_gemma4_config.yaml. Esta configuración dirige Hugging Face Accelerate para fragmentarGemma4TextDecoderLayeren 16 GPUs en dos hosts con FSDP v2:Crea el manifiesto de
finetune.yamlKubernetesJobSet:Crea la secuencia de comandos de ajuste supervisado
finetune.py:
Usa Docker y Cloud Build para crear un contenedor de ajuste
Crea un repositorio de Docker de Artifact Registry:
Instala las definiciones de recursos personalizados (CRD) de
JobSetnecesarias para organizar cargas de trabajo de varios hosts:En el directorio
llm-finetuning-gemmaque creaste en un paso anterior, envía la compilación del contenedor a Cloud Build:Exporta la URL de la imagen del contenedor de varios hosts. La usarás en un paso posterior de este instructivo, cuando implementes el manifiesto
JobSet:
Inicia tu carga de trabajo de ajuste
Para implementar y supervisar tu carga de trabajo de ajuste distribuido, completa los siguientes pasos:
Sustituye las variables de entorno en el manifiesto de ajuste para crear el trabajo de ajuste:
Dado que tu clúster se ejecuta en el modo Autopilot de GKE, es posible que tarde unos minutos en aprovisionar los dos nodos A4 habilitados para GPU y extraer la imagen del contenedor.
Observa los pods de trabajador hasta que ambos pasen al estado
Running:Después de que los Pods de trabajador pasen a
Running, transmite los registros de entrenamiento:
Supervisa tu carga de trabajo
Puedes supervisar el uso de la GPU en tu clúster de GKE para verificar que las 16 GPU de los dos hosts A4 estén procesando de forma activa los pasos de entrenamiento. Genera y abre el vínculo de observabilidad en tu navegador:
Cuando supervises tu carga de trabajo, espera el siguiente comportamiento:
- Utilización de la GPU: Para un trabajo de ajuste fino distribuido en buen estado, puedes esperar ver que la utilización de la GPU en las 16 GPU NVIDIA B200 aumente y se estabilice cerca del 95% al 100% durante los pasos de entrenamiento.
- Duración del trabajo: En dos nodos
a4-highgpu-8g(16 GPUs B200), el trabajo de ajuste de 3 épocas tarda aproximadamente 2 horas y media en completarse.
Cómo ver los pesos del adaptador ajustado
Cuando finalice el entrenamiento, consulta los pesos y los puntos de control del adaptador LoRA ajustado en Hugging Face Hub en https://huggingface.co/YOUR_HF_USERNAME/gemma-31b-text-to-sql.
Realiza una limpieza
Para evitar que se generen cargos adicionales, borra los recursos que creaste durante este instructivo.
Borra tus recursos
Borra el
JobSetdel ajuste:Borra tu clúster de GKE:
Borra tu repositorio de Artifact Registry: