that - Su CPU admite instrucciones que este binario TensorFlow no se compiló para usar: AVX AVX2
tensorflow avx (6)
Soy nuevo en TensorFlow. Recientemente lo instalé (versión de CPU de Windows) y recibí el siguiente mensaje:
Tensorflow-1.4.0 instalado con éxito 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 mensaje:
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] Su CPU admite instrucciones que esto El binario TensorFlow no se compiló para usar: AVX AVX2
Pero cuando corrí
import tensorflow as tf
hello = tf.constant(''Hello, TensorFlow!'')
sess = tf.Session()
print(sess.run(hello))
funcionó como debería y arrojó
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.
Optimización de CPU con GPU
Hay ganancias de rendimiento que puede obtener 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 TF solo tienen implementación de CPU y no pueden ejecutarse en su GPU.
Además, hay algunos consejos para mejorar el rendimiento que hacen un buen uso de su CPU. La guía de rendimiento de TensorFlow recomienda lo siguiente:
Colocar operaciones de canalización de entrada en la CPU puede mejorar significativamente el rendimiento. La utilización de la CPU para la canalización de entrada libera a la GPU para centrarse en el entrenamiento.
Para obtener el mejor rendimiento, debe escribir su código para utilizar su CPU y GPU para trabajar en conjunto, 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 guardado y debe hacerlo una vez.
¿De qué se trata esta advertencia?
Las CPU modernas proporcionan muchas instrucciones de bajo nivel, además de la aritmética y lógica habituales, conocidas como extensiones, por ejemplo, SSE2, SSE4, AVX, etc. De Wikipedia :
Las Extensiones de vectores avanzadas ( AVX ) son extensiones de la arquitectura del conjunto de instrucciones x86 para microprocesadores de Intel y AMD propuestas por Intel en marzo de 2008 y primero compatibles con Intel con el envío del procesador Sandy Bridge en el primer trimestre de 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 codificación.
En particular, AVX introduce operaciones fusionadas de acumulación múltiple (FMA), que aceleran el cálculo de álgebra lineal, a saber, producto de punto, multiplicación de matriz, convolución, etc. Casi todo entrenamiento de aprendizaje automático implica una gran cantidad de estas operaciones, por lo tanto será más rápido en una CPU que admita AVX y FMA (hasta 300%). La advertencia indica que su CPU es compatible con AVX (¡hurra!).
Me gustaría enfatizar aquí: se trata solo de CPU .
¿Por qué no se usa entonces?
Debido a que la distribución predeterminada de tensorflow se construye
sin extensiones de CPU
, como SSE4.1, SSE4.2, AVX, AVX2, FMA, etc. Las compilaciones predeterminadas (las de
pip install tensorflow
) están diseñadas para ser compatibles con la mayor cantidad de CPU posible.
Otro argumento es que incluso con estas extensiones, la CPU es mucho más lenta que una GPU, y se espera que el entrenamiento de aprendizaje automático a mediana y gran escala se realice en una GPU.
Que deberias hacer
Si tiene una GPU , no debería preocuparse por el soporte AVX, ya que las operaciones más caras se enviarán en un dispositivo GPU (a menos que se establezca explícitamente no). En este caso, simplemente puede ignorar esta advertencia al
# Just disables the warning, doesn''t enable AVX/FMA
import os
os.environ[''TF_CPP_MIN_LOG_LEVEL''] = ''2''
... o configurando
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 crear un flujo de tensor 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 tema de GitHub . Tensorflow utiliza un sistema de compilación ad-hoc llamado bazel y construirlo no es tan trivial, pero ciertamente es factible. Después de esto, no solo desaparecerá la advertencia, el rendimiento del tensorflow también debería mejorar.
Actualice el binario de tensorflow para su CPU y SO usando este comando
pip install --ignore-installed --upgrade "Download URL"
La URL de descarga del archivo WHL se puede encontrar aquí
Para Windows (Gracias al propietario f040225), vaya a aquí: https://github.com/fo40225/tensorflow-windows-wheel para buscar la URL de su entorno basada en la combinación de "tf + python + cpu_instruction_extension". Luego use este cmd para instalar:
pip install --ignore-installed --upgrade "URL"
Si encuentra el error "El archivo no es un archivo zip", descargue el archivo .whl en su computadora local y use este cmd para instalar:
pip install --ignore-installed --upgrade /path/target.whl
Para Windows, puede verificar la optimización oficial de Intel MKL para las ruedas TensorFlow que se compilan con AVX2. Esta solución acelera mi inferencia ~ x3.
conda install tensorflow-mkl
Si usa la versión pip de tensorflow, significa que ya está compilada y que solo la está instalando. Básicamente, instalas tensorflow-gpu, pero cuando lo descargas del repositorio e intentas compilar, debes compilarlo con soporte para CPU AVX. Si lo ignora, recibirá la advertencia cada vez que se ejecute en la CPU.