Guía de introducción al aprendizaje profundo en 2023 (17) - Tecnología de aceleración de hardware para el aprendizaje profundo

Guía de introducción al aprendizaje profundo en 2023 (17) - Tecnología de aceleración de hardware para el aprendizaje profundo

Con el conocimiento previo, todos deben tener una comprensión más profunda de los requisitos de potencia informática.

Además de usar dispositivos de propósito general como CPU y GPU, usar hardware dedicado para la aceleración es una opción que todos pueden pensar.

El dispositivo representativo es la TPU que acabamos de usar en la sección anterior. La siguiente figura es el aspecto de la TPU y su estructura:

Entonces, ¿por qué la TPU está diseñada para tomar la multiplicación de matrices como núcleo? Comencemos con los principios del aprendizaje profundo.

Métodos Computacionales para Redes Neuronales y Atención

La unidad computacional básica de una red neuronal artificial es una neurona. La estructura de cada neurona se muestra en la siguiente figura:

Expresado por la fórmula es:

yj = Φ ( ∑ k = 0 norte − 1 xkwkj + segundo ) y_j=\Phi\left(\sum_{k=0}^{n-1} x_k w_{kj}+b\right)yj=Fi( k = 0n 1Xkwkj+segundo )

Entre ellos, xk x_kXkes la entrada, wkj w_{kj}wkjes el peso, bbb es el sesgo,Φ \PhiΦ es la función de activación,yj y_jyjes la salida.
Podemos ver que el cálculo de cada neurona es una multiplicación de matriz más un sesgo, y luego una función de activación.

Repasemos el diagrama de estructura del modelo de autoatención de múltiples cabezas antes:

Podemos ver que los cálculos principales siguen siendo la multiplicación y suma de matrices.

Consulta: Q i = X ∗ W i Q Consulta: Q_i = X * W_i^{Q}consulta _ _:qyo=XWiq

Clave: K i = X ∗ W i K Clave: K_i = X * W_i^{K}Llave:kyo=XWik

V alor : V i = X ∗ W i V Valor: V_i = X * W_i^{V}Valor _ _ _:Vyo=XWiV

Peso de atención: A i = softmax ( Q i ∗ K i T / sqrt ( dk ) ) Peso de atención: A_i = softmax(Q_i * K_i^T / sqrt(d_k))peso de atención:Ayo=entonces f t max ( Q _yokiT/ sqrt ( d _ _ _k))

Exportar: O i = A i ∗ V i Exportar: O_i = A_i * V_iproducción:Oyo=AyoVyo

Con la base anterior, echemos un vistazo al diagrama de estructura de TPU:

Se puede observar que la unidad de multiplicación de matrices en la esquina superior derecha ocupa una cuarta parte del espacio, y el caché local en la parte superior izquierda constituye la parte más importante de la TPU.

El MAC en la figura anterior es la abreviatura de Multiplicar y acumular, lo que significa operación de multiplicación más acumulación. Es decir, sobre la TPU original se pueden realizar 64K operaciones de multiplicación y suma por ciclo de instrucción.

método de aproximación de hardware

La multiplicación de matrices es una operación que requiere mucho tiempo y, en el aprendizaje profundo, no necesitamos resultados muy precisos. Por lo tanto, podemos usar algunos métodos aproximados para acelerar la operación de multiplicación de matrices.

Similar a los métodos de cuantificación y poda que aprendimos antes, también podemos usar métodos de cuantificación y simplificación computacional en el método de hardware. Además, en el diseño de hardware también podemos utilizar unidades de cálculo aproximadas en lugar de dispositivos de cálculo precisos.

Hay tres formas principales de aproximar la unidad de cálculo, la primera es usar un multiplicador de suma aproximado, la segunda es convertir la multiplicación en suma usando logaritmos y la última es simplemente quitar el multiplicador.

Ya hemos presentado la cuantización en detalle antes, así que no lo repetiré aquí. Presentamos principalmente los dos últimos métodos, es decir, la simplificación computacional y la unidad computacional aproximada.

Simplificación computacional - omitir

La primera forma de calcular la simplificación es saltear el conteo.

En el modelo grande, debido a la gran cantidad de datos, en realidad hay muchos datos que son 0 o muy cercanos a 0. Estos datos tienen muy poca influencia en el resultado final, por lo que podemos saltarnos el cálculo de estos datos directamente.

Podemos diseñar una unidad de cálculo que salte datos cercanos a 0 de la siguiente manera:

Simplificación Computacional - Memoria

El segundo método de simplificación de cálculo es la memoria, lo que significa que podemos guardar los resultados de los cálculos anteriores y usarlos directamente la próxima vez. ¿No es esta la idea de la programación dinámica? La eficiencia de este enfoque depende de la similitud de las entradas (es decir, con qué frecuencia ocurren las sustituciones) y la complejidad de los cálculos que se eliminan.

Cuanto mayor sea la similitud de las entradas, mayor será la complejidad computacional que se elimina, más eficiente es este enfoque.

Por ejemplo, el documento "(Pen-) Ultimate DNN Pruning" propone un método de poda de dos pasos, que primero elimina los nodos redundantes realizando un análisis PCA en la salida de cada capa, y luego elimina los nodos redundantes considerando su relación. Las contribuciones de otras conexiones se utilizan para eliminar las conexiones sin importancia restantes.

Unidad de Cómputo Aproximada - Sumador de Multiplicación Aproximado

En la realización de circuitos aproximados, un método más efectivo es el método de Programación Genética Cartesiana (GCP). La implementación más básica se ve así:

La programación genética cartesiana (CGP) es una forma de programación genética que utiliza notación gráfica para codificar programas informáticos. Se originó a partir de un método de evolución de circuitos digitales desarrollado por Julian F. Miller y Peter Thomson en 1997. Se llama "cartesiano" porque utiliza los nodos de una cuadrícula bidimensional para representar un programa.

La programación genética es una técnica de búsqueda heurística utilizada para optimizar o descubrir programas informáticos que pueden realizar tareas definidas por el usuario. Los sistemas básicos de programación genética utilizan un algoritmo genético, un algoritmo de búsqueda que opera según los principios de la evolución biológica, incluida la herencia, la variación, la selección natural y la recombinación.

En la programación genética cartesiana, un programa se representa mediante un gráfico que consta de nodos, cada nodo representa una función u operación. Estos nodos están dispuestos en una cuadrícula bidimensional para formar un flujo computacional, que es el camino a través del cual fluye la computación desde los nodos de entrada hasta los nodos de salida. De esta manera, CGP puede desarrollar programas complejos capaces de realizar tareas específicas.

La programación genética cartesiana genera multiplicadores que satisfacen las restricciones de error dadas en el peor de los casos y aseguran que las multiplicaciones de 0 sean siempre correctas. Emplea un proceso de optimización iterativo para determinar las restricciones de error generadas por el multiplicador aproximado en la optimización CGP para alcanzar un umbral de pérdida de precisión de inferencia. Y, en un proceso iterativo, después de reemplazar los multiplicadores exactos por multiplicadores aproximados, la red se vuelve a entrenar para obtener resultados de la mejor calidad.

Comenzando con el artículo básico "Diseño de multiplicadores aproximados eficientes en el consumo de energía para redes neuronales artificiales aproximadas" utilizando GCP, hay una serie de mejoras posteriores, como el uso de la distancia de error media ponderada (WMED) para la medición del error. Al calcular WMED, la importancia de cada error está determinada por la función de masa de probabilidad de la distribución del peso de la red.

El artículo "Redes neuronales con pocas multiplicaciones" propone un enfoque de dos pasos: primero, los autores convierten las operaciones de multiplicación necesarias para calcular el estado oculto en cambios de signo mediante la binarización estocástica de los pesos. En segundo lugar, en el proceso de retropropagación de las derivadas del error, además de binarizar los pesos, los autores también cuantifican la representación de cada capa, convirtiendo las operaciones de multiplicación restantes en desplazamientos binarios.
Además, después de usar Ternary Connect, Quantized Backprop y Batch Normalization, la tasa de error se puede reducir al 1,15 %, que es un 1,33 % más alta que la tasa de error del entrenamiento de precisión total. Esto muestra que incluso con la eliminación de la mayoría de las multiplicaciones, el rendimiento de este método sigue siendo comparable al entrenamiento de precisión total, o incluso mejoró ligeramente. La mejora del rendimiento puede deberse al efecto de regularización provocado por el muestreo aleatorio.

El método propuesto en el documento "ALWANN: Aproximación automática por capas de aceleradores de redes neuronales profundas sin reentrenamiento" consta de dos partes: la primera parte es convertir un DNN completamente entrenado para usar pesos de 8 bits y multiplicación de 8 bits en el operación de capa convolucional de multiplicadores; la segunda parte es seleccionar un multiplicador aproximado adecuado para cada unidad computacional de una biblioteca de multiplicadores aproximados, de modo que (i) un multiplicador aproximado pueda servir a múltiples capas, (ii) la clasificación general Errores y consumo de energía se minimizan.

La siguiente figura es el diagrama de arquitectura del chip Cambrian DaDianNao que calcula la multiplicación aproximada.

El documento "Automatización del diseño de circuitos aproximados con precisión reconfigurable en tiempo de ejecución" propone un marco de diseño automático que puede generar circuitos aproximados con precisión reconfigurable en tiempo de ejecución. El método del documento consta de dos partes: la primera parte es usar el algoritmo genético para aproximar el circuito dado al nivel de la puerta, para reducir la sobrecarga del circuito sin afectar la corrección de la función; la segunda parte es para agregar una reconfiguración programable de la unidad permite que el circuito cambie entre diferentes niveles de precisión en tiempo de ejecución de acuerdo con los requisitos de la aplicación y las condiciones ambientales.

Unidad de cálculo aproximada - Diseño sin multiplicador

Habiendo visto el hardware dedicado TPU, DaDianNao, veamos un nuevo dispositivo FPGA.

El documento "AddNet: Redes neuronales profundas que usan multiplicadores optimizados para FPGA"
propone un método para usar multiplicadores optimizados para FPGA para implementar redes neuronales profundas, llamado AddNet. El enfoque utiliza multiplicadores de coeficiente constante reconfigurables (RCCM), que pueden implementar la multiplicación con sumadores, restadores, desplazamientos y multiplexores (MUX), para ser altamente optimizados en FPGA. Los autores diseñaron una serie de RCCM adecuados para elementos lógicos de FPGA para garantizar su utilización eficiente. Para reducir la pérdida de información causada por la cuantificación, los autores también desarrollan una nueva técnica de entrenamiento que mapea posibles representaciones de coeficientes de RCCM en distribuciones de parámetros de peso de redes neuronales. Esto hace posible mantener una alta precisión cuando se usa RCCM en hardware.

De manera similar, el punto principal del documento "Computación neuronal energéticamente eficiente con multiplicadores aproximados" es proponer un método para la computación neuronal energéticamente eficiente utilizando multiplicadores aproximados. El enfoque aprovecha la resistencia a errores de las aplicaciones de redes neuronales, utilizando el concepto de compartición de cómputo para permitir operaciones de multiplicación de baja precisión que ahorran área de silicio o aumentan el rendimiento. Los autores diseñan un multiplicador aproximado que usa sumadores, restadores, desplazamientos y multiplexores (MUX) para implementar operaciones de multiplicación altamente optimizadas en FPGA. Use neuronas sin multiplicadores reemplazando los multiplicadores con operaciones simplificadas de cambio y suma, controladas por una sola unidad. Los llamados multiplicadores de conjuntos alfabéticos (ASM, por sus siglas en inglés) consisten en bancos de precalculadores basados ​​en una pequeña secuencia de bits llamados alfabetos ({1, 2, 3, 5, . . . }), un sumador y una o más selecciones, desplazamientos, y lógica de control para calcular múltiplos de orden bajo de la entrada. El tamaño del alfabeto define la precisión y la ganancia de energía del ASM. Finalmente, se realiza un reentrenamiento efectivo para ajustar los pesos y mitigar la caída de precisión debido a los ASM.

Unidad de Cómputo Aproximada - Multiplicador Logarítmico Aproximado

La investigación sobre cómo convertir la multiplicación en suma usando logaritmos y exponentes tiene una larga historia. John N. Mitchell propuso una multiplicación y división por computadora usando logaritmos binarios en su artículo de 1962 "Multiplicación y división por computadora usando logaritmos binarios". Métodos de multiplicación y división. Este método permite determinar aproximadamente el logaritmo de un número binario en sí mismo, mediante un simple desplazamiento y conteo. La multiplicación o división se puede hacer con una simple operación de suma o resta y desplazamiento.

El siguiente es un diagrama esquemático de un algoritmo mejorado. Hay muchas fórmulas involucradas, así que no entraré en detalles:

resumen

Esta sección solo quiere popularizarlo para todos, porque la tolerancia de la red neuronal ha brindado mucho espacio para varias optimizaciones de hardware. Aunque el entrenamiento actual de modelos grandes básicamente solo puede usar GPU NVidia, todavía debe haber mucho espacio para la optimización en el entrenamiento y la inferencia futuros.

Preste atención al desarrollo de hardware en cualquier momento. Si encuentra que el hardware que se puede usar en sus propios escenarios comerciales puede ahorrar costos o mejorar el rendimiento, debe mantener la mente abierta y probarlo.

Supongo que te gusta

Origin blog.csdn.net/lusing/article/details/131313050
Recomendado
Clasificación