2/6
2.1 Arquitectura de las GPU y el cómputo paralelo
Las unidades de procesamiento gráfico son dispositivos altamente sofisticados para la ejecución de cómputo paralelo, y han experimentado un crecimiento significativo en su uso gracias a su capacidad para acelerar tareas computacionales complejas [1]. De manera general, una GPU se compone de los siguientes elementos que están diseñados para llevar a cabo cálculos paralelos de manera altamente eficiente:
A) Multiprocesadores de secuencias (Streaming Mulprocessors o SM). representan los componentes fundamentales en la estructura de una GPU. Cada SM se compone de varias unidades de procesamiento conocidas como núcleos CUDA4 o núcleos de sombreado. La función primordial de los SM radica en la ejecución de instrucciones y el procesamiento de datos en un entorno paralelo.
B) Memoria global. Representa el principal depósito de memoria en una GPU, donde se almacenan los datos accesibles por todas las SM. Aunque la Memoria Global tiene una capacidad considerable, su característica distintiva radica en una latencia relativamente elevada en comparación con otros tipos de memoria.
C) Memoria compartida. Se presenta como un tipo de memoria más ágil y compacta localizada en cada SM. Su finalidad reside en facilitar una comunicación eficaz y en permitir el intercambio de datos entre los diversos subprocesos o hilos que operan en un mismo bloque.
D) Memoria de texturas y cachés. Está optimizada para ubicar puntos en dos dimensiones y soportar el manejo de caché con el fin de tener ciclos de texturizado más eficientes. Adicionalmente, las GPU emplean diversos niveles de caché, tales como el L1 y el L2 para reducir la latencia en el acceso a la memoria.
E) Interfaz de memoria. Facilita la comunicación entre la GPU y la memoria del sistema. Define el ancho de banda y la latencia en las transferencias de datos con la memoria.
Por otra parte, el manejo eficiente de la memoria por las GPU es un elemento crítico para obtener resultados más precisos en tiempo considerablemente menor, a la vez que mejora los patrones de acceso a los datos y las transferencias de información. Además de las categorías de memoria global y compartida, las GPU operan con otras categorías que los investigadores en IA deben considerar al usar este tipo de procesadores [2]:
A) Memoria constante. Es un espacio de memoria solo de lectura que almacena datos preservados de manera idéntica a lo largo de toda la ejecución de proceso. Con ello se puede tener acceso rápido y eficiente a valores constantes frecuentemente utilizados.
B) Memoria local. Es el espacio de memoria reservado por subproceso o hilo, que se ubica dentro de la Memoria Global. Se emplea para almacenar variables locales y grupos de llamadas a funciones.
C) Archivo de registros. Cada subproceso en un GPU tiene acceso a su propio archivo de registros, que se usan para almacenar variables y valores intermedios durante el cómputo. Es crucial optimizar el uso del registro para evitar fallas de anotación y mejorar el rendimiento.
2.2 Técnicas de aceleración por GPU para redes neuronales.
Cuando se trata de acelerar el procesamiento y mejora de comportamiento de redes neuronales que usan las GPU, se pueden emplear varias técnicas:
A) Procesamiento por lotes. Las GPU están especialmente diseñadas para procesar extensos conjuntos de datos de forma simultánea. Aumentar el tamaño de estos lotes conlleva el beneficio de mejorar el paralelismo y, por consiguiente, acelerar el tiempo de entrenamiento de manera general. No obstante, es esencial encontrar un equilibrio adecuado, ya que una elección de lote excesivamente grande podría ocasionar errores relacionados con los límites de memoria.
B) Gestión de la memoria de la GPU. Las redes neuronales con modelos y conjuntos de datos de gran envergadura a menudo superan la capacidad de memoria de las GPU. Para mitigar este desafío, se requieren estrategias como el modelado recortado o la cuantificación por volúmenes diferenciados, que pueden significativamente reducir la carga en la memoria. Además, la adopción de técnicas de entrenamiento de precisión mixta, como el uso de FP16, puede disminuir aún más los requisitos de memoria adicionales, manteniendo un alto rendimiento.
C) Cómputo en paralelo. Al utilizar técnicas de paralelización, tales como el paralelismo de datos y el paralelismo de modelos, se pueden distribuir las cargas de trabajo entre múltiples GPU o núcleos de GPU, reduciendo el tiempo de entrenamiento de la red neuronal que da solución al problema de Inteligencia artificial del que se trate. El paralelismo de datos implica replicar el modelo entre múltiples GPU y dividir los datos de entrada. El paralelismo de modelos involucra dividir en modelo entre varias GPU y con ello ejecutar los cálculos en paralelo.
D) Librerías y esquemas de programación para las GPU. Al utilizar librerías y esquemas de programación optimizados se pueden obtener incrementos de velocidad en el entrenamiento de la red neuronal. Librerías como cuDNN (CUDA Deep Neuronal Network) facilitan implementar operaciones de aceleración que son comunes entre diversos tipos de redes neuronales, tales como las convoluciones. Los marcos de referencia para el aprendizaje profundo como Tensorflow y Pytorch se desarrollaron en ese sentido para mejorar la operación de las GPU.
E) Acumulación de gradientes. En ocasiones, incluso después de aplicar técnicas de optimización, la memoria de la GPU podría seguir siendo insuficiente. Para abordar este desafío, se puede recurrir a la técnica de acumulación de gradientes. Aquí, los gradientes se calculan y acumulan tras la ejecución de pequeños lotes antes de llevar a cabo actualizaciones más significativas en los pesos del modelo. Esta estrategia posibilita el empleo posterior de lotes mucho más amplios y eficaces sin aumentar la demanda de memoria.
F) Núcleos de tensores. Las modernas GPU incluyen la capacidad para trabajar con hardware especializado denominado “núcleo de tensor” que pueden acelerar las operaciones de matrices con precisión mixta. Estos núcleos de tensores tienen una mayor capacidad de salida de datos, combinada con una menor precisión matemática, lo cual deriva en entrenamientos e inferencias de los modelos más rápidos, sin sacrificar demasiado a la precisión.
G) Entrenamiento distribuido. Cuando se trabaja con modelos o conjuntos de datos demasiado grandes, se puede utilizar el entrenamiento distribuido para usar múltiples GPU ubicados en varios nodos de cómputo. Tecnologías como Horovod, la Estrategia Distribuida de TensorFlow o la Capacidad de Paralelismo de Datos de Pytorch permiten el entrenamiento distribuido de forma eficiente, a la vez que se reduce el tiempo total de entrenamiento del modelo de red neuronal que sustente el proyecto de inteligencia artificial.
La eficacia de las técnicas mencionadas, previamente detalladas a los participantes de los proyectos aprobados en el marco de la Alianza UNAM – Huawei, está influida por diversos factores. Estos incluyen la arquitectura del modelo de red neuronal, el tamaño del conjunto de datos utilizado para nutrir el modelo y la configuración específica de los servidores dentro del Laboratorio del Espacio de Innovación. En las dos convocatorias publicadas hasta 2023, la mayoría de los líderes de proyecto optaron por configurar sus entornos de operación como contenedores (Docker). Esta elección les proporciona un mayor control sobre múltiples variables de la plataforma durante el entrenamiento de sus modelos de inteligencia artificial, sin depender exclusivamente de las configuraciones genéricas de los nodos de cómputo en el Laboratorio del Espacio de Innovación.
En consecuencia, se encontró que la problemática a solucionar es una falta de organización adecuada de los recursos disponibles para el entorno virtual institucional y la necesidad de estrategias que permitan el crecimiento y consolidación de los servicios de tecnología educativa.
2.3 Ventajas de usar GPU en la investigación de IA
El uso de las unidades de procesamiento gráfico en la investigación en inteligencia artificial tiene diversas ventajas [3]. Entre las más importantes están:
A) Capacidad de procesamiento en paralelo. Las GPU pueden acelerar significativamente el entrenamiento y la inferencia, comparados con las CPU tradicionales.
B) Tiempos de entrenamiento más rápidos. Los modelos de aprendizaje profundo requieren, en ocasiones, un entrenamiento extenso con grandes volúmenes de datos. Las GPU permiten un entrenamiento más rápido. Este incremento en la velocidad permite a los investigadores iterar de forma más rápida sus modelos y experimentar con diferentes estructuras.
C) Complejidad extendida de los modelos. Los investigadores pueden entrenar modelos con millones o miles de millones de parámetros, permitiéndoles resolver los retos que imponen las tareas de inteligencia artificial, con un rendimiento superior al promedio que se alcanza con las tradicionales CPU.
D) Técnicas para la optimización de los modelos. Técnicas como las redes neuronales convolucionales (CNN) y las redes neuronales recurrentes (RNN) han demostrado un notable éxito en la manipulación de datos de imágenes y secuencias de datos, respectivamente. Gracias a la eficacia de las GPU, estas estrategias de optimización han propiciado una auténtica revolución en la investigación de la inteligencia artificial, influyendo de manera significativa en campos como la visión por computadora, el procesamiento del lenguaje natural y el reconocimiento de voz.
E) Procesamiento de datos a gran escala. La investigación en inteligencia artificial a menudo implica el procesamiento de ingentes cantidades de datos, que pueden variar desde terabytes (TB) hasta petabytes (PB) en magnitud. Las GPU son capaces de afrontar con éxito las demandas computacionales asociadas con la tarea de procesar y analizar tales volúmenes de información. Esta capacidad se torna especialmente valiosa en aplicaciones que involucran redes neuronales de aprendizaje profundo, como el análisis de grandes conjuntos de imágenes o volúmenes extensos de texto.
F) Disponibilidad y eficiencia en costos. Las GPU se encuentran ampliamente disponibles y son de fácil acceso para investigadores, presentando costos significativamente más bajos en comparación con hardware especializado, como las TPU (Unidades de Procesamiento de Tensores), en muchas de las tareas de investigación en inteligencia artificial. Además, debido al aumento en la demanda de GPU en diversas áreas, como los videojuegos y la minería de criptomonedas, la disponibilidad y los precios de las GPU se han vuelto más asequibles, convirtiéndolas en una elección cada vez más popular entre los investigadores en inteligencia artificial.
4 CUDA: Compute Unified Device Architecture. Es un tipo de plataforma de cómputo, propietaria de la empresa Nvidia, con la cual se pueden programar las GPU usando una variación del lenguaje C, llamado CUDA C.
Fecha de recepción: julio de 2023
Fecha de publicación: noviembre de 2023
AI Website Builder