задний план
Запустите тестовую программу согласно последней версии TensorFlow для macOS, предварительно скомпилированной на официальном сайте:
(venv) $ python -c "import tensorflow as tf; hello = tf.constant('Hello, TensorFlow!'); sess = tf.Session(); print(sess.run(hello))" # output: b'Hello, TensorFlow!'
На выходе есть предупреждающее сообщение:
(venv) $ 2019-04-19 14:45:50.202157: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
(venv) $ b'Hello, TensorFlow!'
Означает предупреждение о том, что собственный ЦП поддерживает наборы инструкций AVX2 и FMA, а установленная предварительно скомпилированная версия TensorFlow — нет. Поэтому скомпилируйте и установите TensorFlow из исходного кода для оптимизации.
окрестности
Require | TF | HW | OS | GCC | Python | Supports |
---|---|---|---|---|---|---|
Version | 1.13.1 | CPU | MacOS Mojave 10.14.4 (18E226) | clang-1001.0.46.4 | 3.6.5 | FMA, AVX, AVX2, SSE4.1, SSE4.2 |
Продукт сборки:tensorflow-1.13.1-cp36-cp36m-macosx_10_13_x86_64.whl
шаг
Установите зависимости пакетов Python и TensorFlow.
# install Homebrew if not installed
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
$ brew update
# install Python 3.6.5 if not installed
$ brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb
$ brew link --overwrite python
$ python3 --version
# 使用特定于 shell 的命令激活该虚拟环境:
$ source ./venv/bin/activate
# 安装 TensorFlow pip 软件包依赖项
(venv) $ pip install -U pip six numpy wheel mock
(venv) $ pip install -U keras_applications==1.0.6 --no-deps
(venv) $ pip install -U keras_preprocessing==1.0.5 --no-deps
Установить Базель
Официальный сайт:docs.bazelu.build/versions/ma…
# Please note that if your system has the Bazel package from homebrew core installed you first need to uninstall it by typing: `brew uninstall bazel`
# Bazel 0.20.0 because TensorFlow require version 0.21.0 or lower to build
$ brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/da863ab7d8122b8ad406eb5e8bb2253953e6bcc9/Formula/bazel.rb
# You can confirm Bazel is installed successfully by running the following command:
$ bazel version
# Once installed, you can upgrade to a newer version of Bazel using the following command:
$ brew upgrade bazelbuild/tap/bazel
Загрузите исходный код TensorFlow.
$ source ./venv/bin/activate
(venv) $ git clone https://github.com/tensorflow/tensorflow.git
(venv) $ cd tensorflow
# 代码库默认为 master 开发分支。您也可以检出要编译的版本分支:
(venv) $ git checkout r1.13 # version 1.13.1 on 2019/04/19
Настроить систему сборки
(venv) $ ./configure
WARNING: --batch mode is deprecated. Please instead explicitly shut down your Bazel server using the command "bazel shutdown".
INFO: Invocation ID: 824b97ef-4279-4576-8e4c-b9c405cb7a28
You have bazel 0.20.0-homebrew installed.
Please specify the location of python. [Default is /Users/xiaobailong24/venv/bin/python]:
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: module 'site' has no attribute 'getsitepackages'
Found possible Python library paths:
/Users/xiaobailong24/venv/lib/python3.6/site-packages
Please input the desired Python library path to use. Default is [/Users/xiaobailong24/venv/lib/python3.6/site-packages]
Do you wish to build TensorFlow with XLA JIT support? [y/N]: N
No XLA JIT support will be enabled for TensorFlow.
Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: N
No OpenCL SYCL support will be enabled for TensorFlow.
Do you wish to build TensorFlow with ROCm support? [y/N]: N
No ROCm 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.
Do you wish to download a fresh release of clang? (Experimental) [y/N]: N
Clang will not be downloaded.
Do you wish to build TensorFlow with MPI support? [y/N]: N
No MPI support will be enabled for TensorFlow.
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native -Wno-sign-compare]:
Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: N
Not configuring the WORKSPACE for Android builds.
Preconfigured Bazel build configs. You can use any of the below by adding "--config=<>" to your build command. See .bazelrc for more details.
--config=mkl # Build with MKL support.
--config=monolithic # Config for mostly static monolithic build.
--config=gdr # Build with GDR support.
--config=verbs # Build with libverbs support.
--config=ngraph # Build with Intel nGraph support.
--config=dynamic_kernels # (Experimental) Build kernels into separate shared objects.
Preconfigured Bazel build configs to DISABLE default on features:
--config=noaws # Disable AWS S3 filesystem support.
--config=nogcp # Disable GCP support.
--config=nohdfs # Disable HDFS support.
--config=noignite # Disable Apacha Ignite support.
--config=nokafka # Disable Apache Kafka support.
--config=nonccl # Disable NVIDIA NCCL support.
Configuration finished
Скомпилируйте пакет pip
Базель билд
Компиляция TensorFlow из исходного кода может потреблять много памяти. Если в вашей системе ограничена память, используйте следующую команду, чтобы ограничить потребление памяти Bazel: --local_resources 2048,.5,1.0. Я использовал 3072 здесь.
(venv) $ bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.1 --copt=-msse4.2 -k //tensorflow/tools/pip_package:build_pip_package --local_resources 3072,.5,1.0
После ожидания длительного процесса сборки (около трех часов) появится следующее приглашение, когда окончательная сборка будет успешной:
Target //tensorflow/tools/pip_package:build_pip_package up-to-date:
bazel-bin/tensorflow/tools/pip_package/build_pip_package
INFO: Elapsed time: 10260.288s, Critical Path: 398.73s
INFO: 9875 processes: 9875 local.
INFO: Build completed successfully, 10432 total actions
Скомпилируйте пакет
Команда bazel build создает исполняемый файл с именем build_pip_package, который представляет собой программу, используемую для компиляции пакетов pip. Запустите исполняемый файл, как показано ниже, чтобы скомпилировать пакет .whl в каталоге /tmp/tensorflow_pkg.
(venv) $ ./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
Установить пакет
Имя сгенерированного файла .whl зависит от версии TensorFlow и вашей платформы, вот оно:tensorflow-1.13.1-cp36-cp36m-macosx_10_13_x86_64.whl
# Please note that if your system has the tensorflow installed you first need to uninstall it by typing: `pip uninstall tensorflow`
(venv) $ pip install /tmp/tensorflow_pkg/tensorflow-1.13.1-cp36-cp36m-macosx_10_13_x86_64.whl
Успех: теперь TensorFlow установлен.
Проверить результаты установки
# 验证安装效果,输出结果不再有不支持 AVX2 的警告
(venv) $ python -c "import tensorflow as tf; hello = tf.constant('Hello, TensorFlow!'); sess = tf.Session(); print(sess.run(hello))" # output: b'Hello, TensorFlow!'
Ссылаться на
- [Википедия] Набор инструкций AVX
- 【лакшайг】https://github.com/lakshayg/tensorflow-build
- [TensorFlow] Компиляция из исходного кода
- [Magic Youchen's Nest] Скомпилируйте и установите версию TensorFlow-CPU через исходный код для поддержки AVX и других наборов инструкций.
- 【Александр Соколовский】[Обновление 2] Как собрать и установить TensorFlow GPU/CPU для Windows из исходного кода с использованием bazel и Python 3.6
соединять
яxiaobailong24, вы можете найти меня на:
- Github: GitHub.com/Маленький белый дракон…
- Краткая книга:Woohoo.Краткое описание.com/U/3 неверно 2 Ade 17…
- Самородки:Талант /user/310467…