Làm cách nào để biên dịch Tensorflow với hướng dẫn SSE4.2 và AVX?


289

Đây là thông báo nhận được từ việc chạy tập lệnh để kiểm tra xem Tensorflow có hoạt động không:

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

Tôi nhận thấy rằng nó đã đề cập đến SSE4.2 và AVX,

  1. SSE4.2 và AVX là gì?
  2. Làm thế nào để các SSE4.2 và AVX này cải thiện tính toán CPU cho các tác vụ Tensorflow.
  3. Làm thế nào để biên dịch Tensorflow bằng hai thư viện?

18
Tôi muốn xây dựng với những lá cờ bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package Mở Xeon E5 v3 mà mang lại cho tôi 3x cải thiện 8k tốc độ CPU matmul so với việc phát hành chính thức (0,35 -> 1,05 T ops / giây)
Yaroslav Bulatov

4
và đừng quên 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.từ đây tenorflow.org/install/install_source
Ivan Kush

4
Tôi có một số tệp nhị phân được biên dịch cho TF hỗ trợ các hướng dẫn này github.com/lakshayg/tensorflow-build . Bạn có thể thấy điều này hữu ích.
Lakshay Garg

1
@IvanKush đã thêm cờ đó, tôi vẫn không thể nhập thành công tenorflow (biên dịch tốt). Nếu bạn đã biên dịch thành công với gcc 5, vui lòng xem: stackoverflow.com/questions/45877158/iêu
anon01

1
Nếu sử dụng Ubuntu 16.04, chúng tôi có xây dựng cho hầu hết các biến thể bạn có thể sẽ cần ít github.com/mind/wheels
Danqing

Câu trả lời:


160

Tôi vừa gặp phải vấn đề tương tự, có vẻ như đề xuất của Yaroslav Bulatov không bao gồm hỗ trợ SSE4.2, thêm vào --copt=-msse4.2sẽ đủ. Cuối cùng, tôi đã xây dựng thành công với

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

mà không nhận được bất kỳ cảnh báo hoặc lỗi.

Có lẽ sự lựa chọn tốt nhất cho bất kỳ hệ thống nào là:

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

( Cập nhật: tập lệnh xây dựng có thể đang ăn-march=native , có thể vì nó chứa một= .)

-mfpmath=bothChỉ hoạt động với gcc, không kêu. -mfpmath=ssecó lẽ cũng tốt như vậy, nếu không tốt hơn và là mặc định cho x86-64. Xây dựng 32 bit mặc định -mfpmath=387, do đó, việc thay đổi sẽ giúp ích cho 32 bit. (Nhưng nếu bạn muốn hiệu suất cao cho việc bẻ số, bạn nên xây dựng các tệp nhị phân 64 bit.)

Tôi không chắc chắn những gì mặc định TensorFlow cho -O2hay -O3là. gcc -O3cho phép tối ưu hóa hoàn toàn bao gồm tự động vector hóa, nhưng điều đó đôi khi có thể làm cho mã chậm hơn.


Điều này làm gì: --coptđểbazel build chuyển một tùy chọn trực tiếp đến gcc để biên dịch tệp C và C ++ (nhưng không liên kết, vì vậy bạn cần một tùy chọn khác để tối ưu hóa thời gian liên kết tệp chéo)

x86-64 gcc mặc định chỉ sử dụng các hướng dẫn SIMD SSE2 hoặc cũ hơn, do đó bạn có thể chạy các nhị phân trên bất kỳ hệ thống x86-64 nào . (Xem https://gcc.gnu.org/onlinesocs/gcc/x86-Options.html ). Đó không phải là những gì bạn muốn. Bạn muốn tạo một nhị phân tận dụng tất cả các hướng dẫn mà CPU của bạn có thể chạy, bởi vì bạn chỉ chạy nhị phân này trên hệ thống nơi bạn xây dựng nó.

-march=nativecho phép tất cả các tùy chọn mà CPU của bạn hỗ trợ, do đó, nó làm cho -mavx512f -mavx2 -mavx -mfma -msse4.2dự phòng. (Ngoài ra, -mavx2đã cho phép -mavx-msse4.2, do đó, lệnh của Yaroslav sẽ ổn). Ngoài ra, nếu bạn đang sử dụng CPU không hỗ trợ một trong các tùy chọn này (như FMA), việc sử dụng -mfmasẽ tạo ra một nhị phân có lỗi với các hướng dẫn bất hợp pháp.

Mặc ./configuređịnh của TensorFlow để kích hoạt-march=native , vì vậy sử dụng nên tránh việc chỉ định các tùy chọn trình biên dịch theo cách thủ công.

-march=nativecho phép -mtune=native, để nó tối ưu hóa cho CPU của bạn cho những thứ như chuỗi lệnh AVX nào là tốt nhất cho tải không được phân bổ.

Tất cả điều này áp dụng cho gcc, clang hoặc ICC. (Đối với ICC, bạn có thể sử dụng -xHOSTthay vì -march=native.)


6
Nó thực sự hoạt động> +1! Vì vậy, nó dường như -march=nativekhông phải là công việc của nó. Ngoài ra, việc bỏ --config=cuda(nếu không cần hỗ trợ CUDA) và -k(vì không có lỗi xảy ra trong quá trình biên dịch) cũng hoạt động.
Marc

4
Sau khi gỡ cài đặt và cài đặt lại phiên bản biên dịch mới, tôi vẫn nhận được cảnh báo cho AVX, AVX2 và FMA.
Benedikt S. Vogler

5
Tôi đã phải bỏ --copt=-mfpmath=bothđể làm cho nó hoạt động với clangtrên macOS. Nó có ảnh hưởng đến nhị phân kết quả?
gc5

2
Chỉ để làm rõ: khi tôi tạo tệp cấu hình .... tôi có sử dụng đơn giản --copt = -march = bản địa không? Hoặc tôi có đưa vào tất cả những tối ưu hóa được thấy trong các bài viết gốc ở nơi tôi có tùy chọn để đưa vào tối ưu hóa không?
Thornhale

1
Tôi gặp lỗi khi nói rằng lệnh 'build' chỉ được hỗ trợ từ không gian làm việc? Phải làm sao?
khiêm tốn

133

Hãy bắt đầu với lời giải thích tại sao bạn thấy những cảnh báo này ở nơi đầu tiên .


Hầu hết có lẽ bạn chưa cài đặt TF từ nguồn và thay vào đó nó sử dụng một cái gì đó như pip install tensorflow. Điều đó có nghĩa là bạn đã cài đặt các tệp nhị phân dựng sẵn (bởi người khác) không được tối ưu hóa cho kiến ​​trúc của bạn. Và những cảnh báo này cho bạn biết chính xác điều này: một cái gì đó có sẵn trên kiến ​​trúc của bạn, nhưng nó sẽ không được sử dụng vì nhị phân không được biên dịch cùng với nó. Đây là một phần từ tài liệu .

TensorFlow kiểm tra khi khởi động xem nó đã được biên dịch với các tối ưu hóa có sẵn trên CPU chưa. Nếu không bao gồm các tối ưu hóa, TensorFlow sẽ phát ra các cảnh báo, ví dụ như các lệnh AVX, AVX2 và FMA không được bao gồm.

Điều tốt là hầu hết có lẽ bạn chỉ muốn tìm hiểu / thử nghiệm với TF để mọi thứ sẽ hoạt động tốt và bạn không nên lo lắng về điều đó


SSE4.2 và AVX là gì?

Wikipedia có một lời giải thích tốt về SSE4.2AVX . Kiến thức này không bắt buộc phải giỏi về máy học. Bạn có thể nghĩ về chúng như một tập hợp một số hướng dẫn bổ sung để máy tính sử dụng nhiều điểm dữ liệu theo một lệnh để thực hiện các thao tác có thể được song song tự nhiên (ví dụ: thêm hai mảng).

Cả SSE và AVX đều đang triển khai một ý tưởng trừu tượng về SIMD (Hướng dẫn đơn, nhiều dữ liệu), đó là

một lớp máy tính song song trong phân loại của Flynn. Nó mô tả các máy tính có nhiều phần tử xử lý thực hiện cùng một hoạt động trên nhiều điểm dữ liệu cùng một lúc. Do đó, các máy như vậy khai thác song song mức dữ liệu, nhưng không đồng thời: có các tính toán (song song) đồng thời, nhưng chỉ có một quy trình (hướng dẫn) duy nhất tại một thời điểm nhất định

Điều này là đủ để trả lời câu hỏi tiếp theo của bạn.


Làm thế nào để các SSE4.2 và AVX này cải thiện tính toán CPU cho các tác vụ TF

Chúng cho phép tính toán hiệu quả hơn các hoạt động vectơ (ma trận / tenor) khác nhau. Bạn có thể đọc thêm trong các slide này


Làm thế nào để biên dịch Tensorflow bằng hai thư viện?

Bạn cần phải có một tệp nhị phân được biên dịch để tận dụng các hướng dẫn này. Cách dễ nhất là tự biên dịch nó . Như Mike và Yaroslav đã đề xuất, bạn có thể sử dụng lệnh bazel sau đây

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
Dòng lệnh này có nghĩa là gì? Và tôi có nên cài đặt bazeltrong trường hợp này?
YZ

1
Có ai từng xây dựng dưới cửa sổ 64 bit với MSYS2 hoặc Visual Studio 2017 ommunity Edition không? và có thể chia sẻ các bước?
James Chang

1
Gói pip này có thể được cài đặt vào môi trường conda trên máy cục bộ không?
dgketchum

3
Sau hơn 3 giờ (Thời gian đã trôi qua: 11984.258s) tôi đã nhận được FAILED: Build did NOT complete successfully. Nó không phải là đơn giản để tự biên dịch nó.
imbrizi

tương tự ở đây Bản dựng của tôi cũng thất bại và sau đó trong nhật ký tôi có thể thấy rằng: cl: Cảnh báo dòng lệnh D9002: bỏ qua tùy chọn không xác định '-mavx' cl: Cảnh báo dòng lệnh D9002: bỏ qua tùy chọn không xác định '-mavx2' cl: Cảnh báo dòng lệnh D9002: bỏ qua tùy chọn không xác định '-mfma' cl: Cảnh báo dòng lệnh D9002: bỏ qua tùy chọn không xác định '-mfpmath = cả' cl: Cảnh báo dòng lệnh D9002: bỏ qua tùy chọn không xác định '-msse4.2' cl: Cảnh báo dòng lệnh D9002: bỏ qua tùy chọn không xác định '- fno -rict-aliasing 'cl: Cảnh báo dòng lệnh D9002: bỏ qua tùy chọn không xác định' -fexceptions 'để các tùy chọn này không được biết đến
Shilan

53

Hãy để tôi trả lời câu hỏi thứ 3 của bạn trước:

Nếu bạn muốn chạy một phiên bản tự biên dịch trong một conda-env, bạn có thể. Đây là những hướng dẫn chung mà tôi chạy để có được tenorflow để cài đặt trên hệ thống của mình với các hướng dẫn bổ sung. Lưu ý: Bản dựng này dành cho bản dựng AMD A10-7850 (kiểm tra CPU của bạn để biết hướng dẫn nào được hỗ trợ ... có thể khác) chạy Ubuntu 16.04 LTS. Tôi sử dụng Python 3.5 trong conda-env của tôi. Tín dụng vào trang cài đặt nguồn căng và các câu trả lời được cung cấp ở trên.

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.

Như câu hỏi thứ 2 của bạn:

Một phiên bản tự biên dịch với tối ưu hóa là rất đáng nỗ lực theo ý kiến ​​của tôi. Trên thiết lập cụ thể của tôi, các tính toán trước đây chỉ mất 560-600 giây chỉ mất khoảng 300 giây! Mặc dù con số chính xác sẽ khác nhau, tôi nghĩ bạn có thể mong đợi về việc tăng tốc độ 35-50% nói chung trên thiết lập cụ thể của bạn.

Cuối cùng là câu hỏi đầu tiên của bạn:

Rất nhiều câu trả lời đã được cung cấp ở trên. Để tóm tắt: AVX , SSE4.1, SSE4.2 , MFA là các loại tập lệnh mở rộng khác nhau trên CPU X86. Nhiều chứa hướng dẫn tối ưu hóa để xử lý ma trận hoặc hoạt động vector.

Tôi sẽ nêu bật quan niệm sai lầm của riêng tôi để hy vọng giúp bạn tiết kiệm thời gian: Không phải SSE4.2 là phiên bản mới hơn của hướng dẫn thay thế SSE4.1. SSE4 = SSE4.1 (một bộ 47 hướng dẫn) + SSE4.2 (một bộ 7 hướng dẫn).

Trong bối cảnh biên dịch dòng chảy, nếu máy tính của bạn hỗ trợ AVX2 và AVX và SSE4.1 và SSE4.2, bạn nên đặt các cờ tối ưu hóa đó cho tất cả. Đừng làm như tôi đã làm và chỉ đi với SSE4.2 nghĩ rằng nó mới hơn và nên áp dụng SSE4.1. Đó rõ ràng là SAU! Tôi đã phải biên dịch lại vì điều đó khiến tôi mất 40 phút.


nơi tập tin .whl được lưu trữ vì tôi cũng muốn cài đặt nó trên windows?
WiLL_K

Nó được lưu trữ ở đây: / tmp / tenorflow_pkg (trên ổ đĩa linux của bạn)
Thornhale

Bạn có thể cho tôi biết bao nhiêu thời gian này sẽ mất. Đó là khoảng 2 giờ và máy tính xách tay của tôi đóng băng. Nó chạy ububtu với 4gb ram và bộ xử lý i5
WiLL_K

Hmm, biên dịch tenorflow mất nhiều thời gian. Trên máy tính xách tay của tôi với 8 gb, mất khoảng 1,5 giờ. Tuy nhiên, thời gian cài đặt của bạn có thể thay đổi và sẽ bị ảnh hưởng nhiều bởi ram có sẵn. Những phần tổng hợp này được biết là mất rất nhiều RAM. Để giảm yêu cầu tài nguyên và có thể ngăn chặn việc đóng băng, bạn có thể chạy phần biên dịch bằng cách thêm cờ sau sau "bazel build": --local_resource 2048, .5,1.0 Điều này thường giúp đóng băng nhưng có thể sẽ tăng gấp đôi thời gian để biên dịch. Ví dụ: Trên một trong những hệ thống nhanh hơn của tôi, việc biên dịch mà không có cờ mất 2200 giây, với cờ 4500!
Thornhale

1
Nói chung, tôi thấy làm ML trên windows là một nỗi đau lớn ở phía sau. Cuối cùng, bạn dành rất nhiều thời gian để cố gắng làm cho mọi thứ hoạt động chỉ hoạt động nếu bạn làm việc trong môi trường linux. Tôi tin rằng tenorflow cần được biên dịch cho mỗi HĐH. Hơn nữa, nếu bạn vào đây: link , bạn sẽ thấy rằng tenorflow không được hỗ trợ chính thức. Có tồn tại một số hướng dẫn về cách biên dịch tenorflow cho Windows tại đây: link . Mặc dù tôi phải thừa nhận, tôi đã không thử điều đó. Tôi chỉ đang sử dụng Ubuntu.
Thornhale

25

Đây là các bộ hướng dẫn xử lý vector SIMD .

Sử dụng các hướng dẫn vector nhanh hơn cho nhiều nhiệm vụ; học máy là một nhiệm vụ như vậy.

Trích dẫn các tài liệu cài đặt tenorflow :

Để tương thích với càng nhiều máy càng tốt, TensorFlow mặc định chỉ sử dụng các hướng dẫn SIMD SSE4.1 trên các máy x86. Hầu hết các PC và Mac hiện đại đều hỗ trợ các hướng dẫn nâng cao hơn, vì vậy nếu bạn đang xây dựng một hệ nhị phân mà bạn sẽ chỉ chạy trên máy của chính mình, bạn có thể kích hoạt chúng bằng cách sử dụng --copt=-march=nativetrong lệnh xây dựng bazel của mình.


Tại sao nhị phân Tensorflow không sử dụng CPU? Điều đó có được hỗ trợ kém bởi GCC không?
Chris PushbONS

4
Liên kết "tài liệu cài đặt tenorflow" không hoạt động. Vì vậy, tôi tự hỏi nếu câu trả lời này vẫn còn hiệu lực. Xin vui lòng trả lời!
Thornhale

@ChrisPushbONS bạn có thể biên dịch Tensorflow để hỗ trợ một số khả năng tính toán khác nhau cho GPU, nhưng chúng làm tăng kích thước nhị phân rất nhiều. Tôi đoán là tương tự cho CPU.
Davidmh

22

Nhờ tất cả các phản hồi này + một số bản dùng thử và lỗi, tôi đã quản lý để cài đặt nó trên máy Mac clang. Vì vậy, chỉ chia sẻ giải pháp của tôi trong trường hợp nó hữu ích cho ai đó.

  1. Thực hiện theo các hướng dẫn về Tài liệu - Cài đặt TensorFlow từ các nguồn

  2. Khi được nhắc

    Vui lòng chỉ định các cờ tối ưu hóa để sử dụng trong quá trình biên dịch khi tùy chọn bazel "--config = opt" được chỉ định [Mặc định là -march = tự nhiên]

sau đó sao chép-dán chuỗi này:

-mavx -mavx2 -mfma -msse4.2

(Tùy chọn mặc định gây ra lỗi, một số cờ khác cũng vậy. Tôi không gặp lỗi với các cờ trên. BTW Tôi đã trả lời ntất cả các câu hỏi khác)

Sau khi cài đặt, tôi xác minh tăng tốc ~ 2x đến 2.5x khi đào tạo các mô hình sâu liên quan đến cài đặt khác dựa trên các bánh xe mặc định - Cài đặt TensorFlow trên macOS

Hy vọng nó giúp


4
-march=nativesẽ tốt hơn nữa nếu trình biên dịch của bạn hỗ trợ chính xác. Nó cũng thiết lập -mtune=nativeđể đưa ra các lựa chọn hướng dẫn tốt cho CPU của bạn. ví dụ như trên Haswell và sau đó, nó vô hiệu hóa -mavx256-split-unaligned-store-mavx256-split-unaligned-load, theo mặc định -mtune=genericvà làm giảm hiệu suất khi dữ liệu không được biết là được căn chỉnh nhưng hóa ra là vào thời gian chạy.
Peter Cordes

1
Cảm ơn! Trong trường hợp của tôi -march=nativegây ra lỗi trong khi các tùy chọn khác thì không. Có lẽ đó là trình biên dịch cụ thể. Tôi đã chia sẻ điều này một cách chính xác chỉ trong trường hợp những người khác trải qua cùng một rào cản.
JARS

1
Lỗi gì? Trừ khi hệ thống xây dựng cuộn cảm trên một chuỗi có =trong đó, hoặc bạn không sử dụng gcchoặc clang, nó sẽ hoạt động. Và có -mtune=native -mavx2 -mfma làm việc cho bạn? Hay là -mtune=skylake? (Hoặc bất cứ CPU nào bạn có). BTW, -mavx2ngụ ý -mavx-msse4.2. Sẽ không hại gì khi đưa tất cả chúng vào một công thức, và tôi đoán giúp mọi người dễ dàng loại bỏ những thứ mà CPU của họ không hỗ trợ.
Peter Cordes

1
Tôi đã chỉnh sửa câu trả lời hàng đầu cho câu hỏi này một thời gian trước đây, nhưng bản thân tôi không sử dụng tenorflow. Nếu có gì đó không ổn với -march=nativehệ thống xây dựng của nó, tôi muốn biết. (Và / hoặc bạn nên báo cáo ngược dòng để họ có thể sửa các tập lệnh xây dựng của họ).
Peter Cordes

1
Cảm ơn rất nhiều cho lời đề nghị. Để kiểm tra điều đó, tôi chỉ chạy lại tập lệnh .có cấu hình -march=nativevà đây là lỗi: / Users / jose / Documents / code / tmptensorflow / tenorflow / tenorflow / core / BUILD: 1442: 1: C ++ quy tắc '// tenorflow / core: lib_iternal_impl' không thành công (Thoát 1). Trong tệp được bao gồm từ tenorflow / core / platform / den normal.cc: 37: / L Library / Nhà phát triển / CommonLineTools / usr / bin /../lib/clang/7.0.2/include/pmmintrin.h:28:2: error: "SSE3 instruction set chưa được kích hoạt" #error "SSE3 instruction set chưa được kích hoạt" sử dụng Apple LLVM phiên bản 7.0.2 (vang-700.1.81)
Chum

7

Gần đây tôi đã cài đặt nó từ nguồn và dưới đây là tất cả các bước cần thiết để cài đặt nó từ nguồn với các hướng dẫn được đề cập có sẵn.

Các câu trả lời khác đã mô tả lý do tại sao những thông điệp được hiển thị. Câu trả lời của tôi đưa ra từng bước về cách thức tinh thể, điều này có thể giúp mọi người sải bước trong quá trình cài đặt thực tế như tôi đã làm.

  1. Cài đặt Bazel

Tải xuống từ một trong những bản phát hành có sẵn của họ , ví dụ 0.5.2 . Giải nén nó, đi vào thư mục và cấu hình nó : bash ./compile.sh. Sao chép tệp thực thi vào /usr/local/bin:sudo cp ./output/bazel /usr/local/bin

  1. Cài đặt hàng chục

Clone tenorflow: git clone https://github.com/tensorflow/tensorflow.git Chuyển đến thư mục nhân bản để cấu hình nó:./configure

Nó sẽ nhắc bạn với một số câu hỏi, dưới đây tôi đã gợi ý câu trả lời cho từng câu hỏi, tất nhiên, bạn có thể chọn câu trả lời của riêng mình theo ý muốn:

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. Các gói pip. Để xây dựng nó, bạn phải mô tả những hướng dẫn nào bạn muốn (bạn biết, những dòng chảy đó thông báo rằng bạn đang thiếu).

Xây dựng tập lệnh 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

Xây dựng gói pip: bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

Cài đặt gói pip Tensorflow bạn vừa xây dựng: sudo pip install /tmp/tensorflow_pkg/tensorflow-1.2.1-cp27-cp27mu-linux_x86_64.whl

Bây giờ, lần tới khi bạn khởi động Tensorflow, nó sẽ không phàn nàn nữa về các hướng dẫn bị thiếu.


4
Xây dựng với chỉ -c opt --copt=-march=nativenên ít nhất là tốt như --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.1 --copt=-msse4.2. (Cả hai sẽ tắt cảnh báo, nhưng -march=nativecó thể tạo mã nhanh hơn bằng cách điều chỉnh cụ thể cho CPU trên hệ thống bạn đang xây dựng). Cũng lưu ý rằng --copt=-mavx2 --copt=-mfmangụ ý tất cả các tùy chọn AVX và SSE trước đó, vì vậy chuỗi tùy chọn dài này được viết rõ ràng bởi một người không hiểu các tùy chọn gcc.
Peter Cordes

1
@PeterCordes, hãy xem xét vấn đề này ( github.com/tensorflow/tensorflow/issues/7449 ), ngay cả những người duy trì bazel cũng không khẳng định tại sao march = bản địa không hoạt động như mong đợi. Vì bạn có vẻ "hiểu các tùy chọn gcc", nên có lẽ bạn có thể giúp họ khắc phục nó, vì họ đã đánh dấu vấn đề là cần "hỗ trợ cộng đồng".
Eduardo

Cảm ơn, tôi sẽ xem ... Hmm, một số người nói rằng --copt=-mavx2nó không hoạt động. Nếu --copt=-mfma hoạt động, --copt=-march=nativenên hoạt động, trừ khi phân tích cú pháp =là một vấn đề. Đối với gcc / clang / icc, bạn chắc chắn muốn tập lệnh xây dựng cuối cùng chuyển -march=nativesang trình biên dịch. Làm cho điều đó xảy ra thông qua các tập lệnh xây dựng trở thành thủ thuật.
Peter Cordes

7

Đây là phương pháp đơn giản nhất. Chỉ một bước.

Nó có tác động đáng kể đến tốc độ. Trong trường hợp của tôi, thời gian cho một bước đào tạo gần như giảm một nửa.

Tham khảo các bản dựng tùy chỉnh của tenorflow


2
Các bản dựng Windows bao gồm AVX2 github.com/fo40225/tensorflow-windows-wheel
Chris Moschini

@SreeraghAR Phương pháp của bạn đã hạ cấp dòng chảy và máy ảnh của tôi.
KPMG

Vui lòng đảm bảo rằng bạn đã cài đặt tệp chính xác theo các phiên bản TensorFlow, Python và HW của bạn.
Sreeragh AR

TensFlowPhiên bản @SreeraghAR là 1.10.0 và đang sử dụng MacOS Sierra. Giúp tôi tìm tập tin
KPMG

Hmm .. Không thể tìm thấy một phiên bản tương ứng với các phiên bản của bạn. Một số người phải xây dựng một bánh xe tùy chỉnh. github.com/yaroslavvb/tensorflow-community-wheels Giải pháp tức thời có thể sử dụng Tensorflow 1.9.0
Sreeragh AR


5

Để biên dịch TensorFlow với SSE4.2 và AVX, bạn có thể sử dụng trực tiếp

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

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


1
Có điều gì đó thay đổi gần đây? Lần cuối tôi kiểm tra --copt="-march=native"là ăn =. (Và BTW, những trích dẫn kép đó không làm gì cả; chúng sẽ bị xóa bởi trình bao trước khi bazelnhìn thấy dòng lệnh của bạn.)
Peter Cordes

4

GIẢI PHÁP TƯƠNG THÍCH 2.0:

Thực hiện các lệnh dưới đây trong Terminal (Linux / MacOS) hoặc trong Command Prompt (Windows) để cài đặt Tensorflow 2.0 bằng cách sử dụng 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

2
Phần nào trong phần này chỉ định -march=nativehoặc các tùy chọn GCC / clang khác? Tôi không thấy bất kỳ đề cập nào về AVX, FMA hoặc SSE4.2 trong phần này. (Và kịch bản xây dựng của Bazel hay Tensorflow vẫn bị hỏng theo cách chỉ có các tùy chọn như -mavxcông việc, phải không -march=native? Nếu đó là vấn đề thực sự nằm trong câu trả lời hàng đầu cho câu hỏi này)
Peter Cordes

để hỗ trợ CPU với phiên bản tf 2.1.0, tùy chọn --config = opt không hoạt động với tôi, tôi đã giải quyết nó với --config = v2. Ngoài ra, thật tốt khi đề cập rằng phiên bản bazel phù hợp để xây dựng nó là 29.0.
Tolik

2

Khi xây dựng TensorFlow từ nguồn, bạn sẽ chạy configuretập lệnh. Một trong những câu hỏi mà configurekịch bản đặt ra là như sau:

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

Các configurekịch bản sẽ gắn cờ (s) bạn chỉ định cho lệnh bazel rằng xây dựng các gói TensorFlow pip. Nói rộng hơn, bạn có thể trả lời lời nhắc này theo một trong hai cách:

  • Nếu bạn đang xây dựng TensorFlow trên cùng loại CPU với loại CPU mà bạn sẽ chạy TensorFlow, thì bạn nên chấp nhận mặc định (-march=native ). Tùy chọn này sẽ tối ưu hóa mã được tạo cho loại CPU của máy.
  • Nếu bạn đang xây dựng TensorFlow trên một loại CPU nhưng sẽ chạy TensorFlow trên một loại CPU khác, thì hãy xem xét việc cung cấp một cờ tối ưu hóa cụ thể hơn như được mô tả trong tài liệu gcc .

Sau khi định cấu hình TensorFlow như được mô tả trong danh sách dấu đầu dòng trước đó, bạn sẽ có thể xây dựng TensorFlow được tối ưu hóa hoàn toàn cho CPU mục tiêu chỉ bằng cách thêm --config=optcờ vào bất kỳ lệnh bazel nào bạn đang chạy.


-1

Để ẩn những cảnh báo đó, bạn có thể làm điều này trước mã thực tế của bạn.

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

5
Âm thầm chạy chậm hơn nó có thể trên phần cứng của bạn có vẻ như là một ý tưởng tồi.
Peter Cordes

Tôi đồng ý với @Peter Cordes nói chung - nhưng đôi khi thật tuyệt (theo cách có kỷ luật, có đầu óc) để che giấu các cảnh báo và tập trung vào nhiệm vụ.
westsider

2
@westsider: yeah, nó có thể hữu ích trong một số trường hợp, nhưng đây không phải là một câu trả lời hay trừ khi nó chỉ ra hàm ý: có hiệu suất thực sự bị mất nếu bạn chỉ ẩn các cảnh báo thay vì biên dịch lại. (Ngoại trừ có thể nếu bạn đang sử dụng GPU để nâng vật nặng, nó vẫn có thể cảnh báo về các tùy chọn CPU?)
Peter Cordes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.