¿Por qué la supercomputación no se utilizó con éxito para Deep Learning anteriormente?

Trabajé con el aprendizaje profundo en supercomputadoras durante más de un año, escribí un artículo al respecto, luego trabajé en Microsoft para mejorar su sistema, y ​​luego lo abandoné hace unos meses. El verdadero problema es que es notoriamente difícil hacer que funcione para el aprendizaje profundo y esta es la razón principal por la que no vimos un aprendizaje profundo exitoso para la supercomputación antes.

Hacerlo con éxito significó desarrollar su propia biblioteca C ++ / CUDA porque las bibliotecas existentes no podían interactuar fácilmente con las supercomputadoras (ahora puede construir en Microsoft CNTK). Una vez que haya hecho eso e implementado todas las funciones estándar, deberá escribir código CUDA personalizado, lo que significa principalmente núcleos convolucionales y multiplicación de matrices para lotes pequeños. Esto es extremadamente difícil ya que necesita comprender la teoría detrás de las GPU en detalle e incluso entonces el comportamiento en tiempo de ejecución se ve diferente de la teoría debido a la impredecible sincronía de todas las acciones.
Existen solo unas pocas personas en el mundo que pueden escribir un código tan optimizado. Lo intenté, tuve éxito en algunas áreas, pero fallé en otras. Debe tener éxito en todas las áreas para obtener un sistema con buen rendimiento.

Una vez que haya hecho esto, deberá analizar el infierno de su sistema. Deberá analizar sus sistemas para todas las diferentes arquitecturas de red de aprendizaje profundo y analizar el rendimiento de la red para ciertos algoritmos. Si comete un error aquí, terminará con un sistema con un rendimiento muy pobre.

Si bien puede parecer que el sistema de Google produce un rendimiento bastante bueno como lo indica la cobertura positiva de los medios, esto está lejos de ser verdad. Sus sistemas son lentos y muy poco rentables. Google cometió errores en la fase de análisis, que se debe principalmente al descenso de la ruta del algoritmo asíncrono. Esto provocó innumerables problemas en la fase de análisis porque es casi imposible analizar estos algoritmos teóricamente.

Todos estos problemas también pertenecen a TensorFlow, que es absolutamente terrible para el rendimiento paralelo para el nivel de supercomputación, ya que no proporciona ningún software optimizado para la computación paralela.

Baidu tiene un sistema de muy alto rendimiento que está extremadamente bien optimizado. Tengo un gran respeto por su trabajo. Sin embargo, su sistema solo funciona para redes recurrentes. Por convolución es lenta.

Microsoft tiene, con mucho, el mejor sistema de supercomputación con Microsoft CNTK (y su propio marco de clúster optimizado). Si bien su sistema podría mejorarse en algunos niveles, lograron crear algoritmos que proporcionan un buen rendimiento general para redes recurrentes y convolucionales.

Espero que esta lista de dificultades te ayude a comprender por qué tomó tanto tiempo desarrollar un aprendizaje profundo para las supercomputadoras. Es muy difícil y necesita tiempo.

Las supercomputadoras, es decir, las computadoras de alto rendimiento, alcanzan su velocidad de cómputo al paralelizar el trabajo en múltiples núcleos de cómputo. Las primeras supercomputadoras (o “plataformas HPC”) requerían que la parte de paralelismo del código se escribiera en un lenguaje propietario, lo que era una inversión de tiempo considerable. Incluso compilar un código por primera vez en una nueva plataforma podría llevar meses debido a la falta de estandarización.

HPC realmente despegó después de que la interfaz de paso de mensajes (MPI) significara que el código podría portarse más fácilmente entre diferentes arquitecturas. Pero cuando esto alcanzó la madurez, la gente se estaba centrando en métodos como SVM y las redes neuronales habían pasado de moda

Para cuando se demostró que las redes profundas podían ser entrenadas (pre-contención y luego activaciones de ReLU), las GPGPU estaban ganando popularidad y resultaron ser una solución más eficiente que las plataformas de supercomputación en general.

Había computadoras neuronales especializadas en la década de 1990.

1995 Programé el neurocomputador SYNAPSE-1, desarrollado por Siemens Nixdorf.
Era esencialmente una máquina de multiplicación de matrices, que usaba matrices sistólicas:
http://www.worldscientific.com/d

1996 Programé el neurocomputador CNAPS, desarrollado por Adaptive Solutions.
Esta era una matriz SIMD unidimensional, similar a las GPU modernas.
http://ieeexplore.ieee.org/abstr

Esta investigación estaba ocurriendo a fines de los años 90 en los centros de supercomputación. Hice mi postdoc en un grupo que hizo esto.

Teníamos redes neuronales estilo Hopfield a gran escala y mapas autoorganizados de Kohonen que se ejecutan en nuestras máquinas.

El grupo en una máquina HP de 50 nodos conectada por un conmutador ATM de 3.5 gigbit. Esto es más poderoso que la mayoría de los clústeres de Hadoop en la actualidad.

Aún así, hay importantes problemas técnicos en este trabajo. Por ejemplo, inicializar una red Hopfield requiere diagonalizar una matriz grande, lo cual no era realmente práctico hacer en paralelo. Así que hay muchos problemas técnicos.

También hubo retroceso.

Hubo una oportunidad para construir un clúster muy grande a partir de hardware de juegos de gama baja. Muchos años antes, el grupo en realidad construyó un Transputer personalizado para el trabajo de simulación, y estaba claro que los chips de juego serían útiles. Pero, en ese momento, la máquina de conexión se vendió como la “gran cosa”, y generalmente se consideraba un fracaso e inútil para el trabajo de física de alta gama. Por lo tanto, el grupo se esforzó por no tener otro grupo de máquinas ‘basura’ de gama baja.

Esta es la historia antigua por ahora.

Me sorprendió bastante, en ese momento, que Google hiciera un gran trabajo al construir un clúster escalable a partir de hardware de muy bajo costo. Son realmente grandes ingenieros y su capacidad para escalar esto fue increíble.

More Interesting

¿Cuál es la diferencia entre Python y el aprendizaje automático?

¿Cuál es la diferencia entre Hidden Markov Chain y Markov Chain?

¿Qué funciona mejor, un ANN con miles de unidades por capa pero solo docenas de capas o uno con docenas de unidades por capa, pero cientos de capas?

¿Qué significa splines de regresión adaptativa múltiple (MARS) en términos simples?

Cómo dar un peso diferente a los conjuntos de características mientras se entrena un clasificador con Scikit

¿Cuál es tu algoritmo de aprendizaje automático favorito?

Cómo generar una oración gramaticalmente correcta y completa usando un número dado de palabras

Estoy muy interesado en el aprendizaje profundo. ¿Cómo puedo ser contratado?

¿El filtrado colaborativo se considera aprendizaje automático?

¿Con qué facilidad pueden los actuarios cambiar a carreras relacionadas con TI como la ciencia de datos, el aprendizaje automático y el desarrollo de software?

¿Por qué parece que hay capas y capas de significado más profundo ocultas bajo la simple forma de escritura de Ernest Hemingway?

¿Alguien puede responder a estas preguntas relacionadas con la competencia de kaggle?

¿Qué lenguaje es mejor para hacer big data y machine learning (en términos de rendimiento) Java o Python?

¿Por qué el impulso ayuda a entrenar una red neuronal?

¿Qué tan lejos estamos de usar el reconocimiento de voz como interfaz de usuario en un teléfono para cerca del 100% de todas las funciones (sin entradas de teclado o deslizamiento)?