Pila MLperf: Slurm, Pyxis, Enroot

El benchmark MLperf se considera uno de los conjuntos de pruebas que permiten juzgar con precisión el rendimiento de los servidores con GPUs y aceleradores de IA. Desafortunadamente, no es el benchmark al que todos están acostumbrados, en el que basta con ejecutar un archivo ejecutable y obtener el resultado final después de un tiempo. MLperf es un conjunto de scripts que permiten realizar pruebas con varios conjuntos de datos. Los propios conjuntos de datos no se incluyen en el kit de benchmark. Necesitas descargarlo por separado y prepararlo para trabajar.
En las versiones modernas de MLperf, este conjunto de scripts no puede ser ejecutado en un sistema limpio. Para probar el benchmark en acción, necesitarás preparar el entorno adecuadamente para la mayoría de las pruebas. Los autores de MLperf eligieron Slurm Workload Manager como una herramienta de gestión de trabajos, que se utiliza en la mayoría de los supercomputadores del mundo. Esta aplicación de código abierto permite una gestión flexible de las cargas de trabajo mediante la distribución de tareas informáticas entre todos los miembros del clúster.
Un clúster Slurm mínimo consta de un nodo de cálculo y un nodo de gestión. Idealmente, estos son dos servidores diferentes que se comunican entre sí usando nombres de host, que en el caso de Linux, se especifican en el archivo /etc/hosts. Además del clúster configurado, MLperf requiere dos plugins: Pyxis y Enroot. El primero es una extensión que permite a un usuario no privilegiado ejecutar cargas de trabajo contenerizadas. El segundo elimina la mayoría de los mecanismos de aislamiento de los contenedores regulares, eliminando así casi todos los costos de rendimiento mientras se mantiene la separación del sistema de archivos.
Paso 1. Preparar el sistema
Comienza por actualizar el repositorio de caché de paquetes y los paquetes instalados:
sudo apt update && sudo apt -y upgrade
No olvides instalar los controladores NVIDIA® usando el comando de autoinstalación o manualmente, usando nuestra guía paso a paso:
sudo ubuntu-drivers autoinstall
Reinicia el servidor:
sudo shutdown -r now
Paso 2. Instalar Slurm
Para estas instrucciones, se seleccionó Ubuntu 22.04 LTS como sistema operativo, por lo que Slurm puede ser instalado directamente desde el repositorio estándar. El paquete slurm-wlm contiene tanto slurmd para el nodo de cálculo como slurmctld para el nodo de control. Instala el paquete:
sudo apt install slurm-wlm
Por defecto, después de la instalación, ninguno de los demonios funcionará porque falta el archivo de configuración principal, slurm.conf. Los desarrolladores se han esforzado por reducir la barrera de entrada al crear una página web con un configurador. Aquí, puedes ensamblar de forma independiente el archivo de configuración en partes, utilizando las pistas proporcionadas para cada ítem.
Ten en cuenta que para una instalación estándar en Ubuntu 22.04 LTS, tiene sentido elegir LinuxProc en lugar de Cgroup. Después de hacer clic en el botón Enviar en la parte inferior de la página, recibirás el texto finalizado del archivo de configuración. Copia esto a tu portapapeles y ejecuta el siguiente comando:
sudo nano /etc/slurm/slurm.conf
Pega el contenido del portapapeles y guarda el archivo. Ahora, puedes iniciar el demonio del nodo de cálculo:
sudo systemctl start slurmd.service
Puedes verificar el estado del demonio utilizando el siguiente comando:
sudo systemctl status slurmd.service
Paso 3. Configurar el controlador Slurm
Antes de poder iniciar el demonio del controlador, necesitarás dar algunos pasos adicionales. Primero, necesitarás crear un directorio donde el demonio pueda almacenar información de servicio sobre trabajos en ejecución:
sudo mkdir -p /var/spool/slurmctld
El directorio fue creado con éxito, pero actualmente, el usuario slurm, en nombre del cual se está ejecutando el controlador, no puede escribir nada allí. Hagamos que sea el propietario del directorio:
sudo chown slurm:slurm /var/spool/slurmctld
Ahora, puedes iniciar el demonio del controlador:
sudo systemctl start slurmctld.service
Para comprobar el estado operativo del controlador, puedes utilizar el comando estándar:
sudo systemctl status slurmctld.service
También puedes ver inmediatamente el estado actual del sistema, en particular cuántos nodos de cálculo están conectados al controlador y determinar su estado actual:
sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 1 idle gpuserver
Paso 4. Instalar Pyxis
Slurm amplía sus capacidades utilizando el mecanismo SPANK (Arquitectura de Plugins de Slurm para Nodo y Control de Trabajos [K]). No necesita ser instalado ni configurado por separado de la aplicación principal. Sin embargo, es aconsejable detener temporalmente ambos demonios antes de cualquier instalación de plugin:
sudo systemctl stop slurmd.service && sudo systemctl stop slurmctld.service
Como el proceso de instalación de Pyxis implica la construcción a partir del código fuente, primero debes instalar un paquete que contenga las bibliotecas para desarrolladores:
sudo apt -y install libslurm-dev
El proceso de construcción de Pyxis supone que la aplicación se instala desde el código fuente y buscará algunos archivos en la ruta absoluta /use/include/slurm. En nuestro ejemplo, el paquete slurm-wlm los colocó en el directorio /usr/include/slurm-wlm. Para resolver este problema, basta con crear un enlace simbólico:
sudo ln -s /usr/include/slurm-wlm /usr/include/slurm
Clona el código fuente del plugin del repositorio oficial de Nvidia:
git clone https://github.com/NVIDIA/pyxis
Abre el directorio descargado:
cd pyxis
Inicia el proceso de compilación:
sudo make install
Una vez que la compilación se haya completado, tendrás que crear otro enlace simbólico:
sudo ln -s /usr/local/share/pyxis/pyxis.conf /etc/slurm/plugstack.conf.d/pyxis.conf
Ahora, todo está listo para lanzar ambos demonios:
sudo systemctl start slurmd.service && sudo systemctl start slurmctld.service
Si se ha realizado correctamente, cuando ejecutes el siguiente comando, verás nuevas opciones marcadas [pyxis]:
srun --help
Paso 5. Instalar Enroot
Al igual que con el plugin anterior, tiene sentido detener primero los demonios:
sudo systemctl stop slurmd.service && sudo systemctl stop slurmctld.service
A continuación, utiliza la función de comando shell para guardar los datos de la arquitectura de la CPU en una variable separada. Esto es conveniente para ejecutar los comandos siguientes, ya que sustituye automáticamente el valor guardado, en lugar de requerir una edición manual:
arch=$(dpkg --print-architecture)
Descarga el paquete DEB:
curl -fSsL -O https://github.com/NVIDIA/enroot/releases/download/v3.4.1/enroot_3.4.1-1_${arch}.deb
Puedes instalarlo usando la utilidad dpkg:
sudo dpkg -i enroot_3.4.1-1_${arch}.deb
Si el sistema informa que faltan algunas dependencias, puedes instalarlas manualmente:
sudo apt-get -f install
Finalmente, inicia ambos demonios:
sudo systemctl start slurmd.service && sudo systemctl start slurmctld.service
Este es el conjunto mínimo de pasos necesarios para implementar un simple clúster Slurm con los plugins Pyxis y Enroot. Puedes encontrar información adicional en la documentación oficial en el sitio web del proyecto.
Ver también:
Actualizado: 28.03.2025
Publicado: 09.07.2024