¿Qué tan rápido es Theano en comparación con otras implementaciones de DBN? ¿Cómo se compara con otras implementaciones de GPU (potencialmente no públicas) para la velocidad de entrenamiento en grandes conjuntos de datos?

Soy el desarrollador principal de Theano, así que estoy en una muy buena posición para
Responde esta pregunta.

Mi conclusión sin sorpresa es que Theano es muy rápido para DBN y
otro marco no puede ser significativamente más rápido para modelos grandes.

Mi argumento es que lo hemos comparado en CPU y GPU contra
otras implementaciones en algunos modelos, incluido un MLP de 3 capas:
Página sobre Arxiv. La conclusión de este punto de referencia
es que Theano fue tan rápido como Torch. La razón es simple: el
el cuello de botella del modelo está dentro de BLAS (una biblioteca externa para algunos
operación de vector / matriz, incluido el producto de puntos) y tanto Theano como
La antorcha lo usa correctamente. Entonces, si ambos software (y cualquier otra biblioteca)
use la misma versión de BLAS que en todos los buenos puntos de referencia, y que el
El cuello de botella del algoritmo es BLAS como para MLP y DBN. Ningún marco puede
Realmente sea más rápido que el otro.

Acabo de perfilar nuevamente este punto de referencia para tener el número real. En esto
MLP de 3 capas en la GPU, pasamos el 80% del tiempo dentro de BLAS
operación. DBN tiene un cálculo muy similar a MLP y su
El cuello de botella del algoritmo también es BLAS.

Sobre Alex cuda-convnet. No puede ser significativamente más rápido en DBN
entonces Theano por la misma razón por la que Torch y Theano eran igualmente
rápido. cuda-convnet tuvo una implementación más rápida de convolución en
GPU Lo envolvimos dentro de Pylearn2 que está encima de Theano. Entonces el
El código de convolución ahora debe ejecutarse a la misma velocidad. (Sin referencia)

No tememos envolver el código de otras personas cuando son más rápidos. Queremos
sea ​​lo más rápido posible y no nos gusta volver a implementar otros
Código rápido de personas. Entonces, si vuelve a suceder en el futuro, como con
cuda-convnet que alguien más implementa una operación para ser
más rápido, cuéntanos! Se puede agregar en Theano.

Usamos mucho Theano en GalacticExchange.io y hasta ahora nos ha encantado, tiene una combinación perfecta de simplicidad y rendimiento.

Para Deep Leaning, la facilidad de uso de la biblioteca es tan importante como el rendimiento, ya que desea seguir ajustando las cosas.

No recomendaría tomar a ciegas el código de otras personas, en mi experiencia, puede terminar con un montón de problemas que no comprende.

He visto un rendimiento locamente ineficiente con Theano más una GPU de clase Kepler (17% de utilización en el mejor de los casos). Con muchas semanas de esfuerzo, la utilización de GPU aumentó al 31%. Realmente no puedo discutir los detalles, pero al observar a otros, es muy fácil para un usuario final meterse en los arbustos con esta API a menos que estén haciendo algo cercano a uno de los ejemplos / tutoriales proporcionados.

No dudo que sus desarrolladores obtengan más del 80% de eficiencia, pero ¿tal vez deberían considerar escribir algún tipo de guía de rendimiento?

He encontrado que Theano es muy eficiente en comparación con una implementación de cuda enrollada a mano. Una de las claves para obtener un buen rendimiento de Theano era lidiar adecuadamente con los buffers de datos compartidos: es mejor nunca reasignar estos buffers, sino mantenerlos en un tamaño fijo y copiar datos en ellos para cada fragmento. Procesamos nuestros datos de entrenamiento en fragmentos de 8Gig en la tarjeta donde se procesan muchos fragmentos por época.

Pero entonces, ¿qué pasa con esto?
Cláment Farabet | Código

Afirman que son los más rápidos.