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 apto para la producción con elGoogle Cloud Cluster Toolkit. Como parte de esta implementación, crearás una imagen de VM personalizada con el software necesario preinstalado. También configurarás un sistema de archivos Lustre compartido y redes de alta velocidad.
- Después de que se implemente el clúster, ejecutarás 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 se accede a través de la biblioteca Transformer Reinforcement Learning (TRL) de Hugging Face.
Este instructivo está dirigido a ingenieros e investigadores de aprendizaje automático (AA), administradores y operadores de plataformas, y especialistas en IA y datos que deseen distribuir una carga de trabajo de IA en varios nodos y GPUs.
Objetivos
- Accede a Mixtral con Hugging Face
- Instala Cluster Toolkit
- Prepara el entorno
- Crea e implementa un clúster de Slurm de A4 High-GPU apto para la producción.
- Configura un entorno de varios nodos para el entrenamiento distribuido con FSDP.
- Ajusta el modelo de Mixtral con la clase
trl.SFTTrainerde Hugging Face. - Transfiere datos a 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
- Accede a tu cuenta de Google Cloud . 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.
-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder 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 lustre.googleapis.com
-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder 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 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 de . Por ejemplo,myemail@example.com. Cuenta deROLE: 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@developer.gserviceaccount.com \ --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@developer.gserviceaccount.com" \ --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.
- 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. La 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 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 nombre del proyecto Google Cloud en el que deseas 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: 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 del 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:
Ejecuta el siguiente comando para reemplazar el archivo
a4high-slurm-deployment.yamlen el directorioexamples/machine-learning/a4-highgpu-8gcon tus variables de entorno: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 del 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 del 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 para 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 que ejecutarán los trabajos 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:
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${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, ejecuta la secuencia de comandos de instalación en un nodo de procesamiento para instalar los frameworks y las herramientas requeridos:
Este comando configura el entorno virtual, instala todas las dependencias y descarga los pesos del modelo Mixtral en ~/Mixtral-8x7B-v0.1. Este proceso puede demorar 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
.errmostrará una barra de progreso que se actualizará a medida que avance el trabajo.El trabajo tiene dos fases principales:
- Se copia el modelo base grande en la SSD local de cada nodo de procesamiento.
- Es 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 GPUs en tu clúster de Slurm para verificar que el 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=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 la GPU: Para un trabajo de ajuste fino correcto, puedes esperar ver 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 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 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 siguiente comando:Borra tu 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 Google Cloud proyecto:
gcloud projects delete PROJECT_ID
¿Qué sigue?
- Vuelve a implementar un clúster de Slurm
- Cómo probar el rendimiento de la red en un clúster de Slurm
- Supervisa las VMs en un clúster de Slurm
- Crea un extremo de servicio: Una vez que tengas tu modelo ajustado, puedes implementarlo en un extremo de servicio con Google Kubernetes Engine (GKE) o Vertex AI para que sea accesible para la inferencia.
- Obtén más información sobre los servicios de almacenamiento recomendados para las cargas de trabajo de IA y AA