SSE4.2 및 AVX 명령어로 Tensorflow를 컴파일하는 방법은 무엇입니까?


289

이것은 Tensorflow가 작동하는지 확인하기 위해 스크립트를 실행하여 수신 한 메시지입니다.

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

SSE4.2와 AVX를 언급 한 것으로 나타났습니다.

  1. SSE4.2와 AVX 란 무엇입니까?
  2. 이러한 SSE4.2 및 AVX는 어떻게 Tensorflow 작업에 대한 CPU 계산을 개선합니까?
  3. 두 라이브러리를 사용하여 Tensorflow를 컴파일하는 방법은 무엇입니까?

18
이 플래그 빌드로 같은 I bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package (-> 1.05 T 작전 / 초 0.35) 나에게 공식 릴리스에 비해 8K matmul CPU 속도 3 배 향상을 제공 제온 E5 v3에서
야로 슬라브 Bulatov

4
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.여기서 잊지 마세요 tensorflow.org/install/install_sources
Ivan Kush

4
이 명령 github.com/lakshayg/tensorflow-build를 지원하는 TF 용 컴파일 된 바이너리가 있습니다. 도움이 될 수 있습니다.
Lakshay Garg

1
@IvanKush가 해당 플래그를 추가했지만 여전히 tensorflow를 성공적으로 가져올 수 없습니다 (정밀하게 컴파일 됨). gcc 5로 성공적으로 컴파일했다면 다음을 참조하십시오 : stackoverflow.com/questions/45877158/…
anon01

1
Ubuntu 16.04를 사용하는 경우 github.com/mind/wheels
danqing

답변:


160

방금이 같은 문제에 부딪 쳤습니다 .Yaroslav Bulatov의 제안이 SSE4.2 지원을 다루지 않는 것처럼 보이면 --copt=-msse4.2충분할 것입니다. 결국, 나는 성공적으로 구축

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

경고 나 오류없이

모든 시스템에 가장 적합한 선택은 다음과 같습니다.

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

( 업데이트 : 빌드 스크립트에가-march=native 포함되어 있기 때문에 빌드 스크립트가 먹고있을 수 있습니다= .)

-mfpmath=bothclang이 아닌 gcc에서만 작동합니다. -mfpmath=sse아마 나쁘지 않더라도 아마 좋을 것이며 x86-64의 기본값입니다. 32 비트 빌드는 기본적으로 -mfpmath=387로 설정되므로 변경하면 32 비트에 도움이됩니다. 그러나 숫자 크 런칭에 고성능을 원하면 64 비트 바이너리를 빌드해야합니다.

나는 무엇 TensorFlow의 기본 모르겠어요 -O2또는 -O3이다. gcc -O3자동 벡터화를 포함한 전체 최적화가 가능하지만 때로는 코드 속도가 느려질 수 있습니다.


이 기능 : --coptforbazel build 는 C 및 C ++ 파일을 컴파일하기 위해 옵션을 gcc로 직접 전달합니다 (그러나 링크하지는 않으므로 파일 간 링크 시간 최적화를위한 다른 옵션이 필요합니다).

x86-64 gcc는 기본적으로 SSE2 또는 이전 SIMD 명령어 만 사용하므로 모든 x86-64 시스템 에서 바이너리를 실행할 수 있습니다 . ( https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html 참조 ) 그것은 당신이 원하는 것이 아닙니다. 이 바이너리는 빌드 한 시스템에서만 실행되므로 CPU가 실행할 수있는 모든 명령어를 활용하는 바이너리를 만들려고합니다.

-march=nativeCPU가 지원하는 모든 옵션을 활성화하므로 -mavx512f -mavx2 -mavx -mfma -msse4.2중복됩니다. (또한 -mavx2이미 -mavx및을 활성화 -msse4.2하므로 Yaroslav의 명령이 정상적으로 작동 했어야합니다). 또한 FMA와 같은 이러한 옵션 중 하나를 지원하지 않는 CPU를 사용하는 경우 -mfma잘못된 명령으로 결함이있는 이진 파일을 만들 수 있습니다.

TensorFlow의 ./configure기본값은 enabled 로 설정-march=native 되므로 컴파일러 옵션을 수동으로 지정하지 않아도됩니다.

-march=native-mtune=native있도록, 그것은 당신의 CPU에 대한 최적화 AVX 명령어의 순서가 정렬되지 않은 부하에 가장 적합한 같은 것들에 대한.

이것은 모두 gcc, clang 또는 ICC에 적용됩니다. (ICC의 경우 -xHOST대신 사용할 수 있습니다 -march=native.)


6
실제로 +1보다 효과적입니다! 그래서 그것은 -march=native직업이 아닌 것 같습니다 . 게다가 --config=cuda(CUDA 지원이 필요하지 않은 경우) 및 -k(컴파일 중 오류가 발생하지 않았으므로) 삭제도 작동합니다.
Marc

4
새 컴파일 버전을 제거하고 다시 설치 한 후에도 여전히 AVX, AVX2 및 FMA에 대한 경고가 표시됩니다.
Benedikt S. Vogler

5
macOS에서 --copt=-mfpmath=both작동 하도록 드롭 해야했습니다 clang. 결과 바이너리에 영향을 줍니까?
gc5

2
설명을 위해 : 구성 파일을 만들 때 ...-- 간단히 --copt = -march = native? 아니면 원래 게시물에 표시된 모든 최적화를 최적화에 넣을 수있는 옵션을 제공합니까?
Thornhale

1
'build'명령이 작업 공간에서만 지원된다는 오류가 발생합니까? 무엇을해야합니까?
겸손

133

먼저 이러한 경고가 표시 되는 이유에 대한 설명부터 시작하겠습니다 .


아마도 소스에서 TF를 설치하지 않았고 대신 TF를 사용했습니다 pip install tensorflow. 즉, 아키텍처에 최적화되지 않은 사전 빌드 된 (다른 사람이) 바이너리를 설치했음을 의미합니다. 그리고이 경고들은 당신에게 정확히 이것을 알려줍니다 : 당신의 아키텍쳐에서 무언가가 가능하지만 바이너리가 컴파일되지 않았기 때문에 사용되지 않을 것입니다. 다음은 문서 의 일부입니다 .

TensorFlow는 시작시 CPU에서 사용 가능한 최적화로 컴파일되었는지 확인합니다. 최적화가 포함되지 않은 경우 TensorFlow는 경고 (예 : AVX, AVX2 및 FMA 명령어는 포함되지 않음)를 발생시킵니다.

좋은 점은 TF로 배우거나 실험하고 싶을 것이므로 모든 것이 제대로 작동하고 걱정하지 않아도됩니다.


SSE4.2와 AVX 란 무엇입니까?

Wikipedia에는 SSE4.2AVX 에 대한 좋은 설명이 있습니다. 이 지식은 머신 러닝에 능숙 할 필요는 없습니다. 컴퓨터가 단일 명령에 대해 여러 데이터 포인트를 사용하여 자연적으로 병렬화 될 수있는 작업 (예 : 두 개의 배열 추가)을 수행 하기 위한 추가 명령 세트로 생각할 수 있습니다.

SSE와 AVX는 SIMD (단일 명령, 다중 데이터) 에 대한 추상적 인 아이디어를 구현 한 것입니다.

플린의 분류 체계에있는 병렬 컴퓨터 클래스. 여러 데이터 요소에 대해 동일한 작업을 동시에 수행하는 여러 처리 요소가있는 컴퓨터에 대해 설명합니다. 따라서 이러한 머신은 데이터 레벨 병렬 처리를 이용하지만 동시성은 아닙니다. 동시 (병렬) 계산이 있지만 주어진 순간에 단일 프로세스 (명령) 만 있습니다.

다음 질문에 대답하기에 충분합니다.


이러한 SSE4.2 및 AVX가 TF 작업의 CPU 계산을 개선하는 방법

다양한 벡터 (매트릭스 / 텐서) 연산을보다 효율적으로 계산할 수 있습니다. 이 슬라이드 에서 더 많은 것을 읽을 수 있습니다


두 라이브러리를 사용하여 Tensorflow를 컴파일하는 방법은 무엇입니까?

이 명령어를 활용하려면 컴파일 된 바이너리가 있어야합니다. 가장 쉬운 방법은 직접 컴파일하는 것 입니다. Mike와 Yaroslav가 제안했듯이 다음 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


4
이 명령 줄은 무엇을 의미합니까? bazel이 경우에 설치해야 합니까?
YZ

1
누구든지 MSYS2 또는 Visual Studio 2017 ommunity Edition을 사용하여 창 64 비트 아래에서 빌드합니까? 단계를 공유 할 수 있습니까?
James Chang

1
이 pip 패키지를 로컬 컴퓨터의 conda 환경에 설치할 수 있습니까?
dgketchum

3
3 시간 이상 (경과 시간 : 11984.258s) 후에 나는 FAILED: Build did NOT complete successfully. 직접 컴파일하는 것은 간단하지 않습니다.
imbrizi

여기에서도 마찬가지입니다. 내 빌드도 실패한 다음 로그에서 확인할 수 있습니다. cl : 명령 줄 경고 D9002 : 알 수없는 옵션 '-mavx'무시 cl : 명령 줄 경고 D9002 : 알 수없는 옵션 '-mavx2'무시 cl : 명령 줄 경고 D9002 : 무시 알 수없는 옵션 '-mfma'cl : 명령 줄 경고 D9002 : 알 수없는 옵션 '-mfpmath = both'cl ​​무시 : 명령 줄 경고 D9002 : 알 수없는 옵션 '-msse4.2'무시 cl : 명령 줄 경고 D9002 : 알 수없는 옵션 무시 '- fno-strict-aliasing 'cl : 명령 행 경고 D9002 : 알 수없는 옵션'-fexceptions '를 무시하므로 이러한 옵션을 알 수 없음
Shilan

53

세 번째 질문에 먼저 대답하겠습니다.

conda-env 내에서 자체 컴파일 버전을 실행하려는 경우 가능합니다. 다음은 추가 지침과 함께 시스템에 tensorflow를 설치하기 위해 실행하는 일반적인 지침입니다. 참고 :이 빌드는 Ubuntu 16.04 LTS를 실행하는 AMD A10-7850 빌드 (CPU에서 지원되는 지침을 확인하십시오. conda-env 내에서 Python 3.5를 사용합니다. 크레딧은 tensorflow 소스 설치 페이지와 위에 제공된 답변으로 이동합니다.

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.

두 번째 질문에 관해서 :

최적화 된 자체 컴파일 버전은 내 의견으로는 노력할 가치가 있습니다. 내 특정 설정에서 560-600 초가 걸리던 계산에는 이제 약 300 초가 걸립니다! 정확한 숫자는 다를 수 있지만 특정 설정에서 일반적으로 속도가 약 35-50 % 증가 할 것으로 생각합니다.

마지막으로 첫 번째 질문 :

많은 답변이 이미 위에 제공되었습니다. 요약하면 : AVX , SSE4.1, SSE4.2 , MFA는 X86 CPU에서 다른 종류의 확장 명령 세트입니다. 다수는 행렬 또는 벡터 연산 처리를위한 최적화 된 명령어를 포함합니다.

SSE4.2가 SSE4.1을 대체하는 최신 버전의 명령어가 아니라는 것은 아닙니다. SSE4 = SSE4.1 (47 명령어 세트) + SSE4.2 (7 명령어 세트).

tensorflow 컴파일 컨텍스트에서 컴퓨터가 AVX2 및 AVX, SSE4.1 및 SSE4.2를 지원하는 경우 최적화 플래그를 모두 배치해야합니다. 내가 한 것처럼하지 말고 SSE4.2와 함께 가면 SSE4.1이 더 새롭고 대체되어야한다고 생각합니다. 분명히 틀 렸습니다! 40 분의 비용이 소요되어 다시 컴파일해야했습니다.


.whl 파일은 어디에서 저장됩니까 coz Windows에도 설치하고 싶습니까?
WiLL_K

/ tmp / tensorflow_pkg (리눅스 드라이브에)
Thornhale

이 작업에 시간이 얼마나 걸리는지 말씀해 주시겠습니까? 약 2 시간이 걸리고 랩탑이 멈췄습니다. 4GB 램과 i5 프로세서를
갖춘 ububtu

흠, 텐서 흐름을 컴파일하는 데 시간이 오래 걸립니다. 8GB의 노트북에서는 약 1.5 시간이 걸렸습니다. 그러나 설치 시간이 다를 수 있으며 사용 가능한 램의 영향을 크게받습니다. 이 컴파일은 많은 RAM을 사용하는 것으로 알려져 있습니다. 리소스 요구 사항을 줄이고 중단을 방지하려면 "bazel build"다음에 다음 플래그를 추가하여 컴파일을 실행할 수 있습니다. --local_resources 2048, .5,1.0 종종 동결에 도움이되지만 컴파일 시간이 두 배가됩니다. 예를 들어, 내 빠른 시스템 중 하나에서 플래그없이 컴파일하는 데 플래그 2500 초가 걸렸습니다.
Thornhale

1
일반적으로 Windows에서 ML을 수행하는 것이 뒤에서 큰 고통이라는 것을 알았습니다. 당신은 리눅스 환경에서 일한다면 잘 작동하는 일을하려고 많은 시간을 소비하게됩니다. 각 OS마다 tensorflow를 컴파일해야한다고 생각합니다. 또한 여기에 가면 link : tensorflow가 공식적으로 지원되지 않는 것을 볼 수 있습니다. Windows 용 tensorflow를 컴파일하는 방법에 대한 몇 가지 안내서가 있습니다 : link . 인정해야하지만 시도하지는 않았습니다. 우분투를 사용하고 있습니다.
Thornhale

25

이것들은 SIMD 벡터 처리 명령 세트 입니다.

많은 작업에서 벡터 명령을 사용하는 것이 더 빠릅니다. 기계 학습은 그러한 작업입니다.

tensorflow 설치 문서 인용 :

가능한 광범위한 기계와 호환되도록 TensorFlow는 기본적으로 x86 기계에서 SSE4.1 SIMD 명령 만 사용합니다. 대부분의 최신 PC 및 Mac은 고급 지침을 지원하므로 자신의 컴퓨터에서만 실행되는 바이너리를 빌드하는 경우 --copt=-march=nativebazel build 명령에서이를 사용하여 활성화 할 수 있습니다 .


Tensorflow 바이너리가 CPU 디스패치를 ​​사용하지 않는 이유는 무엇입니까? GCC가 제대로 지원하지 않습니까?
Chris Pushbullet 2012

4
"tensorflow 설치 문서"링크가 작동하지 않습니다. 이 답변이 여전히 유효한지 궁금합니다. 응답하십시오!
Thornhale

@ChrisPushbullet GPU에 대해 여러 가지 컴퓨팅 기능을 지원하기 위해 Tensorflow를 컴파일 할 수 있지만 바이너리 크기가 많이 증가합니다. 내 생각 엔 CPU도 마찬가지입니다.
Davidmh

22

이 모든 답글과 일부 시행 착오 덕분에와 함께 Mac에 설치했습니다 clang. 그래서 누군가에게 유용 할 경우를 대비하여 내 솔루션을 공유하십시오.

  1. 문서-소스에서 TensorFlow 설치 에 대한 지시 사항을 따르십시오.

  2. 메시지가 표시되면

    bazel 옵션 "--config = opt"가 지정된 경우 컴파일 중에 사용할 최적화 플래그를 지정하십시오. [기본값은 -march = native]

그런 다음이 문자열을 복사하여 붙여 넣습니다.

-mavx -mavx2 -mfma -msse4.2

(기본 옵션으로 인해 오류가 발생하여 다른 플래그 중 일부가 발생했습니다. 위 플래그에 오류가 없습니다. BTW n다른 모든 질문에 답했습니다)

설치 후 기본 휠을 기반으로 다른 설치와 관련하여 딥 모델을 훈련 할 때 ~ 2x ~ 2.5x 속도 향상을 확인합니다 -macOS에 TensorFlow 설치

그것이 도움이되기를 바랍니다.


4
-march=native컴파일러가 올바르게 지원하면 더 좋을 것입니다. 또한 -mtune=nativeCPU에 적합한 명령을 선택하도록 설정 되어 있습니다. 하 스웰에 예를 들면 이상이 비활성화 -mavx256-split-unaligned-store-mavx256-split-unaligned-load위해 기본적으로 사용하도록 설정되어 있으며, -mtune=generic데이터가 정렬되는 것으로 알려져 있지만, 실행시에 밝혀되지 않은 상처 성능을 제공합니다.
Peter Cordes

1
감사! 내 경우 -march=native에는 다른 옵션이 아닌 동안 오류가 발생했습니다. 아마도 특정 컴파일러 일 것입니다. 다른 사람들이 동일한 장애물을 경험 한 경우를 대비하여 이것을 정확하게 공유했습니다.
JARS

1
무슨 오류? 빌드 시스템이와 함께 문자열에 질식하지 않는 한 =그것에서, 또는 사용하지 않는 gccclang, 그것을 작동합니다. 그리고 -mtune=native -mavx2 -mfma 당신을 위해 일합니까? 아니면 -mtune=skylake? (또는 당신이 가지고있는 CPU). BTW, -mavx2의미 -mavx하고 -msse4.2. 그것들을 모두 레시피에 포함시키는 것은 아프지 않으며 사람들이 CPU가 지원하지 않는 것들을 더 쉽게 떠날 수 있다고 생각합니다.
Peter Cordes

1
나는이 질문에 대한 대답을 얼마 전에 편집했지만 tensorflow를 직접 사용하지는 않습니다. -march=native빌드 시스템에 문제가 있다면 알고 싶습니다. (및 / 또는 빌드 스크립트를 수정할 수 있도록 업스트림에보고해야합니다).
Peter Cordes

1
제안 해 주셔서 감사합니다. 확인하기 위해 .configure 스크립트 만 다시 실행했으며 이것이 -march=native오류입니다 : / Users / jose / Documents / code / tmptensorflow / tensorflow / tensorflow / core / BUILD : 1442 : 1 : C ++ 컴파일 '// tensorflow / core : lib_internal_impl'규칙이 실패했습니다 (종료 1). tensorflow / core / platform / denormal.cc : 37에 포함 된 파일에서 : /Library/Developer/CommandLineTools/usr/bin/../lib/clang/7.0.2/include/pmmintrin.h:28:2 : 오류 : Apple LLVM 버전 7.0.2 (clang-700.1.81)를 사용한 "SSE3 명령 세트가 활성화되지 않았습니다"#error "SSE3 명령 세트가 활성화되지 않았습니다"
JARS

7

최근에 소스에서 설치했으며 다음 지침에 따라 소스에서 설치하는 데 필요한 모든 단계가 아래에 나와 있습니다.

다른 답변은 이미 해당 메시지가 표시되는 이유를 설명합니다. 내 대답은 isnstall 방법에 대한 단계별 지침을 제공하므로 사람들이 실제 설치에 어려움을 겪을 수 있습니다.

  1. Bazel 설치

사용 가능한 릴리스 중 하나 ( 예 : 0.5.2) 에서 다운로드하십시오 . 압축을 풀고 디렉토리로 이동하여 구성하십시오 bash ./compile.sh.. 실행 파일을 /usr/local/bin다음 위치에 복사하십시오 .sudo cp ./output/bazel /usr/local/bin

  1. Tensorflow 설치

복제 tensorflow : git clone https://github.com/tensorflow/tensorflow.git 복제 된 디렉토리로 이동하여 구성하십시오../configure

몇 가지 질문이 표시됩니다. 각 질문에 대한 답변을 제안했습니다. 물론 원하는대로 자신의 답변을 선택할 수 있습니다.

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. pip 패키지 그것을 구축하려면 원하는 지시 사항을 설명해야합니다 (Tensorflow가 누락 사실을 알았습니다).

핍 스크립트 작성 : 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

pip 패키지 빌드 : bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

방금 빌드 한 Tensorflow pip 패키지를 설치하십시오. sudo pip install /tmp/tensorflow_pkg/tensorflow-1.2.1-cp27-cp27mu-linux_x86_64.whl

이제 다음에 Tensorflow를 시작할 때 누락 된 지침에 대해 더 이상 불평하지 않습니다.


4
그냥 구축하는 것만 -c opt --copt=-march=native큼 좋습니다 --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.1 --copt=-msse4.2. (둘 다 경고를 끄지 만 -march=native빌드중인 시스템의 CPU에 맞게 특별히 조정하면 코드가 더 빨라질 수 있습니다). 또한 --copt=-mavx2 --copt=-mfma이전의 모든 AVX 및 SSE 옵션 을 의미하므로 gcc 옵션을 이해하지 못하는 사람이이 긴 문자열 옵션을 명확하게 작성했습니다.
Peter Cordes

1
@PeterCordes는이 문제를 살펴보십시오 ( github.com/tensorflow/tensorflow/issues/7449 ), bazel 관리자조차도 march = native가 예상대로 작동하지 않는 이유는 단호하지 않았습니다. "gcc 옵션 이해"와 같이 문제를 "커뮤니티 지원"이 필요하다고 표시 했으므로이를 수정하도록 도울 수 있습니다.
Eduardo

고마워, 내가 살펴볼 게 ... 흠, 일부 사람들 --copt=-mavx2은 작동하지 않는다고 말합니다 . 경우 --copt=-mfma 작품, --copt=-march=native작동합니다,의 구문 분석하지 않는 것은 =문제이다. gcc / clang / icc의 경우, 빌드 스크립트가 결국 -march=native컴파일러에 전달되기를 원합니다 . 빌드 스크립트를 통해 그러한 일을하는 것은 속임수가됩니다.
Peter Cordes

7

이것이 가장 간단한 방법입니다. 한 걸음 만

속도에 큰 영향을 미칩니다. 제 경우에는 훈련 단계에 걸리는 시간이 거의 반으로 줄었습니다.

tensorflow의 사용자 정의 빌드 참조


2

@SreeraghAR 당신의 방법은 내 tensorflow와 keras를 다운 그레이드했습니다.
KPMG

TensorFlow, Python 버전 및 HW에 따라 올바른 파일을 설치하십시오.
Sreeragh AR

@SreeraghAR TensFlow버전은 1.10.0이며를 사용 MacOS Sierra합니다. 파일을 찾도록 도와주세요.
KPMG

흠 .. 귀하의 버전에 해당하는 제품을 찾을 수 없습니다. 어떤 것은 커스텀 휠을 만들어야합니다. github.com/yaroslavvb/tensorflow-community-wheels 즉시 솔루션은 Tensorflow 1.9.0 사용할 수 있습니다
Sreeragh AR


5

SSE4.2 및 AVX로 TensorFlow를 컴파일하려면 직접 사용할 수 있습니다

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

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


1
최근에 뭔가 바뀌 었습니까? 내가 확인한 마지막 --copt="-march=native"=. (그리고 BTW, 그 큰 따옴표는 아무 것도하지 않습니다; bazel명령 행을보기 전에 쉘에 의해 제거 될 것 입니다.)
Peter Cordes

4

2.0 호환 솔루션 :

Bazel을 사용하여 Tensorflow 2.0을 설치하려면 터미널 (Linux / MacOS) 또는 명령 프롬프트 (Windows)에서 아래 명령을 실행하십시오 .

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

2
이 중 어느 부분 -march=native이나 다른 GCC / clang 옵션을 지정합니까? AVX, FMA 또는 SSE4.2에 대한 언급이 없습니다. (그리고 Bazel 또는 Tensorflow의 빌드 스크립트는 여전히 -mavx작동 과 같은 옵션만이 아닌 방식으로 고장 났 -march=native습니까? 그것이 문제가
실제로이

tf 버전 2.1.0의 CPU 지원의 경우 --config = opt 옵션이 작동하지 않습니다. --config = v2로 해결했습니다. 또한 올바른 bazel 버전을 빌드하는 데 29.0이라는 점이 언급되어 있습니다.
Tolik

2

소스에서 TensorFlow를 빌드 할 때 configure스크립트를 실행합니다 . configure스크립트가 묻는 질문 중 하나는 다음과 같습니다.

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

configure스크립트는 플래그 (들) 당신이 TensorFlow 핍 패키지를 빌드 bazel 명령에 지정을 첨부합니다. 대체로 다음 두 가지 방법 중 하나로이 프롬프트에 응답 할 수 있습니다.

  • TensorFlow를 실행할 CPU 유형과 동일한 유형의 CPU 유형에 TensorFlow를 빌드하는 경우 기본값 (-march=native )을 . 이 옵션은 머신의 CPU 유형에 맞게 생성 된 코드를 최적화합니다.
  • 한 CPU 유형에서 TensorFlow를 빌드하지만 다른 CPU 유형에서 TensorFlow를 실행하는 경우 gcc 문서에 설명 된대로보다 구체적인 최적화 플래그를 제공하는 것을 고려 하십시오 .

앞의 글 머리표 목록에 설명 된대로 TensorFlow를 구성한 후에 --config=opt는 실행중인 bazel 명령에 플래그를 추가하여 대상 CPU에 대해 완전히 최적화 된 TensorFlow를 빌드 할 수 있습니다 .


-1

이러한 경고를 숨기려면 실제 코드보다 먼저 할 수 있습니다.

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf

5
하드웨어에서보다 느리게 실행되는 것은 나쁜 생각처럼 보입니다.
Peter Cordes

나는 일반적으로 @Peter Cordes에 동의하지만 때로는 경고를 숨기고 작업에 집중하는 것이 좋습니다 (훈련되고 신중한 태도로).
westsider

2
@westsider : 예, 경우에 따라 유용 할 수 있지만 의미를 나타내지 않는 한 좋은 대답은 아닙니다. 재 컴파일하는 대신 경고를 숨기면 실제 성능이 손실됩니다. (거의 리프팅에 GPU를 사용하는 경우를 제외하고는 여전히 CPU 옵션에 대해 경고 할 수 있습니까?)
Peter Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.