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?
fonte
>>> 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
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
.Respostas:
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 :
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
... ou configurando
export TF_CPP_MIN_LOG_LEVEL=2
se 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.
fonte
Atualize o binário tensorflow para sua CPU e SO usando este comando
O URL de download do arquivo whl pode ser encontrado aqui
https://github.com/lakshayg/tensorflow-build
fonte
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:
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.
fonte
No Windows, você pode verificar a otimização oficial do Intel MKL para as rodas TensorFlow que são compiladas com o AVX2. Esta solução acelera minha inferência ~ x3.
fonte
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:
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:
fonte
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.
fonte
A maneira mais fácil que encontrei para corrigir isso é desinstalar tudo e instalar uma versão específica do tensorflow-gpu:
Você pode verificar se isso funcionou adicionando o seguinte código em um arquivo python:
Execute o arquivo e, em seguida, a saída deve ser algo como isto:
Espero que isto ajude
fonte
pip install tensorflow_hub
epip install tensorflow_datasets
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!
fonte