¿Estás visitando desde Argentina?
Ingresá a Linware Argentina ⯈
Continuar en Linware Argentina ⯈
×
¿Qué estás buscando?
BUSCAR!
BLOG
Simplifique el desarrollo de aplicaciones de GPU con HMM en SLES o SLE HPC 15 SP5
Publicada el 30/10/2023

Recientemente, NVIDIA ha introducido la gestión de memoria heterogénea (HMM) en sus controladores de kernel de código abierto , lo que simplifica el desarrollo de aplicaciones GPU con CUDA. Unifica el acceso a la memoria del sistema entre CPU y GPU y elimina la necesidad de copiar el contenido de la memoria entre la memoria de la CPU y la GPU. Extiende la Memoria Unificada para cubrir tanto la memoria asignada por el sistema como la memoria asignada por cudaMallocManaged().


Quizás se pregunte: "¿Cómo hago para que esto funcione en mi sistema?" Si es usuario de SUSE Linux Enterprise Server (SLES) o SUSE Linux Enterprise High Performance Computing (SLE HPC) 15 SP5, el controlador abierto ya está disponible para usted. Por lo tanto, si tiene un chipset NVIDIA con un procesador de sistema GPU (GSP), es decir. NVIDIA Turing o posterior, lo tenemos cubierto (usuarios de openSUSE Leap, consulten aquí ). Aquí es cómo:

Instalación en SLES/SLE HPC 15 SP5

Inicie sesión en su sistema como root.
Debido a la naturaleza modular de SLES, es necesario agregar dos módulos adicionales que no están habilitados de forma predeterminada (aunque sí están habilitados en SLE-HPC):

SUSEConnect -p sle-module-desktop-applications/15.5/x86_64nSUSEConnect -p sle-module-desarrollo-herramientas/15.5/x86_64n

Tenga en cuenta que su sistema SLE debe estar registrado para que estos comandos funcionen. En SLES y SLE HPC, agregue el módulo de computación NVIDIA ahora e instale los paquetes necesarios ejecutando:

SUSEConnect -p sle-module-NVIDIA-compute/15/x86_64nzypper --gpg-auto-import-keys actualizarnzypper -n install -y --auto-acuerdo-con-licencias --no-recomienda nvidia-open-gfxG05-kmp-default cudan

En caso de que necesite un arranque seguro o una implementación en un entorno de nube pública, es posible que desee aprovechar los controladores de kernel abierto G06, que están prediseñados y firmados por SUSE y se envían con SLE. Para instalar estos controladores, agregue un repositorio adicional con los siguientes comandos en lugar de los anteriores:

zypper ar https://download.nvidia.com/suse/sle15sp5/ NVIDIAnSUSEConnect -p sle-module-NVIDIA-compute/15/x86_64 --gpg-auto-import-keysnzypper --gpg-auto-import-keys actualizarnzypper -n in -y --auto-aceptar-con-licencias --no-recomienda nvidia-open-driver-G06-signed-kmp-default nvidia-drivers-minimal-G06 cudan

Esto elimina la necesidad de inscribir un MOK separado para el arranque seguro, así como una etapa de compilación separada cuando se instalan o actualizan los controladores del kernel. Ayuda a reducir el tamaño de las imágenes de la nube, ya que no se requieren herramientas de compilación adicionales. Instala paquetes de controladores de espacio de usuario que aún no están disponibles en el repositorio CUDA.

Preparación

Para conjuntos de chips con motor de visualización (es decir, que tienen salidas de visualización), el soporte de controlador abierto todavía se considera alfa. Por lo tanto, es posible que tengas que agregar o descomentar la siguiente opción en /etc/modprobe.d/50-nvidia-default.conf:

opciones nvidia NVreg_OpenRmEnableUnsupportedGpus=1n

Una vez que se hayan realizado estos pasos, puede reiniciar el sistema o ejecutar:

modprobe nvidian

como root para cargar todos los módulos del kernel necesarios.

Probando la instalación

Para verificar si HMM está disponible y habilitado, consulte la propiedad 'Modo de direccionamiento':

nvidia-smi-q | grep DireccionamientonModo de direccionamiento: HMMn

Si ve el resultado anterior, HMM está disponible en su sistema.

Compilar código de muestra HMM

NVIDIA analiza algunos ejemplos de código para HMM en su publicación de blog . Los ejemplos se pueden encontrar aquí en GitHub . Algunos necesitan un gcc más nuevo que la versión estándar enviada con SLE 15, que puede instalar con:

zypper -n en -y gcc12-c++n

Para compilar los ejemplos, la PATHvariable de entorno debe extenderse para que apunte a los binarios de CUDA:

exportar RUTA=/usr/local/cuda/bin/:${RUTA}n

Ahora puede compilar los ejemplos en la ruta srcusando los siguientes comandos:

nvcc -std=c++20 -ccbin=/usr/bin/g++-12 atomic_flag.cpp -o atomic_flagnnvcc -std=c++20 -ccbin=/usr/bin/g++-12 file_after.cpp -o file_afternnvcc -std=c++20 -ccbin=/usr/bin/g++-12 file_before.cpp -o file_beforennvcc -std=c++20 -ccbin=/usr/bin/g++-12 ticket_lock.cpp -o ticket_lockn

Ejemplo de 'weather_app'

Para esta aplicación de ejemplo, el gcccompilador del sistema es suficiente. Sólo se debe configurar $PATH en:

exportar RUTA=/usr/local/cuda/bin/:${RUTA}n

Ahora, construye el binario weather_appejecutando:

hacern

El blog de NVIDIA describe cómo obtener los datos necesarios para ejecutar la aplicación. Si no puede descargar ~1,3 TB de datos, también puede usar el generador de datos aleatorios de este PR en GitHub . La aplicación de datos aleatorios se puede compilar con:

g++ create_random_data.cpp -o create_random_data -O2 -Walln

La aplicación no tiene parámetros de línea de comando y el año de inicio y finalización de los datos aleatorios debe establecerse en el propio código fuente.


NOTA: Si su tarjeta gráfica no tiene suficiente VRAM para ejecutar el código de muestra original, puede reducir el tamaño de los datos reduciendo los parámetros input_grid_heightinput_grid_widthen create_random_data.cppweather_app.cu.


Para realizar una ejecución de muestra:

mkdir binario_1hr_alln./weather_appn./weather_app 1981 1982 binario_1hr_all/n

NOTA: No Makefilecompila kernels CUDA para las GPU NVIDIA Turing y también tiene un manejo de mensajes de error defectuoso. Es posible que desee consultar https://github.com/NVIDIA/HMM_sample_code/pull/2 , que soluciona estos problemas.


Resumen

  • El controlador abierto NVIDIA proporciona HMM ( Administración de memoria heterogénea ) que extiende aún más la simplicidad del modelo de programación de memoria unificada CUDA en los conjuntos de chips compatibles al incluir la memoria asignada por el sistema.
  • HMM está disponible para SLES y SLE HPC 15 SP5
  • El controlador abierto permite controladores de kernel prediseñados firmados por SUSE.
    • Esto simplifica enormemente la instalación en un entorno de arranque seguro.
    • Agiliza la instalación en entornos de nube pública al eliminar una etapa de construcción adicional y reducir el tamaño de la imagen final.
  • Hemos demostrado cómo instalar y probar HMM en SLES y SLE HPC 15 SP5.
Ir al Blog