En este instructivo, se muestra cómo ajustar un modelo mistralai/Mixtral-8x7B-v0.1
en un clúster de Slurm de varios nodos y varias GPUs en Google Cloud. El clúster usa dos
instancias de máquina virtual (VM) a4-highgpu-8g, cada una con 8 GPUs NVIDIA B200.
Los dos procesos principales que se describen en este instructivo son los siguientes:
- Implementa un clúster de Slurm de alto rendimiento y de nivel de producción con el Google Cloud Cluster Toolkit. Como parte de esta implementación, crearás una imagen de VM personalizada con el software necesario preinstalado. También configuras un sistema de archivos Lustre compartido y una red de alta velocidad.
- Después de implementar el clúster, ejecuta un trabajo de ajuste distribuido con el conjunto de secuencias de comandos que acompañan a este instructivo. El trabajo aprovecha el paralelismo de datos completamente fragmentados (FSDP) de PyTorch, al que accedes a través de la biblioteca Transformer aprendizaje por refuerzo (TRL) de Hugging Face.
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 estén interesados en distribuir una carga de trabajo de IA en varios nodos y GPU.
Objetivos
- Accede a Mixtral con Hugging Face
- Instala Cluster Toolkit
- Prepara el entorno
- Crear e implementar un clúster de Slurm de GPU alta A4 de nivel de producción
- Configurar un entorno de varios nodos para el entrenamiento distribuido con FSDP
- Ajusta el modelo de Mixtral con la clase
trl.SFTTrainerde Hugging Face. - Almacena datos de forma temporal en SSD locales.
- Supervisar tu trabajo
- 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
-
Instala Google Cloud CLI.
-
Configura gcloud CLI para usar tu identidad federada.
Para obtener más información, consulta Accede a gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
Crea o selecciona un proyecto de Google Cloud .
Roles necesarios para seleccionar o crear un proyecto
- Seleccionar 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.
-
Crea 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 de Google Cloud que estás creando. -
Selecciona el proyecto de 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 requerida, si aún no está habilitada:
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 obtenerlo 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 lustre.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 . Para ver ejemplos, consulta Representa a los usuarios del grupo de personal en las 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 de 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 Obtén 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 una cuenta de Hugging Face o crea una.
- Instala las dependencias que necesitas para usar Cluster Toolkit.
Accede a Mixtral con Hugging Face
Para usar Hugging Face y acceder a Mixtral, haz lo siguiente:
- Accede a Hugging Face y explora el modelo de Mixtral.
- Crea un token de acceso de Hugging Face
read. - Copia y guarda el valor del token. Lo usarás más adelante en este instructivo.
Instala Cluster Toolkit
Cluster Toolkit es una herramienta de código abierto que simplifica la implementación de cargas de trabajo de computación de alto rendimiento (HPC), inteligencia artificial (IA) y aprendizaje automático (AA) en Google Cloud. Para obtener más información sobre el uso de la
CLI de gcluster y la administración de
clústeres, consulta la
descripción general de 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 nombre del proyecto de Google Cloud en el que quieres crear tu clúster de Slurm.YOUR_ZONE: Es la zona en la que existe tu reserva.YOUR_REGION: Es la región en la que existe tu reserva.YOUR_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 de tu implementación. Usa un nombre corto que solo contenga letras y números (por ejemplo,a4high). Este nombre también se asigna al clúster de Slurm que crea la implementación.YOUR_GCS_BUCKET: Es el nombre del bucket en el que almacenas los resultados del punto de control de entrenamiento. Especifica un bucket existente o crea uno nuevo. Antes de crearlo, familiarízate con los requisitos de nombres de buckets.YOUR_HF_TOKEN: El token de Hugging Face que creaste en un paso anterior.
Crea un bucket de Cloud Storage:
Crea un clúster de Slurm A4
Para crear un clúster de Slurm A4, haz lo siguiente:
Reemplaza el archivo
a4high-slurm-deployment.yamlen el directorioexamples/machine-learning/a4-highgpu-8gpor tus variables de entorno. Para ello, ejecuta el siguiente comando:Abre el archivo
a4high-slurm-blueprint.yamlen el directorioexamples/machine-learning/a4-highgpu-8gy edítalo para usar Managed Lustre en el directorio/homecompartido de la siguiente manera:- Quita el bloque de módulo
homefspredeterminado consource: modules/file-system/filestore. - Habilita los módulos
lustrefs(bloquehomefsconremote_mount: lustrefs) yprivate-service-access. - En el bloque
vars, configura lo siguiente:- Cambia el valor de
install_managed_lustreen/var/tmp/slurm_vars.jsonatrue. - Establece el parámetro
per_unit_storage_throughputen500. - Establece el parámetro
lustre_size_giben36000. - Quita el comentario de
lustre_instance_id: lustre-instance. - Marca como comentario o quita los
filestore_ip_rangeque no se usen.
- Cambia el valor de
- Quita el bloque de módulo
Implemente el clúster:
El comando
./gcluster deployinicia un proceso de dos fases, que es el siguiente:- En la primera fase, se compila una imagen personalizada con todo el software preinstalado, lo que puede tardar hasta 35 minutos en completarse.
- En la segunda fase, se implementa el clúster con esa imagen personalizada. Este proceso debería completarse más rápido que 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 las dependencias de Python de la secuencia de comandos de entrenamiento, crea un archivo
requirements-fsdp.txtcon el siguiente contenido:Especifica
train-mixtral.pycomo la secuencia de comandos de entrenamiento principal:Para especificar las tareas de los trabajos que se ejecutarán en tu clúster de Slurm, crea el archivo
train-mixtral.shcon el siguiente contenido:
Sube las secuencias de comandos a tu 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:
Establece la variable
LOGIN_NODErecuperando el nombre del nodo de acceso de tu clúster:La variable
LOGIN_NODEalmacena un valor similar a${DEPLOYMENT_NAME}-login-001.Crea una regla de firewall:
Sube tus secuencias de comandos al directorio principal del nodo de acceso:
Conéctate al clúster de Slurm
Conéctate al clúster de Slurm conectándote al nodo de acceso a través de SSH:
Instala frameworks y herramientas
Después de conectarte al nodo de acceso, instala los frameworks y las herramientas necesarios ejecutando la secuencia de comandos de instalación en un nodo de procesamiento:
Este comando configura el entorno virtual, instala todas las dependencias y
descarga los pesos del modelo de Mixtral en ~/Mixtral-8x7B-v0.1. Este proceso puede
tardar más de 30 minutos.
Ejecutar este paso a través de srun delega la secuencia de comandos de instalación del nodo de acceso a un nodo de procesamiento asignado, lo que permite que la secuencia de comandos acceda a los controladores de GPU durante la compilación.
Inicia tu carga de trabajo de ajuste
Para iniciar tu carga de trabajo de entrenamiento, haz lo siguiente:
Envía el trabajo al programador de Slurm:
Supervisa tu carga de trabajo
Para supervisar el progreso de tu trabajo de ajuste fino, usa los siguientes métodos:
En el nodo de acceso de tu clúster de Slurm, puedes supervisar el progreso del trabajo verificando los archivos de salida creados en tu directorio
home:Si el trabajo se inicia correctamente, el archivo
.errmuestra una barra de progreso que se actualiza a medida que avanza el trabajo.El trabajo tiene dos fases principales:
- Copiar el modelo base grande en la SSD local de cada nodo de procesamiento
- El trabajo de entrenamiento, que comienza una vez que se completa la copia del modelo.
Todo el trabajo tarda unos 60 minutos en ejecutarse.
También puedes supervisar el uso de las GPU en tu clúster de Slurm para verificar que tu trabajo de ajuste se ejecute de manera eficiente. Para ello, abre el siguiente vínculo en tu navegador:
https://console.cloud.google.com/monitoring/metrics-explorer?project=YOUR_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%7DComo alternativa, puedes ingresar el comando directamente en la terminal:
Cuando supervisas tu carga de trabajo, puedes ver lo siguiente:
Uso de GPU: Para un trabajo de ajuste correcto, puedes esperar que el uso de las 16 GPU (ocho GPU para cada VM del clúster) aumente y se estabilice en un nivel específico durante el entrenamiento.
Duración del trabajo: El trabajo debería tardar 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 recursos
Ejecuta los siguientes comandos para borrar los recursos que creaste en este instructivo:
Para borrar tu clúster de Slurm, ve al directorio
cluster-toolkity ejecuta el comandogcluster destroy:Borra el bucket:
Para borrar una imagen de Packer, abre tu navegador web, navega a la siguiente página, busca tu imagen específica y haz clic en Borrar.
Borra tu proyecto
Borra un proyecto de Google Cloud :
gcloud projects delete PROJECT_ID
¿Qué sigue?
- Vuelve a implementar un clúster de Slurm
- Prueba el rendimiento de la red en un clúster de Slurm
- Supervisa las VMs en un clúster de Slurm
- Crea un extremo de entrega: Una vez que tengas tu modelo ajustado, puedes implementarlo en un extremo de entrega con Google Kubernetes Engine (GKE) o Vertex AI para que sea accesible para la inferencia.
- Obtén información sobre los servicios de almacenamiento recomendados para las cargas de trabajo de IA y AA