Como compilar o Tensorflow com as instruções SSE4.2 e AVX?

289

Esta é a mensagem recebida da execução de um script para verificar se o Tensorflow está funcionando:

I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

Notei que ele mencionou SSE4.2 e AVX,

  1. O que são SSE4.2 e AVX?
  2. Como esses SSE4.2 e AVX melhoram os cálculos da CPU para tarefas do Tensorflow.
  3. Como fazer o Tensorflow compilar usando as duas bibliotecas?
GabrielChu
fonte
18
Eu gosto de construir com estas bandeiras bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package Em Xeon E5 v3 que me dá 3x melhoria na 8k velocidade da CPU matmul comparação com o lançamento oficial (0,35 -> 1,05 T ops / seg)
Yaroslav Bulatov
4
e não se esqueça NOTE on gcc 5 or later: the binary pip packages available on the TensorFlow website are built with gcc 4, which uses the older ABI. To make your build compatible with the older ABI, you need to add --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" to your bazel build command. ABI compatibility allows custom ops built against the TensorFlow pip package to continue to work against your built package.de aqui tensorflow.org/install/install_sources
Ivan Kush
4
Eu tenho alguns binários compilados para o TF suportando essas instruções github.com/lakshayg/tensorflow-build . Você pode achar isso útil.
Lakshay Garg
1
@IvanKush, depois de adicionar esse sinalizador, ainda não consigo importar com sucesso o tensorflow (compila corretamente). Se você compilou com êxito o gcc 5, consulte: stackoverflow.com/questions/45877158/…
anon01
1
Se usando o Ubuntu 16.04, temos constrói para quase todas as variantes que você possivelmente irá precisar de pelo github.com/mind/wheels
Danqing

Respostas:

160

Acabei de encontrar o mesmo problema, parece que a sugestão de Yaroslav Bulatov não cobre o suporte ao SSE4.2, a adição --copt=-msse4.2seria suficiente. No final, eu construí com sucesso com

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.2 --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

sem receber nenhum aviso ou erro.

Provavelmente, a melhor opção para qualquer sistema é:

bazel build -c opt --copt=-march=native --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

( Atualização: os scripts de construção podem estar comendo-march=native , possivelmente porque contém um= .)

-mfpmath=bothsó funciona com gcc, não clang. -mfpmath=sseprovavelmente é tão bom, se não melhor, e é o padrão para x86-64. As versões de 32 bits são padrão para -mfpmath=387, portanto, alterar isso ajudará as de 32 bits. (Mas se você deseja alto desempenho para trituração de números, crie binários de 64 bits.)

Eu não tenho certeza do que padrão de TensorFlow para -O2ou -O3é. gcc -O3permite otimização completa, incluindo a vetorização automática, mas que às vezes pode tornar o código mais lento.


O que isso faz: --coptforbazel build passa uma opção diretamente para o gcc para compilar arquivos C e C ++ (mas não vincula, portanto, você precisa de uma opção diferente para otimização do tempo de link entre arquivos)

O x86-64 gcc usa como padrão apenas SSE2 ou instruções SIMD mais antigas, para que você possa executar os binários em qualquer sistema x86-64. (Consulte https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html ). Não é isso que você quer. Você quer criar um binário que tire proveito de todas as instruções que sua CPU pode executar, porque você só está executando esse binário no sistema em que o construiu.

-march=nativeativa todas as opções que sua CPU suporta, tornando-se -mavx512f -mavx2 -mavx -mfma -msse4.2redundante. (Além disso, -mavx2já habilita -mavxe -msse4.2, portanto, o comando de Yaroslav deveria estar bem). Além disso, se você estiver usando uma CPU que não suporta uma dessas opções (como FMA), o uso de -mfmaum binário falha com instruções ilegais.

O ./configurepadrão do TensorFlow é ativar-march=native , portanto, isso deve evitar a necessidade de especificar as opções do compilador manualmente.

-march=nativehabilita -mtune=native, otimizando sua CPU para coisas como qual sequência de instruções do AVX é melhor para cargas desalinhadas.

Isso tudo se aplica ao gcc, clang ou ICC. (Para ICC, você pode usar em -xHOSTvez de -march=native.)

Mike Chiu
fonte
6
Funciona de fato> +1! Então parece -march=nativeque não funciona. Além disso, soltar o --config=cuda(se o suporte CUDA não for necessário) e o -k(já que nenhum erro ocorreu durante a compilação) também funciona.
Marc
4
Depois de desinstalar e reinstalar a nova versão compilada, ainda recebo avisos para AVX, AVX2 e FMA.
Benedikt S. Vogler
5
Eu tive que largar --copt=-mfpmath=bothpara fazê-lo funcionar clangno macOS. Isso afeta o binário resultante?
Gc5 # 22/17
2
Apenas para esclarecimento: quando crio o arquivo de configuração .... uso simplesmente --copt = -march = native? Ou coloco todas as otimizações vistas nas postagens originais nas quais tenho a opção de colocar as otimizações?
Thornhale 30/03
1
Eu recebo um erro dizendo que o comando 'build' é suportado apenas no espaço de trabalho? O que fazer?
humilde
133

Vamos começar com a explicação de por que você vê esses avisos em primeiro lugar .


Provavelmente você não instalou o TF a partir da fonte e, em vez disso, usou algo parecido pip install tensorflow. Isso significa que você instalou binários pré-criados (por outra pessoa) que não foram otimizados para sua arquitetura. E esses avisos dizem exatamente isso: algo está disponível em sua arquitetura, mas não será usado porque o binário não foi compilado com ele. Aqui está a parte da documentação .

O TensorFlow verifica na inicialização se ele foi compilado com as otimizações disponíveis na CPU. Se as otimizações não estiverem incluídas, o TensorFlow emitirá avisos, por exemplo, instruções AVX, AVX2 e FMA não incluídas.

O bom é que provavelmente você só quer aprender / experimentar o TF, para que tudo funcione corretamente e você não deve se preocupar com isso.


O que são SSE4.2 e AVX?

A Wikipedia tem uma boa explicação sobre SSE4.2 e AVX . Esse conhecimento não é necessário para ser bom em aprendizado de máquina. Você pode pensar nelas como um conjunto de instruções adicionais para um computador usar vários pontos de dados em uma única instrução para executar operações que podem ser naturalmente paralelizadas (por exemplo, adicionando duas matrizes).

O SSE e o AVX são a implementação de uma idéia abstrata de SIMD (instrução única, vários dados), que é

uma classe de computadores paralelos na taxonomia de Flynn. Ele descreve computadores com vários elementos de processamento que executam a mesma operação em vários pontos de dados simultaneamente. Assim, essas máquinas exploram o paralelismo no nível de dados, mas não a simultaneidade: há cálculos simultâneos (paralelos), mas apenas um único processo (instrução) em um determinado momento

Isso é suficiente para responder à sua próxima pergunta.


Como esses SSE4.2 e AVX melhoram os cálculos da CPU para tarefas de TF

Eles permitem um cálculo mais eficiente de várias operações de vetores (matriz / tensor). Você pode ler mais nesses slides


Como fazer o Tensorflow compilar usando as duas bibliotecas?

Você precisa ter um binário que foi compilado para tirar proveito dessas instruções. A maneira mais fácil é compilar você mesmo . Como Mike e Yaroslav sugeriram, você pode usar o seguinte comando bazel

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.2 --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

Salvador Dalí
fonte
4
O que significa essa linha de comando? E devo instalar bazelneste caso?
YZ
1
Alguém já construiu em janelas de 64 bits com o MSYS2 ou o Visual Studio 2017 ommunity Edition? e pode compartilhar as etapas?
James Chang
1
Esse pacote de pip pode ser instalado em um ambiente conda na máquina local?
Dgketchum 04/04/19
3
Depois de mais de 3 horas (tempo decorrido: 11984.258s), recebi FAILED: Build did NOT complete successfully. Não é tão simples compilá-lo você mesmo.
imbrizi
o mesmo aqui. Minha construção também falhou e, nos logs, vejo que: cl: aviso de linha de comando D9002: ignorando a opção desconhecida '-mavx' cl: aviso de linha de comando D9002: ignorando a opção desconhecida '-mavx2' cl: aviso de linha de comando D9002: ignorando opção desconhecida '-mfma' cl: aviso de linha de comando D9002: ignorando opção desconhecida '-mfpmath = both' cl: aviso de linha de comando D9002: ignorando opção desconhecida '-msse4.2' cl: aviso de linha de comando D9002: ignorando opção desconhecida '- fno-strict-aliasing 'cl: aviso de linha de comando D9002: ignorando a opção desconhecida' -fexceptions 'para que essas opções não sejam conhecidas
Shilan
53

Deixe-me responder sua terceira pergunta primeiro:

Se você deseja executar uma versão auto-compilada dentro de um condda-env, é possível. Estas são as instruções gerais que eu corro para que o tensorflow seja instalado no meu sistema com instruções adicionais. Nota: Esta versão foi para uma versão AMD A10-7850 (verifique na sua CPU quais instruções são suportadas ... podem ser diferentes) executando o Ubuntu 16.04 LTS. Eu uso o Python 3.5 dentro do meu conda-env. O crédito vai para a página de instalação da fonte tensorflow e as respostas fornecidas acima.

git clone https://github.com/tensorflow/tensorflow 
# Install Bazel
# https://bazel.build/versions/master/docs/install.html
sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel
# Create your virtual env with conda.
source activate YOUR_ENV
pip install six numpy wheel, packaging, appdir
# Follow the configure instructions at:
# https://www.tensorflow.org/install/install_sources
# Build your build like below. Note: Check what instructions your CPU 
# support. Also. If resources are limited consider adding the following 
# tag --local_resources 2048,.5,1.0 . This will limit how much ram many
# local resources are used but will increase time to compile.
bazel build -c opt --copt=-mavx --copt=-msse4.1 --copt=-msse4.2  -k //tensorflow/tools/pip_package:build_pip_package
# Create the wheel like so:
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
# Inside your conda env:
pip install /tmp/tensorflow_pkg/NAME_OF_WHEEL.whl
# Then install the rest of your stack
pip install keras jupyter etc. etc.

Quanto à sua segunda pergunta:

Uma versão auto-compilada com otimizações vale bem o esforço, na minha opinião. Na minha configuração específica, os cálculos que costumavam levar de 560 a 600 segundos agora levam apenas cerca de 300 segundos! Embora os números exatos variem, acho que você pode esperar um aumento de velocidade de 35 a 50% em geral em sua configuração específica.

Por fim, sua 1ª pergunta:

Muitas das respostas já foram fornecidas acima. Para resumir: AVX , SSE4.1, SSE4.2 , MFA são tipos diferentes de conjuntos de instruções estendidos em CPUs X86. Muitos contêm instruções otimizadas para o processamento de operações com matriz ou vetor.

Destacarei meu próprio conceito errôneo para poupar algum tempo: não é que o SSE4.2 seja uma versão mais recente das instruções que substituem o SSE4.1. SSE4 = SSE4.1 (um conjunto de 47 instruções) + SSE4.2 (um conjunto de 7 instruções).

No contexto da compilação do tensorflow, se o seu computador oferecer suporte ao AVX2 e AVX e SSE4.1 e SSE4.2, você deverá colocar esses sinalizadores de otimização para todos. Não faça como eu fiz e siga o SSE4.2 pensando que é mais novo e deve substituir o SSE4.1. Isso está claramente errado! Eu tive que recompilar por causa daquilo que me custou uns bons 40 minutos.

Thornhale
fonte
onde o arquivo .whl é armazenado porque também quero instalá-lo no Windows?
WiLL_K
Ele é armazenado aqui: / tmp / tensorflow_pkg (em sua unidade linux)
Thornhale
Você pode me dizer quanto tempo isso levará. É cerca de 2 horas e meu laptop congelou. Sua ububtu correndo com 4GB de RAM e um processador i5
WiLL_K
Hmm, compilar o fluxo tensor leva muito tempo. No meu laptop com 8 GB, demorou cerca de 1,5 horas. No entanto, os tempos de instalação podem variar e serão fortemente influenciados pela RAM disponível. Sabe-se que essas compilações consomem muita RAM. Para reduzir os requisitos de recursos e talvez impedir os congelamentos, você pode executar a compilação adicionando o seguinte sinalizador após "bazel build": --local_resources 2048, .5,1.0 Isso geralmente ajuda nos congelamentos, mas provavelmente dobrará o tempo necessário para compilar. Por exemplo: Em um dos meus sistemas mais rápidos, a compilação sem o sinalizador levou 2200 segundos, com o sinalizador 4500!
Thornhale #
1
Em geral, eu achei que fazer ML no Windows é uma grande dor nas costas. Você acaba gastando muito tempo tentando fazer com que as coisas funcionem que apenas funcionam se você trabalha em um ambiente Linux. Acredito que o tensorflow precisa ser compilado para cada sistema operacional. Além disso, se você for aqui: link , verá que o tensorflow não é oficialmente suportado. Existe algum guia sobre como compilar o tensorflow para Windows aqui: link . Embora eu deva admitir, não tentei isso. Estou apenas usando o ubuntu.
Thornhale #
25

Estes são conjuntos de instruções de processamento de vetor SIMD .

O uso de instruções vetoriais é mais rápido para muitas tarefas; o aprendizado de máquina é uma tarefa dessas.

Citando os documentos de instalação do tensorflow :

Para ser compatível com o maior número possível de máquinas, o TensorFlow usa como padrão apenas as instruções SSE4.1 SIMD em máquinas x86. A maioria dos PCs e Macs modernos oferece suporte a instruções mais avançadas; portanto, se você estiver construindo um binário que estará executando apenas em sua própria máquina, poderá habilitá-los usando --copt=-march=nativeo comando bazel build.

Josh Bleecher Snyder
fonte
Por que o binário Tensorflow não usa o envio de CPU? Isso é pouco suportado pelo GCC?
21417 Chris Pushbullet
4
O link "documentos de instalação do tensorflow" não funciona. Então, eu estou querendo saber se esta resposta ainda é válida. Por favor responda!
Thornhale 29/03
@ChrisPushbullet, você pode compilar o Tensorflow para suportar vários recursos de computação diferentes para a GPU, mas eles aumentam muito o tamanho binário. Meu palpite é que o mesmo é para a CPU.
21418 Davidmh
22

Graças a todas essas respostas + algumas tentativas e erros, consegui instalá-lo em um Mac com clang. Então, basta compartilhar minha solução, caso seja útil para alguém.

  1. Siga as instruções em Documentação - Instalando o TensorFlow a partir de fontes

  2. Quando solicitado

    Especifique sinalizadores de otimização para usar durante a compilação quando a opção bazel "--config = opt" for especificada [O padrão é -march = native]

copie e cole esta sequência:

-mavx -mavx2 -mfma -msse4.2

(A opção padrão causou erros, o mesmo ocorreu com alguns dos outros sinalizadores. Não obtive erros com os sinalizadores acima. BTW, respondi na todas as outras perguntas)

Após a instalação, verifico uma aceleração de ~ 2x a 2,5x ao treinar modelos profundos em relação a outra instalação baseada nas rodas padrão - Instalação do TensorFlow no macOS

Espero que ajude

JARS
fonte
4
-march=nativedeve ser ainda melhor se o seu compilador o suportar corretamente. Também define -mtune=nativepara fazer boas escolhas de instruções para sua CPU. por exemplo, no Haswell e mais tarde, ele desativa -mavx256-split-unaligned-storee -mavx256-split-unaligned-load, que está ativado por padrão -mtune=generice prejudica o desempenho quando os dados não são conhecidos por estarem alinhados, mas acabam sendo em tempo de execução.
Peter Cordes
1
Obrigado! No meu caso, -march=nativecausou um erro, enquanto as outras opções não. Talvez seja o compilador específico. Eu estava compartilhando isso precisamente no caso de outras pessoas terem o mesmo obstáculo.
JARS
1
Que erro? A menos que o sistema de compilação engasgue com uma string =, ou você não esteja usando gccou clang, ele deve funcionar. E -mtune=native -mavx2 -mfma funciona para você? Ou -mtune=skylake? (Ou qualquer CPU que você tenha). Entre, -mavx2implica -mavxe -msse4.2. Ela não ferir a incluí-los todos em uma receita, e eu acho que torna mais fácil para as pessoas a deixar de fora aqueles sua CPU não suporta.
Peter Cordes
1
Editei a resposta principal desta pergunta há um tempo, mas não uso o tensorflow. Se há algo errado com -march=nativeo sistema de compilação, eu gostaria de saber. (E / ou você deve relatá-lo a montante, para que possam corrigir seus scripts de construção).
Peter Cordes
1
Muito obrigado pela sugestão. Para verificar isso, executei novamente o script .configure apenas -march=nativee este é o erro: / Users / jose / Documents / code / tmptensorflow / tensorflow / tensorflow / core / BUILD: 1442: 1: compilação C ++ de regra '// tensorflow / core: lib_internal_impl' falhou (Saída 1). No arquivo incluído no tensorflow / core / platform / denormal.cc: 37: /Library/Developer/CommandLineTools/usr/bin/../lib/clang/7.0.2/include/pmmintrin.h:28:2: erro: "Conjunto de instruções SSE3 não ativado" #erro "Conjunto de instruções SSE3 não ativado" usando o Apple LLVM versão 7.0.2 (clang-700.1.81)
JARS
7

Eu o instalei recentemente a partir da fonte e abaixo estão todas as etapas necessárias para instalá-lo da fonte com as instruções mencionadas disponíveis.

Outras respostas já descrevem por que essas mensagens são mostradas. Minha resposta fornece um passo a passo de como instalar a instalação, o que pode ajudar as pessoas a se esforçarem na instalação real, como eu fiz.

  1. Instale o Bazel

Faça o download de um de seus lançamentos disponíveis , por exemplo, 0.5.2 . Extraí-lo, vá para o diretório e configurá-lo: bash ./compile.sh. Copie o executável para /usr/local/bin:sudo cp ./output/bazel /usr/local/bin

  1. Instale o Tensorflow

Clone tensorflow: git clone https://github.com/tensorflow/tensorflow.git Vá para o diretório clonado para configurá-lo:./configure

Irá solicitar várias perguntas, abaixo eu sugeri a resposta para cada uma das perguntas, é claro que você pode escolher suas próprias respostas conforme preferir:

Using python library path: /usr/local/lib/python2.7/dist-packages
Do you wish to build TensorFlow with MKL support? [y/N] y
MKL support will be enabled for TensorFlow
Do you wish to download MKL LIB from the web? [Y/n] Y
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: 
Do you wish to use jemalloc as the malloc implementation? [Y/n] n
jemalloc disabled
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N
No Google Cloud Platform support will be enabled for TensorFlow
Do you wish to build TensorFlow with Hadoop File System support? [y/N] N
No Hadoop File System support will be enabled for TensorFlow
Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N] N
No XLA JIT support will be enabled for TensorFlow
Do you wish to build TensorFlow with VERBS support? [y/N] N
No VERBS support will be enabled for TensorFlow
Do you wish to build TensorFlow with OpenCL support? [y/N] N
No OpenCL support will be enabled for TensorFlow
Do you wish to build TensorFlow with CUDA support? [y/N] N
No CUDA support will be enabled for TensorFlow
  1. O pacote pip. Para construí-lo, você deve descrever quais instruções deseja (você sabe, aquelas que o Tensorflow informou que estão faltando).

Crie script pip: bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.1 --copt=-msse4.2 -k //tensorflow/tools/pip_package:build_pip_package

Crie o pacote pip: bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

Instale o pacote pip Tensorflow que você acabou de criar: sudo pip install /tmp/tensorflow_pkg/tensorflow-1.2.1-cp27-cp27mu-linux_x86_64.whl

Agora, da próxima vez que você iniciar o Tensorflow, ele não reclamará mais por falta de instruções.

Eduardo
fonte
4
Construir com just -c opt --copt=-march=nativedeve ser pelo menos tão bom quanto --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.1 --copt=-msse4.2. (Ambos silenciarão o aviso, mas -march=nativepodem tornar o código ainda mais rápido, ajustando especificamente a CPU no sistema em que você está construindo). Observe também que isso --copt=-mavx2 --copt=-mfmaimplica todas as opções anteriores do AVX e SSE; portanto, essa longa sequência de opções foi claramente escrita por alguém que não entende as opções do gcc.
Peter Cordes
1
@ PeterCordes, dê uma olhada nesta questão ( github.com/tensorflow/tensorflow/issues/7449 ), mesmo os mantenedores do bazel não foram assertivos por que march = native não funcionou como esperado. Como você parece "entender as opções do gcc", provavelmente poderá ajudá-los a corrigi-lo, pois eles marcaram o problema como precisando de "suporte da comunidade".
Eduardo
Obrigado, vou dar uma olhada ... Hmm, algumas pessoas dizendo que --copt=-mavx2não funcionaram. Se --copt=-mfma funcionar, --copt=-march=nativedeve funcionar, a menos que a análise do =seja um problema. Para o gcc / clang / icc, você definitivamente quer que o script de construção passe -march=nativepara o compilador. Fazer isso acontecer através de scripts de construção se torna o truque.
Peter Cordes
7

Este é o método mais simples. Apenas um passo.

Tem um impacto significativo na velocidade. No meu caso, o tempo necessário para uma etapa de treinamento quase caiu pela metade.

Consulte construções personalizadas do fluxo tensor

Sreeragh AR
fonte
2
Janelas constrói incluindo AVX2 github.com/fo40225/tensorflow-windows-wheel
Chris Moschini
@SereraghAR Seu método rebaixou meu tensorflow e keras.
KPMG
Certifique-se de instalar o arquivo correto de acordo com as versões TensorFlow, Python e HW.
Sreeragh AR 31/12/1918
A TensFlowversão do @SreeraghAR é 1.10.0 e está em uso MacOS Sierra. Ajude-me a encontrar o arquivo.
KPMG
Hmm .. Não foi possível encontrar um correspondente às suas versões. Alguém tem que construir uma roda personalizada. github.com/yaroslavvb/tensorflow-community-wheels A solução imediata pode estar usando o Tensorflow 1.9.0 #
Sreeragh AR
5

Compilei um pequeno script Bash para Mac (facilmente pode ser portado para Linux) para recuperar todos os recursos da CPU e aplicar alguns deles para construir o TF. Estou no mestre do TF e uso meio frequentemente (algumas vezes em um mês).

https://gist.github.com/venik/9ba962c8b301b0e21f99884cbd35082f

Alex Nikiforov
fonte
5

Para compilar o TensorFlow com SSE4.2 e AVX, você pode usar diretamente

bazel build --config = mkl --config = "opt" --copt = "- march = broadwell" --copt = "- O3" // tensorflow / tools / pip_package: build_pip_package

Fonte: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker/Dockerfile.devel-cpu-mkl

supervalor
fonte
1
Alguma coisa mudou recentemente? A última vez que verifiquei --copt="-march=native"foi comer o =. (E BTW, essas aspas não fazem nada, eles vão ser removido pelo shell antes de bazelvê sua linha de comando.)
Peter Cordes
4

2.0 SOLUÇÃO COMPATÍVEL:

Execute os comandos abaixo no Terminal (Linux / MacOS) ou no Prompt de Comando (Windows) para instalar o Tensorflow 2.0 usando o Bazel :

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow

#The repo defaults to the master development branch. You can also checkout a release branch to build:
git checkout r2.0

#Configure the Build => Use the Below line for Windows Machine
python ./configure.py 

#Configure the Build => Use the Below line for Linux/MacOS Machine
./configure
#This script prompts you for the location of TensorFlow dependencies and asks for additional build configuration options. 

#Build Tensorflow package

#CPU support
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package 

#GPU support
bazel build --config=opt --config=cuda --define=no_tensorflow_py_deps=true //tensorflow/tools/pip_package:build_pip_package
Suporte ao Tensorflow
fonte
2
Qual parte disso especifica -march=nativeou outras opções de GCC / clang? Não vejo nenhuma menção a AVX, FMA ou SSE4.2 nisso. (E é script de construção de Bazel ou Tensorflow ainda quebrado de uma forma que apenas opções como -mavxtrabalho, não -march=nativese é isso que o problema era realmente na resposta superior sobre esta questão?)
Peter Cordes
para suporte de CPU com a versão 2.1.0 da tf, a opção --config = opt não funcionou para mim, resolvi-a com --config = v2. Também é bom mencionar que a versão correta do bazel para compilá-lo é 29.0.
Tolik 16/03
2

Ao criar o TensorFlow a partir da fonte, você executará o configurescript. Uma das perguntas que o configurescript faz é a seguinte:

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]

O configurescript anexará os sinalizadores que você especificar ao comando bazel que cria o pacote pip do TensorFlow. Em termos gerais, você pode responder a esse prompt de duas maneiras:

  • Se você estiver construindo o TensorFlow no mesmo tipo de CPU que aquele em que executará o TensorFlow, deverá aceitar o padrão ( -march=native). Esta opção otimizará o código gerado para o tipo de CPU da sua máquina.
  • Se você estiver construindo o TensorFlow em um tipo de CPU, mas executará o TensorFlow em um tipo de CPU diferente, considere fornecer um sinalizador de otimização mais específico, conforme descrito na documentação do gcc .

Após configurar o TensorFlow conforme descrito na lista com marcadores anterior, você poderá criar o TensorFlow totalmente otimizado para a CPU de destino apenas adicionando o --config=optsinalizador a qualquer comando bazel em execução.

Barry Rosenberg
fonte
-1

Para ocultar esses avisos, você pode fazer isso antes do seu código real.

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf
javac
fonte
5
Silenciar a execução mais lenta do que poderia no seu hardware parece uma má ideia.
Peter Cordes
Concordo com @ Peter Cordes em geral - mas às vezes é bom (de maneira disciplinada e consciente) esconder os avisos e focar na tarefa.
Westsider #
2
@ westestsider: sim, poderia ser útil em alguns casos, mas essa não é uma boa resposta, a menos que aponte as implicações: há um desempenho real sendo perdido se você apenas ocultar os avisos em vez de recompilar. (Exceto, talvez, se você estiver usando uma GPU para o trabalho pesado, ele ainda pode alertar sobre as opções de CPU?)
Peter Cordes