¿Cuál es el uso de modelos grandes, desde un punto de vista técnico?

1. ¿ Para qué sirve el modelo grande?

Hasta ahora, el modelo grande se basa principalmente en NLP, porque NLP descarta el problema de la dependencia de la secuencia RNN y adopta la estructura de Transformador de Attention is All you need, para que NLP pueda desarrollar modelos más grandes. El campo de la imagen no se queda atrás, y los grandes modelos de CNN también han comenzado a surgir uno tras otro.

  1. El modelo está fragmentado y el modelo grande proporciona una solución previa al entrenamiento. En la actualidad, la IA se enfrenta a muchas industrias y escenarios comerciales, y la demanda de inteligencia artificial muestra características de fragmentación y diversificación. Desde el desarrollo, el ajuste de parámetros, la optimización, la iteración hasta la aplicación, los costos de desarrollo del modelo de IA son extremadamente altos y es difícil satisfacer las necesidades de personalización del mercado, por lo que algunas personas en Internet dirán que la etapa actual del desarrollo del modelo de IA está en un manual estilo taller. Básicamente, si una empresa quiere utilizar la IA para potenciar su propio negocio, debe contratar más o menos personal de I+D que comprenda la IA. Para resolver el enfoque de taller manual del modelo de fábrica, el modelo grande proporciona una solución factible, que es el método de "pre-entrenamiento del modelo grande + ajuste fino de la tarea posterior". El preentrenamiento a gran escala puede capturar de manera efectiva el conocimiento de una gran cantidad de datos etiquetados y no etiquetados, y expandir en gran medida la capacidad de generalización del modelo al almacenar el conocimiento en una gran cantidad de parámetros y ajustarlo para tareas específicas. Por ejemplo, en el campo de la PNL, el modelo grande de preentrenamiento comparte los parámetros de la tarea de preentrenamiento y algunas tareas posteriores, lo que resuelve el problema general hasta cierto punto y se puede aplicar a tareas de lenguaje natural como traducción, respuesta a preguntas y generación de texto. PD: estilo de taller manual ==> modo de fábrica, un modelo grande reemplaza a docenas de pequeños modelos especializados.

  2. El modelo grande tiene la función de aprendizaje autosupervisado, lo que reduce el costo de capacitación e investigación y desarrollo. El método de aprendizaje autosupervisado de modelos grandes puede reducir el etiquetado de datos y resolver los problemas de alto costo, ciclo largo y baja precisión del etiquetado manual hasta cierto punto.

  3. Se espera que los modelos grandes superen aún más las limitaciones de precisión de las estructuras de modelos existentes. A juzgar por la historia de los primeros 10 años de desarrollo del aprendizaje profundo, la mejora de la precisión del modelo depende principalmente de los cambios estructurales de la red. Por ejemplo, de AlexNet a ResNet50, y luego a EfficientNet buscado por NAS, la precisión de ImageNet Top-1 aumentó de 58 a 84. Sin embargo, a medida que la tecnología de diseño de la estructura de la red neuronal madura gradualmente y tiende a converger, es muy difícil romper la limitación de precisión mediante la optimización de la estructura de la red neuronal. En los últimos años, con el aumento continuo de la escala de datos y la escala del modelo, la precisión del modelo se ha mejorado aún más. Los experimentos de investigación han demostrado que el aumento de la escala del modelo y los datos puede superar una limitación de la precisión existente.

2. ¿Qué es un modelo grande?

Práctica de optimización de capacitación distribuida de TensorFlow en el sistema de recomendación Con el desarrollo del negocio de Meituan, el tamaño y la complejidad del modelo del sistema de recomendación también están creciendo rápidamente, de la siguiente manera:

  1. Datos de capacitación: las muestras de capacitación han aumentado de 10 mil millones a 100 mil millones, un aumento de casi 10 veces.

  2. Parámetros dispersos: el número también ha aumentado casi 10 veces, de cientos a miles; el número total de parámetros (es decir, tf.Variable) ha aumentado de cientos de millones a decenas de miles de millones, un aumento de 10 a 20 veces.

  3. Complejidad del modelo: a medida que se vuelve más y más complejo, el tiempo de cálculo de un solo paso del modelo aumenta más de 10 veces. Para los servicios de gran tráfico, un experimento de entrenamiento ha pasado de unas pocas horas a unos pocos días, y es un requisito básico mantener un experimento dentro de un día en este escenario.

El statu quo y los grandes modelos futuros de formación distribuida de aprendizaje profundo se dividen principalmente en dos categorías:

  1. Las tareas de búsqueda, recomendación y publicidad, que se caracterizan por muestras masivas y parámetros dispersos a gran escala (incrustaciones dispersas), son adecuadas para usar el modo de servidor de parámetros (PS) de CPU/GPU; el modo de servidor de parámetros fue propuesto por la primera generación de Alex Smola en 2010 LDA (modelo oculto de asignación de Dirichlet en el campo de la minería de textos), a DistBelief propuesto por la segunda generación de Jeff Dean, luego a la arquitectura de servidor de parámetros moderna relativamente madura propuesta por la tercera generación de Li Mu, y luego al posterior florecimiento: Horvod de Uber, Ali's XDL, PAI, Meta's DLRM, Byte's BytePs, las diversas adaptaciones de Meituan basadas en Tensorlow, etc. Las funciones del servidor de parámetros son cada vez más perfectas y el rendimiento es cada vez más fuerte. Hay CPU pura, GPU pura y modos heterogéneos.

  2. Las tareas de CV y ​​NLP se caracterizan por datos de muestra regulares y parámetros densos a gran escala, que son adecuados para el modo de comunicación colectivo GPU puro (Colectivo). El marco de entrenamiento distribuido basado en el modo de comunicación colectivo GPU puro, junto con las iteraciones técnicas de Nvidia, especialmente el avance de la tecnología de comunicación GPU (GPU Direct RDMA), se ha vuelto cada vez más poderoso.

Modelo distribuido a gran escala en la recomendación publicitaria ¿Por qué siempre oímos hablar de funciones a gran escala para funciones de una o doscientas categorías? Por ejemplo, la característica dimensional de ID de usuario, si hay 100 millones de usuarios en el sistema, entonces cada ID puede tratarse como una característica independiente. De esta manera, la escala de funciones aumentará. Aquí tenemos que volver a comprender el concepto de incrustación. Para el modelo, la identificación verifica la tabla de incrustación para obtener un vector, que es la entrada para el cálculo, que consiste en extraer características de los datos. Si la analogía es con la clasificación de imágenes, extraiga las características rgb para clasificar (un valor se convierte en 3 255)

¡El número de parámetros ha alcanzado los cien billones! Persia, el sistema de entrenamiento de recomendaciones más grande en la historia de código abierto del equipo chino En términos generales, el modelo del sistema de recomendaciones primero necesita asignar diferentes características de identificación (como la identificación de usuario y la identificación de sesión) a un vector de baja dimensión de longitud fija, y la identificación de usuario en el sistema, cruz La cantidad de características es muy grande y se requiere un modelo a mayor escala para capturar características y mapear. Pero una capa de incrustación más grande también requiere una memoria más grande para cargar, ¡debo decir que el modelo grande es demasiado caro!

Con la incrustación, el resto del trabajo es sencillo, diseñe capas posteriores para adaptarse a diferentes tareas. Por lo general, solo ocupa el 0,1% de todo el modelo, no requiere una gran cantidad de memoria y es principalmente un trabajo intensivo de cómputo.

en realización

  1. El servicio de inferencia también accede a ps (inferencia distribuida) en tiempo de ejecución y consulta el vector de incrustación correspondiente de acuerdo con la característica de ID. Por supuesto, algunos marcos incorporan directamente las funciones del componente ps en cada trabajador.

  2. Para escenarios en los que el modelo grande contiene una capa de incrustación, la capa de entrada y la capa de incrustación no están completamente conectadas, sino una opción embedding_lookup

  3. Para modelos densos convencionales, la entrada es un vector unidimensional. Para múltiples características de identificación, para garantizar la alineación con la capa de entrada del modelo, la entrada en realidad se convierte en un mapa <cadena, tensor>, la clave es el nombre de la característica de identificación y el valor es el tensor correspondiente al valor de la función de identificación.

Tres, ¿dónde está la dificultad?

  1. pared de la memoria Durante el proceso de cálculo, el cálculo de convolución o conexión completa de cada capa del modelo de red neuronal guardará el peso W_m durante mucho tiempo y lo utilizará como actualización de parámetros de peso de la red (memoria estática). Además, para optimizadores como ADAM, la información como el impulso del optimizador se almacenará para el cálculo del optimizador (memoria dinámica). Un chip de IA con memoria de video de 16G puede llenar un modelo con un máximo de 2 mil millones de parámetros, pero no hay espacio adicional en este momento, dejándolo para la asignación de memoria dinámica. Tanto la memoria estática como la memoria dinámica pueden causar problemas con las paredes de la memoria.

  2. muro de comunicacion Después de que el modelo grande se segmente en el clúster de IA a través del paralelismo de modelos y el paralelismo de canalización, la comunicación se convierte en el principal cuello de botella del rendimiento. Con la expansión de la escala de la máquina, el método de agregación de comunicación All Reduce basado en la sincronización causará un efecto de cubeta debido a la sincronización frecuente entre una gran cantidad de chips y servidores de IA, es decir, la ruta de comunicación más lenta, que determinará la comunicación del todo el clúster de IA de la altura de. Si se utiliza el método de agregación de comunicación Ring-AllReduce actualmente popular, cuando el anillo de comunicación se hace más grande, la extensión de la comunicación se expandirá continuamente. Además, los múltiples métodos de protocolo de enlace de red, tales sobrecargas harán que el entrenamiento no pueda usar el ancho de banda de manera efectiva.

  3. muro de rendimiento El muro de rendimiento se refiere principalmente al problema de la utilización de los recursos informáticos. Con la introducción de modelos grandes, la demanda de poder de cómputo es más urgente. En teoría, cada tarjeta es 1 minuto más rápida en un clúster 4K y la velocidad general es 68 horas más rápida. Un modelo grande aumentará la demanda de potencia informática, pero como el modelo grande introduce varias tecnologías paralelas distribuidas, reducirá la utilización de los recursos informáticos.

    1. Nivel de operador (Nivel de operador): hay demasiados operadores pequeños, que se pueden optimizar a través de la fusión de operadores; la subimplementación no es lo suficientemente eficiente, similar a los operadores CONV convolucionales para tamaños de kernel 2x2 y 3x3, utilizando en su lugar el algoritmo de Winograd; poca memoria localidad, mediante el análisis de la sobrecarga de los operadores y la memoria, los operadores con la misma forma se pueden reutilizar durante el cálculo.

    2. Nivel gráfico: cómo buscar y segmentar subgráficos con mayor eficiencia informática y distribuirlos a diferentes máquinas para la informática; cómo aumentar la superposición entre la comunicación de datos y la memoria, y mejorar la velocidad informática general de una sola tarjeta.

    3. Nivel de tarea: a nivel de tarea, el cuello de botella de rendimiento se ha desplazado de la informática a la comunicación. Cómo reducir el tráfico de comunicación, reducir el tamaño del dominio de comunicación y ocultar el retraso de la comunicación en la informática tanto como sea posible son las principales preocupaciones de gran escala. capacitación.

  4. Afinando la pared. Por lo tanto, en un clúster con miles de nodos, es necesario considerar mejorar la eficiencia de la depuración distribuida y el ajuste de los ingenieros de algoritmos, y también considerar reducir la dificultad de la segmentación paralela de modelos grandes por parte de los ingenieros. Además de las consideraciones humanas, la gestión de los clústeres de hardware debe garantizar la corrección, el rendimiento y la disponibilidad de los cálculos. Si una máquina está rota, cómo restaurar rápidamente los parámetros en el entrenamiento.

4. Escenarios CV y ​​PNL

Discusión sobre el entrenamiento distribuido en la industria (1) Además del gran volumen de datos mencionado anteriormente, los puntos débiles del entrenamiento distribuido en diferentes escenarios son más importantes para los escenarios CV y ​​NLP

  1. Los modelos de escena CV y ​​NLP son complejos y los requisitos de rendimiento de una sola máquina son altos. Por ejemplo, el tiempo de cálculo de la convolución es de diez a docenas de veces diferente en la CPU y la GPU. ==> La industria utiliza principalmente GPU de alto rendimiento para los cálculos y adopta la topología de comunicación All-reduce para la actualización síncrona de parámetros.

  2. El modelo es grande (parte DenseNet), como el campo NLP, un modelo como GPT-3 tiene hasta 175 mil millones de parámetros, y la memoria de video ocupa hasta 2.8 TB, que no se puede acomodar en la memoria de una sola máquina . Aunque Bert-Large solo tiene una escala de parámetros de 340 millones, debido a varios usos de memoria, en el 16G V100, solo se puede usar el tamaño de lote = 8 para el entrenamiento. ==> Cuando nos enfrentamos a un modelo DenseNet grande como GPT-3, la memoria de una sola tarjeta de Allreduce no puede acomodarlo. Necesitamos usar el paralelismo del modelo para dividir el gráfico de cálculo en diferentes dispositivos para construir un gráfico acíclico dirigido. (DAG) para entrenamiento distribuido, entre los cuales Gpipe, Megatron, Oneflow y Whale proponen soluciones relacionadas para el paralelismo de modelos. En comparación con el paralelismo de datos, cada trabajador solo tiene una parte de los datos y cada nodo usa todos los datos bajo el paralelismo del modelo.

    1. Paralelismo intra-capa (Paralelismo Tensor). Es principalmente para dividir el cálculo de la matriz en una capa de Capa a diferentes máquinas para el cálculo. Por ejemplo, en la simple multiplicación de matriz Y_1 = W_1 X_1, dividimos el parámetro del modelo W_1 o los datos de entrada X_1 de acuerdo con una determinada dimensión. Distribuido a diferentes dispositivos para el cálculo, como 1D Megatron.

    2. Paralelismo entre capas (Pipeline Parallelism). Sin embargo, el paralelismo entre capas dividirá las capas del modelo en diferentes máquinas, y es necesario realizar un reenvío en serie en diferentes máquinas, mientras que el popular método paralelo divide el tamaño del lote en microlotes más pequeños. todo el proceso informático y maximizar la utilización de los recursos. Por ejemplo, en un MLP simple de tres capas (Y_i = W_i X_i, i=1,2,3) habrá tres multiplicaciones de matriz W_i X_i, y el paralelismo de la tubería distribuirá W_i X_i a tres máquinas para la operación.

El surgimiento de AI for Science ha hecho que la integración de la computación de alto rendimiento y la IA sea una demanda rígida:

  1. Paralelismo de datos. Si hay dos nodos en todo el modelo, un modelo es el nodo 0 y el otro modelo es el nodo 1, se han paralelizado los datos de todo el modelo y la mitad de los datos se usarán para capacitación y aprendizaje, pero debe tenerse en cuenta que no es el resultado final después del entrenamiento, porque solo se ingresó la mitad de los datos. Por lo tanto, se requiere AII-Reduce en el medio

  2. Paralelismo de modelos. Corte todo el modelo por la mitad, la mitad del nodo 0 del modelo, la mitad del nodo 1 del modelo y todos los datos se utilizan para el entrenamiento. El resultado después del entrenamiento no es el resultado final, porque solo se entrena la mitad del modelo y AII-Gather también se usa para la comunicación. ¿Qué método paralelo utilizar? De hecho, esto está relacionado con la estructura de la computadora. Si la comunicación entre cada computadora es muy rápida, entonces puede usar el paralelismo de datos; si su comunicación es lenta, debe considerar el paralelismo del modelo. Entonces, ¿cómo estos modelos coinciden con los datos y la situación real de la máquina? Esto involucra el hardware y el software.

5. Guarda el modelo

La práctica de extender y soportar modelos grandes basados ​​en tensorflow

  1. Cuando el modelo es relativamente pequeño, como por debajo de 100G, el modelo puede almacenarse en una sola máquina. La solución en este momento es el entrenamiento distribuido de tensorflow + modelo guardado, el entrenamiento distribuido puede usar múltiples ps (el tensorflow viene con él) y la administración de recursos puede usar hilo. El uso de distribución se debe a la gran cantidad de muestras, y múltiples ps también pueden acelerar el entrenamiento de forma asíncrona. El modelo guardado generalmente lo guarda el trabajador principal, pero después de guardarlo, los rastros de ps se borrarán y el modelo guardado es exactamente el mismo que el entrenado en una sola máquina.

  2. Cuando el modelo es relativamente grande, la cantidad de muestras requeridas en este momento también es mayor, y el modelo que se descarga después del entrenamiento será demasiado grande para caber en una sola máquina, especialmente en la mesa de inclusión. ¿Qué debemos hacer en este momento? Una forma natural de pensar es sincronizar una copia del ps durante el entrenamiento con el ps de servicio, y el ps hará el servicio en línea. Tenga en cuenta que los servidores ps que se mencionan más adelante están desarrollados por nosotros mismos o modificados de acuerdo con un software de código abierto (como ps-lite). Si es un modelo a nivel del cielo, puede usar el trabajador nativo de tensorflow y entrenar ps, pero aún así usar el método de modelo guardado para almacenar el modelo en hdfs y luego leer otro ps de servicio de hdfs. Si se trata de un entrenamiento en tiempo real, el PS de servicio debe estar conectado al PS de entrenamiento en tiempo real, y el proceso de sincronización de peso se resuelve en la memoria. En este momento, el PS nativo de tensorflow no se puede usar, porque el nativo PS no implementa la interfaz de sincronización. El ps ha cambiado y los trabajadores tienen que cambiar en consecuencia. La mayoría de los trabajadores se desarrollan en función de la interfaz subyacente de C++ de tensorflow, y la capa subyacente utiliza la interfaz de sesión de tf.

6. Soluciones

En respuesta a los problemas anteriores, los marcos de entrenamiento de varios fabricantes importantes han llevado a cabo muchas optimizaciones relacionadas.En la actualidad, los dos puntos centrales son el diseño de la topología de comunicación distribuida y la optimización del rendimiento de Embedding Lookup.

Siempre que se pueda colocar una sola tarjeta, funcionará el paralelismo de datos, ps o allreduce, y el costo de comunicación de allreduce será menor. Si la escala se hace más grande

  1. Modelo disperso, tratamiento especial para parámetros dispersos

    1. Use ps, además de alguna optimización de tensor dispersa, y transfiera la carga de incorporar el almacenamiento y la actualización a ps

    2. Parámetro denso allreduce, encuentre una manera de resolver los costos de almacenamiento y comunicación del tensor disperso. Por ejemplo, en la arquitectura HybridBackend, los parámetros se colocan en el trabajador: la replicación de parámetros densa se almacena, cada trabajador tiene una copia y allreduce se realiza cuando se actualiza el gradiente; la partición de parámetros dispersos se almacena, cada trabajador tiene solo algunos fragmentos, y alltoall se realiza cuando se actualiza el gradiente. Tanto allreduce como alltoall usan nccl para la comunicación síncrona, que es más eficiente. Cuando hb realiza alltoall, comunica gradientes escasos en lugar de parámetros completos. El volumen de comunicación es consistente con ps, pero la eficiencia de comunicación será mayor.

  1. Para un modelo denso, una sola tarjeta no se puede dejar de todos modos, por lo que solo podemos adoptar el paralelismo del modelo y algunos esquemas de optimización auxiliares.

Conociendo la respuesta de Gao Zan: ¿por qué es difícil entrenar modelos grandes?

  1. División del operador Una multiplicación de una sola matriz se puede dividir en dos dispositivos para calcular Y = WX = [W1,W2]X = [W1X,W2X]. Lo que tenemos que hacer en el proyecto es: dividirlo en dos dispositivos, copiarlo en dos dispositivos y luego realizar la multiplicación de matrices en los dos dispositivos respectivamente. A veces, la segmentación traerá comunicación adicional. Por ejemplo, la multiplicación de matrices se corta a la dimensión de reducción. Para mantener la semántica correcta, debe ser seguida por una comunicación AllReduce. La complicación aquí es que no puede dividir a todos los operadores sin pensar, porque la división puede introducir alguna comunicación adicional y reducir el rendimiento general. Entonces, debe hacer un análisis para decidir qué operadores dividir. La mayoría de los marcos no admiten esta estrategia totalmente automatizada. Son semiautomáticos o puramente manuales, o están codificados para un modelo determinado. Entonces solo podemos hacer ruedas para resolver este problema.

  2. El paralelismo de canalización no corta a los operadores, sino que divide diferentes capas en diferentes dispositivos para formar una solución de canalización. GPipe es una solución de este tipo. Propone dividir un lote en varios microlotes y luego empujar. El tiempo de burbuja se puede eliminar ingresando en el Sistema de tuberías. Similar a la división del operador, la carga de trabajo de la solución completamente automatizada no es pequeña. Por ejemplo, cómo cortar la tubería para que el volumen de comunicación se pueda reducir y el cálculo se pueda equilibrar. Esto requiere una cierta cantidad de algoritmo y esfuerzo de ingeniería. .

Obtén entrenamiento de modelos grandes

Nuestros modelos pueden ser grandes o la cantidad de datos puede ser grande. Es posible que el uso de una sola tarjeta GPU ni siquiera se ajuste al modelo, o que el tamaño del lote solo se pueda establecer en un tamaño muy pequeño, pero sabemos que, en algunos casos, un tamaño de lote grande suele proporcionar mejores resultados.

  1. Supongamos que solo tenemos una GPU y nuestro modelo solo puede ingresar datos con un tamaño de lote de 8 a la vez, entonces, ¿cómo implementamos una actualización con un tamaño de lote de 32? Luego se necesita tiempo para cambiar de espacio, es decir, entrenamos 32/8=4 pasos para actualizar el modelo, que es la llamada acumulación de gradiente.

  2. Gradient-Checkpointing, ¿qué pasa si su GPU ni siquiera puede ejecutarse con un tamaño de lote de 1? Cuando entrenamos el modelo de aprendizaje profundo, primero debemos hacer la propagación hacia adelante, luego almacenar el valor de activación obtenido en el medio en la memoria y luego calcular el gradiente de acuerdo con la pérdida y el valor de activación durante la propagación hacia atrás. Es decir, el consumo de memoria en realidad está linealmente relacionado con el número de capas del modelo. Entonces, ¿cómo reducir este consumo de memoria? La idea más simple es que no guardo esta información intermedia. Al calcular el gradiente, recalculo su valor de activación en una capa determinada. Aunque este método puede hacer que el consumo de memoria sea constante, el tiempo de ejecución será O (n ^ 2) , lo cual es inaceptable. Luego hay un método de compromiso. No guardo todos los datos intermedios, sino solo una parte. Entonces no necesitamos calcular desde cero al calcular el gradiente. Solo necesitamos calcular desde el punto de control más cercano.

  3. Nuestros modelos de entrenamiento generalmente usan parámetros de precisión simple (FP32), pero de hecho también usamos precisión media (FP16). La precisión media puede reducir el consumo de memoria y, por lo tanto, entrenar modelos más grandes o usar tamaños de lote más grandes; al mismo tiempo, el tiempo de operación está limitado por la memoria y el ancho de banda aritmético, y la precisión media puede proporcionar un mayor ancho de banda aritmético en algunas GPU (núcleos Tensor) , mejorando así la eficiencia del entrenamiento y reduciendo el tiempo de inferencia.

Supongo que te gusta

Origin blog.csdn.net/bruce__ray/article/details/131024118
Recomendado
Clasificación