Su CPU admite instrucciones que este binario TensorFlow no se compiló para usar: AVX AVX2

Soy nuevo en TensorFlow. Lo instalé recientemente (versión de la CPU de Windows) y recibí el siguiente mensaje:

Instalado correctamente tensorflow-1.4.0 tensorflow-tensorboard-0.4.0rc2

Entonces cuando traté de correr

import tensorflow as tf hello = tf.constant('Hello, TensorFlow!') sess = tf.Session() sess.run(hello) 'Hello, TensorFlow!' a = tf.constant(10) b = tf.constant(32) sess.run(a + b) 42 sess.close() 

(que encontré a través de https://github.com/tensorflow/tensorflow )

Recibí el siguiente error:

 2017-11-02 01:56:21.698935: IC:\tf_jenkins\home\workspace\rel-win\M\windows\PY\36\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2 

Pero cuando corrí

 import tensorflow as tf hello = tf.constant('Hello, TensorFlow!') sess = tf.Session() print(sess.run(hello)) 

se compiló como debería y salió Hello, TensorFlow! , lo que indica que la instalación fue exitosa, pero hay algo más que está mal.

¿Sabes cuál es el problema y cómo solucionarlo? Gracias.

¿De qué se trata esta advertencia?

Las CPU modernas proporcionan muchas instrucciones de bajo nivel, además de la aritmética y la lógica habituales, conocidas como extensiones, por ejemplo, SSE2, SSE4, AVX, etc. De la Wikipedia :

Advanced Vector Extensions ( AVX ) son extensiones de la architecture del conjunto de instrucciones x86 para microprocesadores de Intel y AMD propuestos por Intel en marzo de 2008 y primero soportados por Intel con el envío del procesador Sandy Bridge en Q1 2011 y más tarde por AMD con el envío del procesador Bulldozer en el tercer trimestre de 2011. AVX ofrece nuevas funciones, nuevas instrucciones y un nuevo esquema de encoding.

En particular, AVX introduce operaciones fusionadas de multiplicación y acumulación (FMA), que aceleran el cálculo de álgebra lineal, a saber, producto de puntos, multiplicación de matrices, convolución, etc. Casi todos los entrenamientos de aprendizaje automático implican una gran cantidad de estas operaciones, por lo tanto serán más rápido en una CPU que admite AVX y FMA (hasta 300%). La advertencia indica que su CPU es compatible con AVX (¡hurra!).

Me gustaría hacer hincapié aquí: se trata solo de CPU .

¿Por qué no se usa entonces?

Debido a que la distribución por defecto de tensorflow está construida sin extensiones de CPU , como SSE4.1, SSE4.2, AVX, AVX2, FMA, etc. Las versiones predeterminadas (las de pip install tensorflow ) están diseñadas para ser compatibles con tantas CPU como sea posible. Otro argumento es que incluso con estas extensiones, la CPU es mucho más lenta que una GPU, y se espera que la capacitación en aprendizaje de máquina de mediana y gran escala se realice en una GPU.

¿Qué deberías hacer?

Si tiene una GPU , no debería preocuparse por la compatibilidad con AVX, ya que las operaciones más costosas se enviarán a un dispositivo GPU (a menos que se establezca explícitamente que no). En este caso, simplemente puede ignorar esta advertencia

 # Just disables the warning, doesn't enable AVX/FMA import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 

… o estableciendo la export TF_CPP_MIN_LOG_LEVEL=2 si está en Unix. Tensorflow funciona bien de todos modos, pero no verá estas advertencias molestas.


Si no tiene una GPU y desea utilizar la CPU tanto como sea posible, debe construir Tensorflow desde la fuente optimizada para su CPU con AVX, AVX2 y FMA habilitados si su CPU los admite. Se ha discutido en esta pregunta y también en este problema de GitHub . Tensorflow usa un sistema de comstackción ad-hoc llamado bazel y construirlo no es tan trivial, pero es ciertamente factible. Después de esto, no solo desaparecerá la advertencia, sino que también mejorará el rendimiento de tensorflow.

Actualice el binario de tensorflow para su CPU y sistema operativo utilizando este comando

 pip install --ignore-installed --upgrade "Download URL" 

La url de descarga del archivo whl se puede encontrar aquí

https://github.com/lakshayg/tensorflow-build

Optimización de CPU con GPU

Puede obtener mejoras de rendimiento instalando TensorFlow desde la fuente, incluso si tiene una GPU y la usa para capacitación e inferencia. La razón es que algunas operaciones de TF solo tienen implementación de CPU y no pueden ejecutarse en su GPU.

Además, hay algunos consejos de mejora del rendimiento que hace un buen uso de su CPU. La guía de rendimiento de TensorFlow recomienda lo siguiente:

La colocación de operaciones de canalización de entrada en la CPU puede mejorar significativamente el rendimiento. Utilizar la CPU para la tubería de entrada libera la GPU para enfocarse en el entrenamiento.

Para obtener el mejor rendimiento, debe escribir su código para utilizar su CPU y GPU para trabajar en tándem, y no volcarlo todo en su GPU si tiene uno. Tener sus binarios TensorFlow optimizados para su CPU podría pagar horas de tiempo de ejecución guardada y tiene que hacerlo una vez.