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

656

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))

se ejecutó 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?

csg
fuente
33
Si funciona, la información que escupe solo significa que no es tan rápido como podría ser. Para deshacerse de él, puede instalarlo desde la fuente, consulte aquí
Ben
También estoy enfrentando el mismo problema con los comandos que podrías ejecutar con éxito. >>> sess = tf.Session() 2017-11-05 18:02:44.670825: I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\ 35\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instruct ions that this TensorFlow binary was not compiled to use: AVX AVX2
M. Oguz Ozcan
@Ben, ¿es solo una advertencia, pero todo funcionará bien? (al menos desde la perspectiva de un principiante)
bvdb
1
Para compilar Tensorflow con instrucciones AVX, vea esta respuesta
Sreeragh AR
2
Recibí un mensaje muy similar en la misma situación, el mensaje es Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2.
Hamid Heydarian

Respuestas:

821

¿De qué se trata esta advertencia?

Las CPU modernas proporcionan muchas instrucciones de bajo nivel, además de la lógica y la aritmética 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 todas las capacitaciones de aprendizaje automático involucran una gran cantidad de estas operaciones, por lo tanto, serán más rápido en una CPU que admita AVX y FMA (hasta 300%). La advertencia indica que su CPU admite 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 crea sin extensiones de CPU , como SSE4.1, SSE4.2, AVX, AVX2, FMA, etc. Las compilaciones predeterminadas (las de pip install tensorflow) están destinadas a 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=2si estás 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 a partir de 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.

Máxima
fuente
29
Vale la pena mencionar que TensorFlow Serving tiene instalaciones separadas para CPU no optimizada y CPU optimizada (AVX, SSE4.1, etc.). los detalles están aquí: github.com/tensorflow/serving/blob/…
Chris Fregly
99
Según una respuesta eliminada a esta pregunta, AVX512F en un i9-7900x (Skylake-AVX512) con GPU (GTX1080Ti) "obtiene un 28% de ganancia 68s-> 48s en las iteraciones CIFAR10 1000". ¿Estás seguro de que es un buen consejo ignorar la advertencia al usar una GPU? A menos que ese comentario sea falso, parece que hay algo que ganar de los conjuntos de instrucciones de la CPU en al menos algunos casos.
Peter Cordes
1
@PeterCordes Si es así, ciertamente lo incluiré en mi respuesta. Pero la afirmación "mi modelo se acelera en un 30%" suena igual que "mi programa C ++ se acelera en un 30%". ¿Qué modelo exactamente? ¿Hay colocación manual de CPU? ¿Cómo se transfieren los datos? Por ejemplo, podría haber mucho trabajo en numpy. Por supuesto, es posible hacer que la CPU sea un cuello de botella y hay muchas preguntas al respecto en SO. Por lo general, se considera un error.
Maxim
2
@Maxim: El texto completo de la respuesta eliminada es " En mi prueba, la instrucción AVX512F en la GPU I9 (7900x) (GTX1080Ti) obtiene una ganancia del 28% 68s-> 48s en las iteraciones CIFAR10 1000 ". Así que desafortunadamente no hay detalles (o puntuación, gramática o formato).
Peter Cordes
2
Aparentemente, si estás en una Mac, no usará GPU, stackoverflow.com/questions/46364917/…
Dent Arthur Dent
156

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í

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

HimalayaCoder
fuente
1
Intenté en Windows 10 con URL url stackoverflow.com/questions/47068709/… . Me aparece un error diciendo zipfile.BadZipFile: El archivo no es un archivo zip
Thusitha Thilina Dayaratne
1
Funcionó cuando descargué y
utilicé la
1
cualquiera que reciba "error al decir zipfile.BadZipFile: el archivo no es un archivo zip" debería obtener el enlace sin formato como para cuda9.2avx2, el enlace es github.com/fo40225/tensorflow-windows-wheel/raw/master/1.9.0/…
Yeasin Ar Rahman
55
Para Windows, probé esto. Desinstale el tensorflow existente usando "pip uninstall tensorflow", luego vuelva a instalarlo usando "pip install <Ruta al archivo WHL descargado>". Descargue este archivo WHL en su computadora: github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/… , si tiene un Python 3.6 y una ventana de 64 bits (ignore el amd que ve). De lo contrario, navegue un paso atrás en github y busque el WHL correcto. Funciona
Rey
3
Trabajó para mi. Ubuntu 16.04.4, Python 3.5.2, gcc 5.4.0: descargué el whl y lo instalé. Actualmente utilizando una instancia de p2.xLarge aws. El rendimiento mejoró de 16 segundos por iteración a 9 segundos para un ejercicio de detección de objetos personalizado con 230 clases ejecutándose en R-CNN más rápido.
Apricot
27

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 ahorrado y debe hacerlo una vez.

Wesam
fuente
12

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
Z.Wei
fuente
las GPU se dividen en partes y se etiquetan como archivos .7z. ¿Cómo juntarlos?
user3496060
@ user3496060 Usé winrar para descomprimir los archivos divididos
Alan Dursun
8

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.

Hazarapet Tunanyan
fuente
¿Cómo puedo evitar este error? ¿Qué cosas debo seguir?
jitsm555
2
Esto no es un error. Es una advertencia de que thensorflow no es compatible con AVX para CPU. Si no desea verlo, desactívelo configurando os.environ ['TF_CPP_MIN_LOG_LEVEL'] = '2'
Hazarapet Tunanyan
5

La forma más fácil de solucionar esto es desinstalar todo y luego instalar una versión específica de tensorflow-gpu:

  1. desinstalar tensorflow:
    pip uninstall tensorflow
  1. desinstalar tensorflow-gpu: (asegúrese de ejecutar esto incluso si no está seguro de si lo instaló)
    pip uninstall tensorflow-gpu
  1. Instale una versión específica de tensorflow-gpu:
    pip install tensorflow-gpu==2.0.0
    pip install tensorflow_hub
    pip install tensorflow_datasets

Puede verificar si esto funcionó agregando el siguiente código en un archivo de Python:

from __future__ import absolute_import, division, print_function, unicode_literals

import numpy as np

import tensorflow as tf
import tensorflow_hub as hub
import tensorflow_datasets as tfds

print("Version: ", tf.__version__)
print("Eager mode: ", tf.executing_eagerly())
print("Hub Version: ", hub.__version__)
print("GPU is", "available" if tf.config.experimental.list_physical_devices("GPU") else "NOT AVAILABLE")

Ejecute el archivo y luego la salida debería ser algo como esto:

Version:  2.0.0
Eager mode:  True
Hub Version:  0.7.0
GPU is available

Espero que esto ayude

James Brett
fuente
ModuleNotFoundError: Ningún módulo llamado 'tensorflow_hub'
D Adams
ModuleNotFoundError: Ningún módulo llamado 'tensorflow_datasets'
D Adams
Intente instalar los módulos por separado: pip install tensorflow_hubypip install tensorflow_datasets
James Brett
sí -> solo trato de ser útil para completar su respuesta.
D Adams
Oh, no recuerdo tener que instalarlos por separado. ¡Gracias!
James Brett
0

Lo que funcionó para mí es esta biblioteca https://pypi.org/project/silence-tensorflow/

Instale esta biblioteca y haga lo que se indica en la página, ¡funciona de maravilla!

shivam13juna
fuente