Флаги компиляции TensorFlow GPU? - PullRequest
       93

Флаги компиляции TensorFlow GPU?

0 голосов
/ 25 октября 2018

Я ищу некоторые пояснения относительно параметров флагов компиляции при использовании 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 и не нашел ничего по этой теме.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Из документации по gcc кажется, что по умолчанию параметр -orch = native с помощью tenorflow - это все, что необходимо для использования всех возможностей вашего процессора.Это, вероятно, лучше, чем устанавливать эти флаги оптимизации вручную, так как некоторые из них могут отсутствовать.

0 голосов
/ 08 ноября 2018

1) Там флаги передаются gazel bazel.См. Документацию GCC для точного значения.Например, для fpmath см. Что-то вроде https://gcc.gnu.org/onlinedocs/gcc-4.4.7/gcc/i386-and-x86_002d64-Options.html. Их следует использовать, когда вы знаете, что процессор, на котором вы будете запускать бинарный файл, поддерживает эти параметры.Не повредит использовать их повсюду.

2) -k - флаг базеля, задокументированный здесь: https://docs.bazel.build/versions/master/user-manual.html#flag--keep_going

3) Да, см. Выше.

...