Solución:
¿De qué 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:
Extensiones de vector avanzadas (AVX) son extensiones a la arquitectura del conjunto de instrucciones x86 para microprocesadores de Intel y AMD propuestas por Intel en marzo de 2008 y respaldadas por primera vez por Intel con el procesador Sandy Bridge que se distribuyó en el primer trimestre de 2011 y luego AMD con el procesador Bulldozer que se distribuyó en el tercer trimestre de 2011. AVX proporciona 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 escalar, multiplicación de matrices, convolución, etc. más rápido en una CPU que admita AVX y FMA (hasta un 300%). La advertencia indica que su CPU es compatible con AVX (¡hurra!).
Me gustaría enfatizar aquí: se trata de Solo CPU.
¿Por qué no se usa entonces?
Debido a que la distribución predeterminada de tensorflow se crea sin extensiones de CPU, como SSE4.1, SSE4.2, AVX, AVX2, FMA, etc. Las compilaciones predeterminadas (las de pip install tensorflow
) están pensados 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 el entrenamiento de aprendizaje automático a mediana y gran escala se realice en una GPU.
¿Qué deberías hacer?
Si tienes una GPU, no debería preocuparse por la compatibilidad con AVX, porque las operaciones más caras se enviarán en un dispositivo GPU (a menos que se establezca explícitamente que no lo esté). En este caso, simplemente puede ignorar esta advertencia
# Just disables the warning, doesn't take advantage of AVX/FMA to run faster
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
… o configurando export TF_CPP_MIN_LOG_LEVEL=2
si estás en Unix. Tensorflow funciona bien de todos modos, pero no verá estas molestas advertencias.
Si no tienes una GPU y desea utilizar la CPU tanto como sea posible, deberías construir tensorflow a partir de la fuente optimizada para tu UPC 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 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 de tensorflow también debería mejorar.
Actualice el binario de tensorflow para su CPU y sistema operativo usando 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
Hay ganancias de rendimiento que puede obtener instalando TensorFlow desde la fuente, incluso si tiene una GPU y la usa para entrenamiento 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. El uso de la CPU para la canalización de entrada libera a la GPU para que se concentre 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 una. Tener sus binarios de TensorFlow optimizados para su CPU podría pagar horas de tiempo de ejecución ahorrado y debe hacerlo una vez.