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.
- ¿Cuáles son las ventajas de las máquinas de vectores de soporte (SVM) en comparación con la regresión lineal o la regresión logística?
- ¿Vale la pena dejar mi trabajo de desarrollador de software de USD $ 150K para estudiar el aprendizaje automático y el aprendizaje profundo?
- ¿Qué está haciendo Wavii con el aprendizaje automático para redefinir cómo se realiza la búsqueda en la web?
- ¿Cómo se utiliza el aprendizaje automático en el análisis de sentimientos?
- Cómo lidiar con una matriz escasa de pares de elementos de usuario mientras se construye un sistema de recomendación de filtrado colaborativo basado en perceptrón
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.