¿Por qué es tan lento TensorFlow?

  1. Un colega me mostró una vez un código TensorFlow para entrenar a una CNN. Era patéticamente lento, ya que procesaba alrededor de 21 imágenes / segundo. Tomé el código y lo modifiqué un poco y se disparó para procesar ~ 85 imágenes / segundo.

    La forma en que escribes un código afectará su velocidad. TensorFlow es un marco. No significa que tenga la responsabilidad de procesar rápidamente incluso cuando le proporcione instrucciones de programación patéticas. ¿Existe la posibilidad de que eso suceda en su caso?
  2. ¿Lento pero con respecto a qué? ¿Cuál es tu punto de referencia? Estoy seguro de que comprende la relevancia de tener un punto de referencia cuando habla de velocidad. No veo un punto de referencia y, por lo tanto, me resulta totalmente imposible dar algún tipo de opinión responsable sobre esta percepción.
  3. TensorFlow y muchas otras bibliotecas (como mxnet) difieren bastante en sus implementaciones internas y estos detalles son muy importantes para decidir la velocidad promedio que experimenta un usuario final. Pero, diferentes marcos apuntan de manera diferente. TensorFlow se dirige a sí mismo para tomar la posición de un marco computacional basado en gráficos estándar y, como tal, es un superconjunto de aprendizaje profundo. MxNet, por otro lado, es un juego de herramientas de aprendizaje puramente profundo. Las diferencias de implementación subyacentes afectan la forma en que usan la memoria y / o calculan cantidades.

No es lento

  1. Debe verificar la velocidad en la infraestructura del clúster y no en la computadora portátil doméstica. Tensorflow le brinda la posibilidad de entrenar con clústeres de GPU, y la mayor parte del código creado para admitir esto y no solo una GPU.
  2. La mayor parte de la lentitud fue causada, pero no se creó una canalización de lectura optimizada, y la mayoría de las veces la red solo espera la lectura del disco, ya sea para procesar los datos. Por esta razón, tensorflow creó formatos de archivos especiales como TFRecords para reducir el tiempo de lectura del disco. Y también por esta razón, parte del código de entrenamiento debe procesarse en la CPU.
  3. Calidad. Estaba trabajando en diferentes marcos de ML, pero solo Tensorflow me dio los mejores resultados en calidad de entrenamiento. Por ejemplo, tomemos Keras. Dos redes similares, capacitadas en los mismos datos, de la misma manera, pueden tener una enorme diferencia en los resultados.
    Entonces, si Tensorflow tomará un día más para el entrenamiento pero en su lugar me dará buenos resultados, entonces puedo esperar. Porque todavía será mucho más rápido que esperar una semana y luego comprender que debido a algún error en el marco, solo desperdicias una semana.

Esto no es una sorpresa en absoluto. Es bien sabido que TensorFlow es más lento que PyTorch en muchos puntos de referencia. Además, recuerde que el código basado en PyTorch es aproximadamente 5x-10x más fácil de escribir que el código basado en TensorFlow. El único aspecto importante en el que TensorFlow es significativamente mejor que PyTorch a partir de ahora (enero de 2018) es la compatibilidad con múltiples GPU. Esperemos que PyTorch solucione ese problema pronto; entonces no hay razón para usar TensorFlow.

El desarrollo de Tensorflow tiene un fuerte enfoque en la versatilidad. La optimización de algoritmos está lejos de ser una tarea trivial. Obtiene lo que escribe en términos de velocidad siempre que comprenda cómo tensorflow maneja los gráficos y los recursos de hardware.

Puede usar otros marcos o herramientas siempre que se ajuste a sus necesidades y le brinde más velocidad para la misma cantidad de trabajo / esfuerzo.

Si desea aún más velocidad, necesitará una comprensión más profunda de la mayoría de los trucos DL, compensaciones, etc. y probablemente para portar su código tf de python a c ++ y CUDA u OpenCL.

Hay mucho que mejorar en términos de ideas y desafíos en el campo del aprendizaje profundo, la velocidad es secundaria en este momento en mi opinión.

TensorFlow es un marco. No creo que un modelo implementado usando tensorflow esté procesando lentamente solo porque se implementó usando tensorflow. Necesita optimizar su código utilizando algoritmos eficientes, estructuras de datos. Puede haber otras diferencias técnicas entre tensorflow, PyTorch, theano.

No hay nada lento en TensorFlow.

Es el estándar de oro para los marcos de aprendizaje profundo.

La mayoría simplemente no se da cuenta de que los modelos de aprendizaje profundo del mundo real no están construidos en computadoras portátiles , sino en la nube o en cajas increíblemente grandes en prem.

Todo el proceso supervisado de aprendizaje profundo requiere muchos recursos.

Tensorflow es una biblioteca realmente genial para el aprendizaje profundo. Tiene buen soporte para la aceleración de GPU. Actualmente solo es compatible con la aceleración CUDA, por lo que una mala noticia si tiene una tarjeta AMD debe confiar en la CPU para ejecutar modelos. Y las CPU no están hechas para esa carga paralela, por lo que será lenta.

Verifique las especificaciones de hardware de su PC. Si tiene una GPU Nvidia con soporte CUDA, instale la versión GPU de tensorflow:

pip install tensorflow-gpu

En mi caso es muy lento ya que tengo GPU AMD, así que tengo que confiar en la CPU.

Consulte la comparación completa de algunos marcos de aprendizaje profundo aquí MARCOS DE APRENDIZAJE PROFUNDO COMPARADOS por Akashdeep Jassal en akashdeepjassal

No es tan lento realmente.

Hice una comparación entre caffe y tensorflow, entrenando un grupo de redes (inspiradas en resnet, por lo que no son tan pequeñas) con el mismo conjunto de datos idéntico. Resulta que sí, el café es más rápido. Pero en ningún caso tensorflow ha tomado más de 1.5x, 1.6x el tiempo requerido por caffe para entrenar la red.

Entonces es más lento que caffe, pero me sorprendió por no ser muuuucho más lento.

Depende de qué hardware estés ejecutando. Tómeme como ejemplos: 2.9 Ghz i7 hasta 3.5 con un 960M. ¿TensorFlow es increíblemente rápido? Bueno, no, probablemente porque no tengo un par de Titan X, pero si lo hiciera, es mejor que creas que sería rápido …

Lo que hace que TensorFlow sea realmente lento es rastrear modelos grandes solo en una CPU, porque desafortunadamente, su CPU simplemente no está optimizada para eso, mientras que su GPU sí.

En realidad, no ha dado detalles de su hardware. Para obtener un rendimiento óptimo de su hardware y acelerar el flujo de tensor, use nvidia gpu y cree el flujo de tensor desde la fuente usando cuda toolkit 9.1 y cudnn 7.0.5.

He escrito un tutorial paso a paso en mi blog para construir gpu tensorflow desde la fuente para usar cuda 9.1 y cudnn 7.0.5. Visite mi blog aquí Cómo instalar la GPU Tensorflow 1.4.1 con CUDA Toolkit 9.1 y cuDNN 7.0.5 para Python 3 en Ubuntu 16.04-64bit | Python 3.6

¡Gracias!

En realidad, en mi investigación reciente, Tensorflow demostró ser más rápido que Caffe, un marco siempre más rápido en documentos más antiguos, al usar GPU y cuDNN> = 7, usando SGEMM por lotes: múltiples multiplicaciones de matriz pequeña en paralelo

¿Está actualizado su entorno?

Las respuestas que recibo son buenas, pero probablemente estés usando Python y Python no es el más amable de la comunidad cuando se trata de velocidad. Intente usar C ++ o al menos Cython para el mismo código y verá la diferencia.

More Interesting

¿Por qué mi modelo de regresión produce valores negativos para SalePrice en los datos de prueba?

¿Por qué es que los RNN con conexiones desde la salida al estado oculto pueden expresar menos máquinas de turing?

Quiero construir una copia casi perfecta de Eva de ex machina, entonces, ¿qué curso o área de informática necesito aprender profundamente?

¿Cómo se pueden usar las redes neuronales en el análisis de sentimientos árabes?

¿Qué está sucediendo en este gráfico de pérdida de precisión de la red?

¿Cuál es el mejor artículo para entender cómo se mapea el vector de salida de RNN con un vocabulario para predecir la secuencia?

¿Cuáles son algunos de los proyectos que uno puede hacer para comprender SVM y los trucos del kernel?

¿Qué nivel de experiencia en aprendizaje automático se espera de un científico de datos?

Aprendizaje automático: ¿qué significa "abandono en el cerebro con respecto a todas las entradas, mientras que abandono en una red convolucional funciona con respecto a cada unidad individual"?

¿Cómo funciona la extracción de características en el procesamiento de imágenes?

¿Es posible guardar el estado de una red neuronal?

¿En qué aspectos el aprendizaje automático y la inteligencia artificial cambiarán la fabricación pesada, como la industria del petróleo y el gas?

Cómo hacer que una máquina entienda el texto del lenguaje natural a través de Python

¿Qué enfoques utilizas para vectorizar funciones en Matlab?

¿Debería Facebook usar el aprendizaje automático para identificar a los usuarios con potencial de convertirse en un asesino en masa?