En este instructivo, se muestra cómo ajustar el modelo de lenguaje grande (LLM) Gemma 3 en un clúster de Slurm de varios nodos que usa dos instancias de máquina virtual (VM) A4. Como parte de este instructivo, harás lo siguiente:
Crear una imagen personalizada
Configura una red RDMA.
Ejecuta un trabajo de ajuste distribuido. Para un entrenamiento eficiente en varios nodos, usa la biblioteca Accelerate de Hugging Face con el paralelismo de datos completamente fragmentado (FSDP).
Este instructivo está dirigido 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 programación de trabajos de Slurm para controlar cargas de trabajo de ajuste.
Objetivos
Accede a Gemma 3 con Hugging Face.
Prepara tu entorno.
Crea un clúster de Slurm A4.
Prepara tu carga de trabajo.
Ejecuta un trabajo de ajuste.
Supervisar tu trabajo
Realizar una limpieza
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- Compute Engine
- Google Kubernetes Engine (GKE) Enterprise edition
- Filestore
- Cloud Storage
- Cloud Logging
Para generar una estimación de costos en función del uso previsto,
usa la calculadora de precios.
Antes de comenzar
-
Instala Google Cloud CLI.
-
Configura gcloud CLI para usar tu identidad federada.
Para obtener más información, consulta Accede a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
Crea o selecciona un Google Cloud proyecto.
Roles necesarios para seleccionar o crear un proyecto
- Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
-
Crear un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (
roles/resourcemanager.projectCreator), que contiene el permisoresourcemanager.projects.create. Obtén más información para otorgar roles.
-
Crea un proyecto de Google Cloud :
gcloud projects create PROJECT_ID
Reemplaza
PROJECT_IDpor un nombre para el proyecto Google Cloud que estás creando. -
Selecciona el proyecto Google Cloud que creaste:
gcloud config set project PROJECT_ID
Reemplaza
PROJECT_IDpor el nombre de tu proyecto de Google Cloud .
-
Verifica que la facturación esté habilitada para tu proyecto de Google Cloud .
Habilita la API necesaria:
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 file.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com
-
Otorga roles a tu cuenta de usuario. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de IAM:
roles/compute.admin, roles/iam.serviceAccountUser, roles/file.editor, roles/storage.admin, roles/serviceusage.serviceUsageAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Reemplaza lo siguiente:
PROJECT_ID: ID del proyectoUSER_IDENTIFIER: Es el identificador de tu cuenta de usuario de cuenta. Para obtener ejemplos, consulta Representa a los usuarios del grupo de personal en políticas de IAM.ROLE: Es el rol de IAM que otorgas a tu cuenta de usuario.
- Habilita la cuenta de servicio predeterminada para tu proyecto Google Cloud :
gcloud iam service-accounts enable PROJECT_NUMBER-compute@ \ --project=PROJECT_ID
Reemplaza PROJECT_NUMBER por el número del proyecto. Para revisar el número de tu proyecto, consulta Cómo obtener un proyecto existente.
- Otorga el rol de editor (
roles/editor) a la cuenta de servicio predeterminada:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@" \ --role=roles/editor
- 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
- Accede a tu cuenta de Hugging Face o crea una.
Accede a Gemma 3 con Hugging Face
Para usar Hugging Face y acceder a Gemma 3, sigue estos pasos:
Crea un token de acceso de Hugging Face
read. Haz clic en Tu perfil > Configuración > Tokens de acceso > +Crear token nuevo.Copia y guarda el valor del token
read access. La usarás más adelante en este instructivo.
Instala Cluster Toolkit
Para obtener más información sobre el uso de gcluster y la administración de clústeres, consulta la descripción general del Cluster Toolkit.
Prepara la versión de Cluster Toolkit:
Descarga la versión:
Define la ruta
gcluster:
Prepara el entorno
Para preparar tu entorno, sigue estos pasos:
Configura las variables de entorno predeterminadas:
Reemplaza lo siguiente:
YOUR_PROJECT_ID: Es el ID del proyecto deGoogle Cloud en el que deseas crear tu bucket de Cloud Storage.YOUR_ZONE: Es la zona en la que existe tu reserva.YOUR_REGION: Es la región en la que existe tu reserva.RESERVATION_NAME: Es la URL o el nombre de la reserva que deseas usar para crear tu clúster de Slurm.YOUR_CLUSTER_NAME: Es el nombre del clúster de Slurm que deseas crear.YOUR_GCS_BUCKET: Es un nombre para tu bucket de Cloud Storage que cumple con los requisitos de nombres de buckets.YOUR_HF_TOKEN: El token de acceso de Hugging Face que creaste en la sección anterior.
Crea un bucket de Cloud Storage:
Crea un clúster de Slurm A4
Para crear un clúster de Slurm A4, sigue estos pasos:
Crea el archivo
a4high-slurm-deployment.yaml:Prepara los manifiestos:
Crea los manifiestos de Terraform:
Aplica parches a los manifiestos:
Implemente el clúster:
El comando
gcluster deployes un proceso de dos fases, que se describe a continuación:La primera fase compila una imagen personalizada con todo el software preinstalado, lo que puede tardar hasta 45 minutos en completarse.
En la segunda fase, se implementa el clúster con esa imagen personalizada. Por lo general, este proceso tarda menos en completarse que la primera fase.
Si la primera fase se completa correctamente, pero la segunda falla, puedes intentar implementar el clúster de Slurm nuevamente omitiendo la primera fase:
Prepara tu carga de trabajo
Para preparar tu carga de trabajo, sigue estos pasos:
Crea secuencias de comandos de carga de trabajo
Para crear las secuencias de comandos que usará tu carga de trabajo de ajuste, sigue estos pasos:
Para configurar el entorno virtual de Python, crea el archivo
install_environment.shcon el siguiente contenido:Para especificar la configuración de tu trabajo de ajuste, crea el archivo
accelerate_config.yamlcon el siguiente contenido:Para especificar las tareas que ejecutarán los trabajos en tu clúster de Slurm, crea el archivo
submit.slurmcon el siguiente contenido:Para especificar las dependencias de tu trabajo de ajuste, crea el archivo
requirements.txtcon el siguiente contenido:Para especificar las instrucciones de tu trabajo, crea el archivo
train.pycon el siguiente contenido:
Sube secuencias de comandos al clúster de Slurm
Para subir las secuencias de comandos que creaste en la sección anterior al clúster de Slurm, sigue estos pasos:
Recupera el nombre del nodo de acceso de tu clúster para establecer la variable
LOGIN_NODE:La variable
LOGIN_NODEalmacena un valor similar a${CLUSTER_NAME}-login-001.Sube tus secuencias de comandos al directorio principal del nodo de acceso:
Conéctate al clúster de Slurm
Conéctate al nodo de acceso y propaga tu token de Hugging Face a la nueva sesión:
Instala frameworks y herramientas
Después de conectarte al nodo de acceso, configura un entorno virtual de Python con las dependencias necesarias:
Inicia tu carga de trabajo de ajuste
Para iniciar tu carga de trabajo de ajuste, sigue estos pasos:
Envía el trabajo al programador de Slurm y recopila el ID del trabajo:
En el nodo de acceso de tu clúster de Slurm, puedes supervisar el progreso del trabajo. Para ello, verifica los archivos de resultado creados en tu directorio
home:Si el trabajo se inicia correctamente, el archivo
.errmostrará una barra de progreso que se actualizará a medida que avance el trabajo.
Supervisa tu carga de trabajo
Puedes supervisar el uso de las GPUs en tu clúster de Slurm para verificar que tu trabajo de ajuste fino se ejecute de manera eficiente. Para ello, abre el siguiente vínculo en tu navegador:
https://console.cloud.google.com/monitoring/metrics-explorer?project=PROJECT_ID&pageState=%7B%22xyChart%22%3A%7B%22dataSets%22%3A%5B%7B%22timeSeriesFilter%22%3A%7B%22filter%22%3A%22metric.type%3D%5C%22agent.googleapis.com%2Fgpu%2Futilization%5C%22%20resource.type%3D%5C%22gce_instance%5C%22%22%2C%22perSeriesAligner%22%3A%22ALIGN_MEAN%22%7D%2C%22plotType%22%3A%22LINE%22%7D%5D%7D%7D
Cuando supervisas tu carga de trabajo, puedes ver lo siguiente:
Uso de las GPUs: Para un trabajo de ajuste fino correcto, puedes esperar ver que el uso de las 16 GPUs (ocho GPUs para cada VM del clúster) aumente y se estabilice en un nivel específico durante todo el entrenamiento.
Duración del trabajo: El trabajo debería tomar aproximadamente una hora en completarse.
Realiza una limpieza
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra tu clúster de Slurm
Para borrar tu clúster de Slurm, sigue estos pasos:
Si necesitas borrar todas las redes de VPC, las reglas de firewall, los routers, las IPs y las subredes asociadas con el proyecto, haz lo siguiente:
Borra tu proyecto
Borra un Google Cloud proyecto:
gcloud projects delete PROJECT_ID