En este instructivo, se muestra cómo ajustar un
Gemma 4
31B (google/gemma-4-31b-it) en un clúster de Autopilot de Google Kubernetes Engine (GKE) de varias máquinas y varias GPUs
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 varias máquinas en modo Autopilot.
- Compila una imagen de contenedor personalizada con las dependencias de ajuste necesarias mediante Cloud Build.
- Organiza una carga de trabajo de ajuste distribuida de varias máquinas en las 16 GPUs con Kubernetes JobSet y la biblioteca Hugging Face Accelerate con Fully Sharded Data Parallel v2 (FSDP v2), y envía puntos de control a Hugging Face Hub.
Este instructivo está dirigido a ingenieros de aprendizaje automático (AA), investigadores, administradores y operadores de plataformas, y especialistas en datos y en IA que implementan clústeres de GKE en Google Cloud para ajustar LLMs en varias máquinas.
Objetivos
Accede al modelo de Gemma 4 con Hugging Face.
Prepara el entorno.
Crea y, luego, implementa un clúster de GKE A4 de varias máquinas.
Ajusta el modelo de Gemma 4 31B en 16 GPUs con Kubernetes
JobSety Hugging Face Accelerate con FSDP v2.Supervisa tu trabajo
Consulta las ponderaciones de adaptación ajustadas en Hugging Face Hub.
Realiza 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 mediante roles personalizados o cualquier otro rol predefinido.
Instala e inicializa Google Cloud CLI y, luego, instala
kubectl. Si usas Cloud Shell, ambas herramientas están preinstaladas.Habilita las APIs requeridas, si aún no están habilitadas:
Roles necesarios para habilitar las APIs
Para habilitar las 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 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 Google Cloud proyecto:
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 menos privilegios que necesita la cuenta de servicio predeterminada de Compute Engine para compilar la imagen de 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 se hayan otorgado los roles 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 para acceder a Gemma 4, completa los siguientes pasos:
- Accede a Hugging Face y acepta el acuerdo de licencia de Gemma 4.
- Crea un token de acceso
writede Hugging Face.
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 puntos de control de adaptación ajustados a Hugging Face Hub antes de que GKE reduzca los nodos de GPU.
Prepara el entorno
Para preparar el 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á. Este nombre debe tener 40 caracteres o menos y estar compuesto por caracteres alfanuméricos en minúscula y guiones.
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: Es el token de acceso
writede Hugging Face que creaste en la sección anterior.YOUR_ARTIFACT_REGISTRY_LOCATION: Es 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 tú 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 varias máquinas con 16 GPUs NVIDIA B200 en dos instancias
a4-highgpu-8g, establece este valor en2.
Crea un clúster de GKE de varias máquinas en modo Autopilot
Crea un clúster de GKE de varias máquinas 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 carga 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 carga de trabajo. Usa este directorio como tu directorio de trabajo.
Crea el archivo
cloudbuild.yamlpara compilar la imagen de contenedor de carga de trabajo con Cloud Build y enviarla a Artifact Registry:Crea un archivo
Dockerfilepara definir el entorno y, luego, instalar 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 máquinas con FSDP v2:Crea el manifiesto
JobSetde Kubernetesfinetune.yaml: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)
JobSetnecesarias para organizar cargas de trabajo de varias máquinas: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 de contenedor de varias máquinas. 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 distribuida, completa los siguientes pasos:
Sustituye las variables de entorno en el manifiesto de ajuste para crear el trabajo de ajuste:
Debido a que tu clúster se ejecuta en el modo Autopilot de GKE, puede tardar unos minutos en aprovisionar los dos nodos A4 habilitados para GPU y extraer la imagen de 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 GPUs en ambas máquinas A4 procesen 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:
- Uso de la GPU: Para un trabajo de ajuste distribuido correcto, puedes esperar ver que el uso de la GPU en las 16 GPUs 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.
Consulta las ponderaciones de adaptación ajustadas
Cuando finalice el entrenamiento, consulta las ponderaciones y los puntos de control de adaptación de LoRA ajustados en Hugging Face Hub en
https://huggingface.co/YOUR_HF_USERNAME/gemma-31b-text-to-sql.
Limpia
Para evitar que se generen cargos adicionales, borra los recursos creados durante este instructivo.
Borra tus recursos
Borra el
JobSetde ajuste:Borra tu clúster de GKE:
Borra tu repositorio de Artifact Registry: