Я ищу некоторые пояснения относительно параметров флагов компиляции при использовании TensorFlow с графическими процессорами NVIDIA в Ubuntu 18.04.Я использую TensorFlow как для Python (для обучения), так и для вызова из C ++ (для выполнения в производстве).
Поскольку Ubuntu 18.04 поставляется с GCC 7.x, я должен использовать CUDA 9.2, поэтому я не могуиспользуйте предоставленные Google предварительно скомпилированные двоичные файлы TensorFlow (в настоящее время они работают только с CUDA 9.0, которая не совместима с GCC 7.x).Поэтому я должен скомпилировать TensorFlow из исходного кода для использования с Python и C ++
В настоящее время я использую следующие флаги компиляции:
Компиляция Python:
bazel build --config=opt \
--config=cuda //tensorflow/tools/pip_package:build_pip_package
Компиляция C ++:
bazel build -c opt \
--copt=-mavx \
--copt=-mavx2 \
--copt=-mfma \
--copt=-mfpmath=both \
--copt=-msse4.2 \
--config=cuda //tensorflow:libtensorflow_cc.so
Это основано главным образом на голосовании в сети, что вызывает у меня неудобство.Вот несколько сайтов / постов, с которыми я ознакомился:
https://www.tensorflow.org/install/source имеет:
bazel build --config=opt \\
--config=cuda //tensorflow/tools/pip_package:build_pip_package
http://www.bitbionic.com/2017/08/18/run-your-keras-models-in-c-tensorflow/ имеет:
bazel build --jobs=6 \
--verbose_failures \
-c opt \
--copt=-mavx \
--copt=-mfpmath=both \
--copt=-msse4.2 //tensorflow:libtensorflow_cc.so
Как скомпилировать Tensorflow с инструкциями SSE4.2 и AVX? имеет:
bazel build -c opt \
--copt=-mavx \
--copt=-mavx2 \
--copt=-mfma \
--copt=-mfpmath=both \
--config=cuda -k //tensorflow/tools/pip_package:build_pip_package
Пересобрать Tensorflow с нужными флагами оптимизации имеет:
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
Может кто-нибудь проинформировать нас всех об этих опциях флага?В частности, у меня есть следующие вопросы:
1) Что такое флаги mavx
, mavx2
, mfma
и mfpmath
?Должны ли они использоваться для компиляции Python и C ++ или только для компиляции C ++?Тот факт, что пошаговое руководство Google не использует их для компиляции Python, склоняет меня к тому же.
2) Очевидно, что --copt=-msse4.2
означает включение оптимизации SSE для процессоров Intel, а --config=cuda
- дляГрафические процессоры CUDA, но что означает опция -k
в конце флага CUDA?Обратите внимание, что некоторые из приведенных выше примеров используют параметр -k
, а некоторые нет.
3) Есть ли место, где эти параметры задокументированы?Интересно, есть ли другие флаги, которые могут быть полезными, или некоторые из вышеперечисленных должны быть опущены.Я проверил TensorFlow и Bazel GitHubs и не нашел ничего по этой теме.