Sua CPU suporta instruções que este binário TensorFlow não foi compilado para usar: AVX AVX2

656

Eu sou novo no TensorFlow. Eu o instalei recentemente (versão da CPU do Windows) e recebi a seguinte mensagem:

Tensorflow-1.4.0 instalado com sucesso tensorflow-tensorboard-0.4.0rc2

Então, quando eu tentei 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 encontrei em https://github.com/tensorflow/tensorflow )

Recebi a seguinte mensagem:

2017-11-02 01: 56: 21.698935: IC: \ tf_jenkins \ home \ espaço de trabalho \ rel-win \ M \ windows \ PY \ 36 \ tensorflow \ core \ platform \ cpu_feature_guard.cc: 137] Sua CPU suporta instruções de que este O binário TensorFlow não foi compilado para uso: AVX AVX2

Mas quando eu corri

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

funcionou como deveria e produziu Hello, TensorFlow!, o que indica que a instalação foi bem-sucedida, mas há algo mais errado.

Você sabe qual é o problema e como corrigi-lo?

csg
fonte
33
Se funcionar, a informação que ele cospe significa apenas que não é tão rápido quanto poderia ser. Para se livrar dele, você pode instalá-lo a partir da fonte, veja aqui
Ben
Também estou enfrentando o mesmo problema com os comandos que você pode executar com ê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, então é apenas um aviso, mas tudo funcionará bem? (pelo menos do ponto de vista de um novato)
bvdb
1
Para compilar Tensorflow com instruções AVX, veja esta resposta
Sreeragh AR
2
Eu recebi uma mensagem muito semelhante na mesma situação, a mensagem é Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2.
Hamid Heydarian

Respostas:

820

Sobre o que é esse aviso?

CPUs modernas fornecer uma série de instruções de baixo nível, além da aritmética habitual e lógica, conhecido como extensões, por exemplo, SSE2, SSE4, AVX, etc. Do Wikipedia :

As extensões de vetor avançadas ( AVX ) são extensões da arquitetura do conjunto de instruções x86 para microprocessadores da Intel e AMD propostas pela Intel em março de 2008 e primeiro suportadas pela Intel com o processador Sandy Bridge enviado no primeiro trimestre de 2011 e posteriormente pela AMD com o processador Bulldozer no terceiro trimestre de 2011. O AVX fornece novos recursos, novas instruções e um novo esquema de codificação.

Em particular, o AVX introduz operações FMA (Multiply -acumulate ) fundidas , que aceleram a computação de álgebra linear, ou seja, produtos pontuais, multiplicação de matrizes, convolução, etc. Quase todo treinamento de aprendizado de máquina envolve grande parte dessas operações; mais rápido em uma CPU que suporta AVX e FMA (até 300%). O aviso indica que sua CPU suporta AVX (viva!).

Eu gostaria de enfatizar aqui: trata-se apenas de CPU .

Por que não é usado então?

Porque a distribuição tensorflow padrão é construído sem extensões de CPU , como SSE4.1, SSE4.2, AVX, AVX2, FMA, etc. O padrão constrói (os de pip install tensorflow) destinam-se a ser compatível com o maior número de CPUs possível. Outro argumento é que, mesmo com essas extensões, a CPU é muito mais lenta que uma GPU, e espera-se que o treinamento de aprendizado de máquina de média e grande escala seja realizado em uma GPU.

O que você deveria fazer?

Se você possui uma GPU , não deve se preocupar com o suporte ao AVX, porque as operações mais caras serão despachadas em um dispositivo de GPU (a menos que explicitamente definido como não). Nesse caso, você pode simplesmente ignorar esse aviso

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

... ou configurando export TF_CPP_MIN_LOG_LEVEL=2se você estiver no Unix. O Tensorflow está funcionando bem, mas você não verá esses avisos irritantes.


Se você não possui uma GPU e deseja utilizar a CPU o máximo possível, deve criar um fluxo tensor a partir da fonte otimizada para sua CPU com AVX, AVX2 e FMA ativados, se sua CPU suportar. Foi discutido nesta questão e também nesta questão do GitHub . O Tensorflow usa um sistema de construção ad-hoc chamado bazel, e construí-lo não é tão trivial, mas certamente é factível. Depois disso, não apenas o aviso desaparecerá, mas também o desempenho do fluxo tensor.

Máxima
fonte
29
Vale ressaltar que o TensorFlow Serving possui instalações separadas para CPU não otimizada e CPU otimizada (AVX, SSE4.1, etc.). os detalhes estão aqui: github.com/tensorflow/serving/blob/…
Chris Fregly
9
De acordo com uma resposta excluída para esta pergunta, o AVX512F em uma i9-7900x (Skylake-AVX512) com GPU (GTX1080Ti) "obtém um ganho de 28% 68s-> 48s nas iterações CIFAR10 1000". Tem certeza de que é um bom conselho ignorar o aviso ao usar uma GPU? A menos que esse comentário seja falso, parece que há algo a ganhar com os conjuntos de instruções da CPU em pelo menos alguns casos.
Peter Cordes
1
@ PeterCordes Se for assim, certamente o incluirei na minha resposta. Mas a declaração "meu modelo acelera em 30%" soa da mesma forma que "meu programa C ++ acelera em 30%". Qual modelo exatamente? Existe posicionamento manual da CPU? Como os dados são transferidos? Por exemplo, pode haver muito trabalho entorpecido. Obviamente, é possível fazer da CPU um gargalo e há muitas perguntas sobre isso no SO. Geralmente é considerado um bug.
Maxim
2
@ Maxim: O texto inteiro da resposta excluída é " No meu teste, a instrução AVX512F na GPU I9 (7900x) (GTX1080Ti) obtém um ganho de 28% 68s-> 48s nas iterações CIFAR10 1000 ". Infelizmente, não há detalhes (ou pontuação, gramática ou formatação).
Peter Cordes
2
Aparentemente, se você estiver em um Mac, ele não estará usando GPU, stackoverflow.com/questions/46364917/…
Dent Arthur Dent
156

Atualize o binário tensorflow para sua CPU e SO usando este comando

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

O URL de download do arquivo whl pode ser encontrado aqui

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

HimalayanCoder
fonte
1
Eu tentei no Windows 10 wuth url stackoverflow.com/questions/47068709/… . Eu recebo um erro dizendo zipfile.BadZipFile: O arquivo não é um arquivo zip
Thusitha Thilina Dayaratne
1
Ele trabalhou quando eu baixar e usar a versão baixada
Thusitha Thilina Dayaratne
1
alguém recebendo "erro dizendo zipfile.BadZipFile: o arquivo não é um arquivo zip" deve obter o link bruto, como para cuda9.2avx2, o link é github.com/fo40225/tensorflow-windows-wheel/raw/master/1.9.0/…
Yeasin Ar Rahman
5
Para o Windows, eu tentei isso. Desinstale o tensorflow existente usando "pip uninstall tensorflow" e reinstale-o usando "pip install <Caminho para o arquivo WHL baixado>". Faça o download desse arquivo WHL no seu computador - github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/… , se você tiver um Python 3.6 e uma janela de 64 bits (ignore o amd que você vê). Caso contrário, navegue um passo para trás no github e procure o WHL correto. Ele funciona
Rei
3
Trabalhou para mim. Ubuntu 16.04.4, Python 3.5.2, gcc 5.4.0 - baixou o whl e instalado. Atualmente, usando uma instância do p2.xLarge aws. O desempenho foi aprimorado de 16 segundos por iteração para 9 segundos para um exercício de detecção de objeto personalizado com 230 classes em execução no R-CNN mais rápido.
Apricot
27

Otimização de CPU com GPU

Há ganhos de desempenho que você pode obter instalando o TensorFlow a partir da fonte, mesmo se você tiver uma GPU e usá-la para treinamento e inferência. O motivo é que algumas operações de TF têm apenas implementação de CPU e não podem ser executadas na sua GPU.

Além disso, existem algumas dicas de aprimoramento de desempenho que fazem bom uso da sua CPU. O guia de desempenho do TensorFlow recomenda o seguinte:

A colocação de operações de pipeline de entrada na CPU pode melhorar significativamente o desempenho. A utilização da CPU para o pipeline de entrada libera a GPU para se concentrar no treinamento.

Para obter o melhor desempenho, você deve escrever seu código para utilizar sua CPU e GPU para trabalhar em conjunto, e não despejar tudo na sua GPU, se você tiver uma. A otimização dos binários do TensorFlow para a CPU pode compensar horas de tempo de execução economizadas e você deve fazer isso uma vez.

Wesam
fonte
12

Para Windows (Graças ao proprietário f040225), acesse aqui: https://github.com/fo40225/tensorflow-windows-wheel para buscar a URL do seu ambiente com base na combinação de "tf + python + cpu_instruction_extension". Em seguida, use este cmd para instalar:

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

Se você encontrar o erro "O arquivo não é um arquivo zip", faça o download do arquivo .whl no computador local e use este cmd para instalar:

pip install --ignore-installed --upgrade /path/target.whl
Z.Wei
fonte
os da GPU são divididos em partes e rotulados como arquivos .7z. Como juntá-los?
user3496060 8/03
@ user3496060 Eu usei o winrar para descompactar os arquivos divididos
Alan Dursun
8

Se você usa a versão pip do tensorflow, significa que já está compilado e você está apenas instalando-o. Basicamente, você instala o tensorflow-gpu, mas ao fazer o download do repositório e tentar construir, você deve construí-lo com o suporte da CPU AVX. Se você ignorá-lo, receberá o aviso sempre que executar na CPU.

Hazarapet Tunanyan
fonte
como posso evitar esse erro, quais são as coisas que devo seguir?
precisa saber é o seguinte
2
isso não é um erro. É um aviso de que o fluxo de recursos não oferece suporte ao AVX para CPU. Se você não quiser vê-lo, basta desligá-lo, definindo os.environ ['TF_CPP_MIN_LOG_LEVEL'] = '2'
Hazarapet Tunanyan / Ago
5

A maneira mais fácil que encontrei para corrigir isso é desinstalar tudo e instalar uma versão específica do tensorflow-gpu:

  1. desinstalar o tensorflow:
    pip uninstall tensorflow
  1. desinstalar tensorflow-gpu: (certifique-se de executar isso mesmo que não tenha certeza se o instalou)
    pip uninstall tensorflow-gpu
  1. Instale a versão específica do tensorflow-gpu:
    pip install tensorflow-gpu==2.0.0
    pip install tensorflow_hub
    pip install tensorflow_datasets

Você pode verificar se isso funcionou adicionando o seguinte código em um arquivo 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")

Execute o arquivo e, em seguida, a saída deve ser algo como isto:

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

Espero que isto ajude

James Brett
fonte
ModuleNotFoundError: Nenhum módulo chamado 'tensorflow_hub'
D Adams
ModuleNotFoundError: Nenhum módulo chamado 'tensorflow_datasets'
D Adams
Tente instalar os módulos separadamente: pip install tensorflow_hubepip install tensorflow_datasets
James Brett
sim -> apenas tentando ser útil na totalidade da sua resposta.
D Adams
Oh, eu não me lembro de ter que instalá-los separadamente. Obrigado!
James Brett
0

O que funcionou para mim nesta biblioteca https://pypi.org/project/silence-tensorflow/

Instale esta biblioteca e faça conforme as instruções na página; ela funciona como um encanto!

shivam13juna
fonte