面向 TensorFlow* 的英特尔® 优化安装指南

签署人: PREETHI VENKATESH Jing XuHung-Ju Tsai

已发布:08/09/2017   最后更新时间:05/07/2021

TensorFlow* 是深度学习领域的一款主流机器学习框架,对计算资源的高效利用有着严苛的要求。为充分利用英特尔® 架构和实现最高性能,TensorFlow 框架已使用 oneAPI Deep Neural Network Library (oneDNN) 基元进行了优化,该工具是一种面向深度学习应用的流行性能库。如需了解有关优化和性能数据的更多信息,请查看博文现代英特尔® 架构上的 TensorFlow* 优化

Anaconda* 帮助人工智能社区在 TensorFlow 库中便捷实施高性能计算。从 TensorFlow v1.9, 开始,Anaconda 会继续使用面向深度神经网络的英特尔® 数学核心函数库(英特尔® MKL-DNN)基元构建 TensorFlow,以便为您的 CPU 提供高性能。

本安装指南介绍了几种获取经英特尔优化的 TensorFlow 的方法,包括从现成的软件包获取或从源代码构建。简单分为二进制文件Docker 映像从源代码构建三类。

现在,面向 TensorFlow 的英特尔优化也已作为英特尔® AI Analytics Toolkit 的一部分来提供。下载并安装,以获采用英特尔全新人工智能加速技术进行优化的独立 condo 环境。您可点击此处,查看帮助您入门的代码示例。

支持的安装选项

注意:如果没有首选项,用户可以从英特尔通道开始 PIP Wheel 安装。

Anaconda  

  • Linux:主通道 | 英特尔® 通道 | 英特尔® AI Analytics Toolkit
  • Windows:主通道
  • macOS:主通道

支持 Python v3.6 和 Python v3.7,但不支持 Python v3.8。

PIP Wheel

  • Linux: Py35 | Py36 | Py37 | Py38

Docker 容器

  • Linux:英特尔® 容器 | Google DL 容器

从源代码构建

  • Linux | Windows

 

安装选项

1. 二进制

从 Anaconda* Cloud 安装面向 TensorFlow* 的英特尔® 优化最新版本

可供 Linux*、Windows*、MacOS* 使用

OS TensorFlow* 版本
Linux* 2.4.1
Windows* 2.1
MacOS* 2.0.0

 

安装说明:

如果您没有 conda 软件包管理器,请下载并安装 Anaconda

Linux 和 MacOS

打开 Anaconda 提示,使用下列指令

conda install tensorflow

如果您的 anaconda 通道并非默认的最高优先级通道(或您对此并不确定),可使用以下命令获取经英特尔® 优化的出色 TensorFlow

conda install tensorflow -c anaconda

Windows

打开 Anaconda 提示,使用下列指令

conda install tensorflow-mkl

(或)

conda install tensorflow-mkl -c anaconda

除上述安装方法外,面向 TensorFlow 的英特尔® 优化还在英特尔® 通道上作为 wheel 和 docker 映像及 conda 软件包分发。实施一项安装程序,获取英特尔优化的 TensorFlow。

 

注:英特尔分发的所有二进制文件都是在 CentOS 容器中根据 TensorFlow 版本标记构建的,带有 gcc 4.8.5 和 glibc 2.17,并带有以下编译器标记(如下所示传递给 bazel*)

--cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0 --copt=-march=corei7-avx --copt=-mtune=core-avx-i --copt=-O3 --copt=-Wformat --copt=-Wformat-security --copt=-fstack-protector --copt=-fPIC --copt=-fpic --linkopt=-znoexecstack --linkopt=-zrelro --linkopt=-znow --linkopt=-fstack-protector

支持 Linux* 操作系统

TensorFlow* 版本:2.3

安装说明:

打开 Anaconda 提示,使用下列指令。支持 Python 3.6 和 3.7。

conda install tensorflow -c intel

支持 Linux* 操作系统

TensorFlow* 版本:2.3

安装说明:

下载英特尔® AI Analytics Toolkit 可以通过多种方式,包括 Conda、在线/离线安装程序、存储库和容器。

您可点击此处,获取下载和安装指南

支持 Linux* 操作系统

TensorFlow 版本:2.4

安装说明:

对于采用 pip > 20.0 的 TensorFlow 版本 1.13、1.14 和 1.15,如果遇到无效 wheel 错误,请尝试将 pip 版本降级至 < 20.0

例如

python -m pip install --force-reinstall pip==19.0

运行以下指令,在现有 Python* 环境中安装 wheel,首选 Python* 的英特尔® AI Analytics Toolkit: 受支持的 Python 版本为 3.5、3.6、3.7、3.8。

pip install intel-tensorflow==2.4.0

如果您的计算机支持 AVX512 指令集,请使用下方程序包以获得更出色的性能。

pip install intel-tensorflow-avx512==2.4.0 # linux only

Pip 软件包发布在 Google Cloud 和 AWS 上,以方便客户访问。

Python 版本 要求最低指令集 来自 Google Cloud Storage 的 wheel 命令
python 3.5 AVX

pip install https://storage.googleapis.com/intel-optimized-tensorflow/2.3.0/intel_tensorflow-2.3.0-cp35-cp35m-manylinux2010_x86_64.whl

  AVX-512 pip install https://storage.googleapis.com/intel-optimized-tensorflow/2.3.0/intel_tensorflow_avx512-2.3.0-cp35-cp35m-manylinux2010_x86_64.whl
python 3.6 AVX

pip install https://storage.googleapis.com/intel-optimized-tensorflow/2.3.0/intel_tensorflow-2.3.0-cp36-cp36m-manylinux2010_x86_64.whl

  AVX-512 pip install https://storage.googleapis.com/intel-optimized-tensorflow/2.3.0/intel_tensorflow_avx512-2.3.0-cp36-cp36m-manylinux2010_x86_64.whl
python 3.7 AVX pip install https://storage.googleapis.com/intel-optimized-tensorflow/2.3.0/intel_tensorflow-2.3.0-cp37-cp37m-manylinux2010_x86_64.whl
  AVX-512 pip install https://storage.googleapis.com/intel-optimized-tensorflow/2.3.0/intel_tensorflow_avx512-2.3.0-cp37-cp37m-manylinux2010_x86_64.whl
python 3.8 AVX pip install https://storage.googleapis.com/intel-optimized-tensorflow/2.3.0/intel_tensorflow-2.3.0-cp38-cp38-manylinux2010_x86_64.whl
  AVX-512 pip install https://storage.googleapis.com/intel-optimized-tensorflow/2.3.0/intel_tensorflow_avx512-2.3.0-cp38-cp38-manylinux2010_x86_64.whl

Python 版本 要求最低指令集 来自 AWS Storage 的 wheel 命令
python 3.5 AVX

pip install https://intel-optimized-tensorflow.s3.cn-north-1.amazonaws.com.cn/2.3/intel_tensorflow-2.3.0-cp35-cp35m-manylinux2010_x86_64.whl

  AVX-512 pip install https://intel-optimized-tensorflow.s3.cn-north-1.amazonaws.com.cn/2.3/intel_tensorflow_avx512-2.3.0-cp35-cp35m-manylinux2010_x86_64.whl
python 3.6 AVX

pip install https://intel-optimized-tensorflow.s3.cn-north-1.amazonaws.com.cn/2.3/intel_tensorflow-2.3.0-cp36-cp36m-manylinux2010_x86_64.whl

  AVX-512 pip install https://intel-optimized-tensorflow.s3.cn-north-1.amazonaws.com.cn/2.3/intel_tensorflow_avx512-2.3.0-cp36-cp36m-manylinux2010_x86_64.whl
python 3.7 AVX pip install https://intel-optimized-tensorflow.s3.cn-north-1.amazonaws.com.cn/2.3/intel_tensorflow-2.3.0-cp37-cp37m-manylinux2010_x86_64.whl
  AVX-512 pip install https://intel-optimized-tensorflow.s3.cn-north-1.amazonaws.com.cn/2.3/intel_tensorflow_avx512-2.3.0-cp37-cp37m-manylinux2010_x86_64.whl
python 3.8 AVX pip install https://intel-optimized-tensorflow.s3.cn-north-1.amazonaws.com.cn/2.3/intel_tensorflow-2.3.0-cp38-cp38-manylinux2010_x86_64.whl
  AVX-512 pip install https://intel-optimized-tensorflow.s3.cn-north-1.amazonaws.com.cn/2.3/intel_tensorflow_avx512-2.3.0-cp38-cp38-manylinux2010_x86_64.whl

 

注:如果您的计算机支持 AVX-512 指令集,请从上表下载并安装以 AVX-512 为最低要求指令集的 wheel 文件。

注:如果您在 AVX2 以上的 ISA 上遇到以下警告,请从上表下载并安装以 AVX-512 为最低要求指令集的 wheel 文件。

I tensorflow/core/platform/cpu_feature_guard.cc:142] 此 TensorFlow 二进制文件已使用 oneAPI Deep Neural Network Library (oneDNN) 进行了优化,可以在性能关键的运算中使用以下 CPU 指令:AVX2 AVX512F FMA要在其他运算中使用这些指令,需要使用相应的编译标记重新构建 TensorFlow。

 

注:如果在没有 AVX-512 指令集支持的计算机上运行以 AVX-512 为最低要求指令集的版本,则会遇到“非法指令(核心转储)”错误。

注意,与 1.14.0 安装相比,我们已经修复了一些漏洞,并且可以使用以下命令安装修复后的版本。在过去的 pypi 软件包版本中,我们从 curl 和 GCP 支持中发现了新的 CVE 问题,因此我们必须在 PyPI 中引入一组新的修复包

此处提供 Linux* 版

 

2.Docker 映像

安装面向 TensorFlow* 的英特尔® 优化 Docker 映像

从版本 1.14 开始,Google 面向 CPU 上的 TensorFlow 发布了默认使用 oneDNN 优化的 DL 容器。TensorFlow v1.x CPU 容器名称格式为“tf-cpu.”, TensorFlow v2.x CPU 容器名称格式为“tf2-cpu.”,支持 Python3。下面是用于在本地下载 docker 映像并启动 TensorFlow 1.14 或 TensorFlow 2.3 容器的示例命令。请每次使用以下命令中的一条。

# TensorFlow 1.14

docker run -d -p 8080:8080 -v /home:/home gcr.io/deeplearning-platform-release/tf-cpu.1-14

# TensorFlow 2.3

docker run -d -p 8080:8080 -v /home:/home gcr.io/deeplearning-platform-release/tf2-cpu.2-3

此命令将启动 TensorFlow 1.14 或 TensorFlow 2.3,并在分离模式下启用 oneDNN,将正在运行的 Jupyter 服务器绑定到本地计算机上的端口 8080,并将本地/home 目录挂载到容器中的 /home。正在运行的 JupyterLab 实例可以通过 localhost:8080 访问。

要启动 docker 容器的交互式 bash 实例,请运行以下命令之一。

# TensorFlow 1.14

docker run -v /home:/home -it gcr.io/deeplearning-platform-release/tf-cpu.1-14 bash

# TensorFlow 2.3

docker run -v /home:/home -it gcr.io/deeplearning-platform-release/tf2-cpu.2-3 bash

 

可用的容器配置

您可以在此处找到所有受支持的 docker 标记/配置。

TensorFlow 版本:2.4.0

这些 docker 映像全部发布在 http://hub.docker.comintel/intel-optimized-tensorflowintel/intel-optimized-tensorflow-avx512 命名空间,可使用以下命令获取:

 

# intel-optimized-tensorflow

docker pull intel/intel-optimized-tensorflow

# intel-optimized-tensorflow-avx512

docker pull intel/intel-optimized-tensorflow-avx512:latest

 

例如,如需直接运行数据科学容器,只需

# intel-optimized-tensorflow

docker run -it -p 8888:8888 intel/intel-optimized-tensorflow

# intel-optimized-tensorflow-avx512

docker run -it -p 8888:8888 intel/intel-optimized-tensorflow-avx512:latest

然后通过您的浏览器访问 http://localhost:8888/


对于希望通过浏览器导览的用户,请访问以下链接:

 

可用的容器配置

您可以找到面向 intel-optimized-tensorflowintel-optimized-tensorflow-avx512 的所有受支持的 docker 标签/配置。

如需获取面向 TensorFlow* 的英特尔® 优化的最新版本说明,请参阅此

您可以访问英特尔® oneContainer 门户,查找适用于面向 TensorFlow* 的英特尔® 优化的更多容器。

3. 从源代码构建

借助英特尔 oneAPI oneDNN library 从源构建 TensorFlow

不推荐使用源代码构建 TensorFlow。然而,如果上述指令因为 ISA 不受支持而无法运行,您随时可使用源代码进行构建。

从源代码构建 TensorFlow 需要安装 Bazel,相关信息请参考此处:安装 Bazel

安装说明:

  1. 确保在构建和安装 TensorFlow 的 Python 环境中已安装 numpy、keras 应用程序、keras 预处理、pip、six、wheel、mock 软件包。
  2. 克隆 TensorFlow 源代码并检出您偏好的分支
    • git clone https://github.com/tensorflow/tensorflow
    • git checkout r2.3
  3. 运行 TensorFlow 源代码目录中的 "./configure
  4. 执行以下命令创建 pip 程序包,以安装经过优化的 TensorFlow build。
    • 可更改PATH,使其指向特定 GCC 编译器版本:

      export PATH=/PATH//bin:$PATH

    • LD_LIBRARY_PATH 还支持全新:

      export LD_LIBRARY_PATH=/PATH//lib64:$LD_LIBRARY_PATH

    • 在您的机器上设置受 GCC 支持的编译标记,以便用 oneDNN 构建TensorFlow。

      bazel build --config=mkl -c opt --copt=-march=native //tensorflow/tools/pip_package:build_pip_package

       
      • 如果您想要针对某些硬件构建二进制文件,请确保设置了适当的 “march” 和 “mtune” 标记。请参阅 gcc 在线文档以了解您的 GCC 版本支持的标记。

        bazel build --config=mkl --cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0 --copt=-march=sandybridge --copt=-mtune=ivybridge --copt=-O3 //tensorflow/tools/pip_package:build_pip_package

         

      • 或者,如果您想要根据某些指令集构建二进制文件,请设置相应的“指令集”标记:

        bazel build --config=mkl -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mavx512f --copt=-mavx512pf --copt=-mavx512cd --copt=-mavx512er //tensorflow/tools/pip_package:build_pip_package

        上面设置的标记将添加 AVX、AVX2 和 AVX512 指令,如果您使用的 CPU 较陈旧,则将导致“非法指令”错误。如果您想要在旧版 CPU上构建,请相应地设置指令标记。

  5. 安装优化的 TensorFlow wheel
    • bazel-bin/tensorflow/tools/pip_package/build_pip_package ~/path_to_save_wheel
    • pip install --upgrade --user ~/path_to_save_wheel/

* 早于 TensorFlow 2.3

必备条件

https://visualstudio.microsoft.com/vs/older-downloads/ 安装以下 Visual C++ 2015 生成工具

  • Microsoft Visual C++ 2015 可再发行版更新 3
  • Microsoft 生成工具 2015 更新 3

安装

  1. 请参考 Linux 章节并按照步骤 1 至 3 操作
  2. 要构建具有 oneDNN 支持的 TensorFlow,我们需要额外的两步。
    • 使用 /WHOLEARCHIVE 开关时,Visual Studio 2015 上的 Link.exe 会导致链接器问题。要解决此问题,请在 https://support.microsoft.com/zh-cn/help/4020481/fix-link-exe-crashes-with-a-fatal-lnk1000-error-when-you-use-wholearch     提供的 Visual C++ 编译器上安装修补程序
    • 添加一个 PATH 环境变量,在其中指定构建过程中将创建的 MKL 运行时库位置。可以使用 output_base 选项在 bazel build 命令中指定基本下载位置,然后将 oneDNN 库下载到相对于该基本下载位置的目录中              
      • set PATH=%PATH%;output_dir\external\mkl_windows\lib

         3.带有“mkl”标记和“output_dir”的 Bazel build,可以使用正确的 mkl 库

             bazel --output_base=output_dir build --config=mkl --config=opt //tensorflow/tools/pip_package:build_pip_package

          4.安装优化的 TensorFlow wheel

      bazel-bin\tensorflow\tools\pip_package\build_pip_package C:\temp\path_to_save_wheel

      pip install C:\temp\path_to_save_wheel\

 

* TensorFlow 2.3 和更高版本:

必备条件

  • 面向 Windows 的 python 3.5 或 3.6。选择 pip 作为可选功能,并将其添加到 %PATH% 环境变量中。
  • TensorFlow 依赖项软件包(检查 setup.py 中列出的依赖项软件包)
    • pip3 install six numpy wheel

    • pip3 install keras_applications==1.0.6 --no-deps

    • pip3 install keras_preprocessing==1.0.5 --no-deps

       

  • MSYS2
    • (Bazel 的要求)MSYS2 是一款 Windows的软件版本和构建平台。它包含 Bash 和常见的 Unix 工具(如 grep、tar、git)。
    • Bazel 需要使用 msys2 终端安装软件包(请注意,需要设置代理变量,否则这些安装将无法进行)
    • 打开 MSYS2 终端并运行命令

      pacman -S zip unzip patch diffutils git

  • Bazel
  • 安装 Visual C++* 生成工具 2019。它随 Visual Studio* 2019 一起提供,但可以单独安装。请前往 Visual Studio 下载页面,下载并安装以下项目:

    • 来自其他工具和框架Microsoft Visual C++ 2019 可再发行程序包

    • 来自 Visual Studio 2019 工具Microsoft 生成工具 2019

安装

  1. 设置以下环境变量:
    1. BAZEL_SH: C:\msys64\usr\bin\bash.exe

    2. BAZEL_VS: C:\Program Files (x86)\Microsoft Visual Studio

    3. BAZEL_VC: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC

  2. 注:为了减少编译时间,请设置:

    set TF_VC_VERSION=16.6

    更多详情见此处

  3. 请将下列内容添加到 PATH 环境变量:
    1. python 路径,例如 C:\Program Files\Python36

    2. 构建过程中将创建的 oneDNN 运行时库位置,例如 D:\output_dir\external\mkl\windows\lib

    3. Bazel 路径,例如 C:\Program Files\Bazel-3.2.0

    4. MSYS2 路径,例如 C:\msys64;C:\msys64\usr\bin

    5. Git 路径,例如 C:\Program Files\Git\cmd;C:\Program Files\Git\usr\bin

      set PATH=%PATH%;C:\Program Files\Python36;D:\output_dir\external\mkl_windows\lib;C:\Program Files\Bazel-3.2.0;C:\msys64;C:\msys64/\usr\bin;C:\Program Files\Git\cmd;C:\Program Files\Git\usr\bin
  4. 下载 TensorFlow 源代码,检出版本分支,并配置 build:
    • git clone https://github.com/Intel-tensorflow/tensorflow.git
    • cd tensorflow
    • git checkout r2.3-windows
    • python ./configure.py
  5. 将 oneDNN 输出目录位置设置在 TensorFlow 主目录之外,以避免出现 infinite symlink expansion 错误。然后将 oneDNN 输出目录的路径添加到系统 PATH:   
    • set OneDNN_DIR=\one_dnn_dir

    • set PATH=%OneDNN_DIR%;%PATH%

  6. 使用 oneDNN 从源代码构建 TensorFlow。导航至 TensorFlow 根目录 tensorflow,然后运行以下 bazel 命令从源代码构建 TensorFlow oneDNN:
    • bazel --output_base=%OneDNN_DIR% build --announce_rc --config=opt --config=mkl --action_env=PATH="" --define=no_tensorflow_py_deps=true tensorflow/tools/pip_package:build_pip_package

注:根据 bazel 问题 #7026,我们设置:--action_env=PATH=。打开 cmd.exe,运行 echo%PATH% 并将输出复制到 --action_env=PATH= 的 value 处。如果能找到,请用单引号将含空格的文件夹名称引起来。

 

附加说明

安装好经英特尔优化的 TensorFlow 后,如果 oneDNN 优化存在,则运行以下命令时一定会输出 “True”。

import tensorflow as tf

major_version = int(tf.__version__.split(".")[0])

if major_version >= 2:        

    from tensorflow.python import _pywrap_util_port        

    print("MKL enabled:", _pywrap_util_port.IsMklEnabled())

else:        

    print("MKL enabled:", tf.pywrap_tensorflow.IsMklEnabled())

  1. 经英特尔优化的 TensorFlow 默认启用 oneDNN 调用,如果您想在任何时候禁用英特尔® 数学核心函数库 (MKL) 基元调用,可以在运行 TensorFlow 脚本之前将 TF_DISABLE_MKL 标记设置为 1,来禁用此功能。

    export TF_DISABLE_MKL=1

    但是,请注意,此标记将仅禁用 oneDNN 调用,而不会禁用 MKL-ML 调用。

    虽然 oneDNN 负责大部分优化,但 MKL-ML 库对某些 ops 节点进行了优化,包括 matmul、transpose 等。TF_DISABLE_MKL 标记目前不支持禁用 MKL-ML 调用,英特尔正在与 Google 合作以添加此功能。

  2. Anaconda TensorFlow 中的 CPU 关联设置:如果启用 oneDNN 的 TensorFlow 是从 anaconda 通道(而非英特尔通道)安装的,则 “import tensorflow” 命令将设置 KMP_BLOCKTIME 和 OMP_PROC_BIND 环境变量(如果尚未设置)。但是,这些变量可能会影响其他库,例如使用 OpenMP 或 oneDNN 的 Numpy/Scipy。或者,您也可以在导入 TensorFlow 后设置或取消设置首选值。有关更多详细信息,请参阅 TensorFlow GitHub 问题
    • import tensorflow # this sets KMP_BLOCKTIME and OMP_PROC_BIND
    • import os
    • # delete the existing values
    • del os.environ['OMP_PROC_BIND']
    • del os.environ['KMP_BLOCKTIME']

 

 

支持

如果您在工作负载优化方面有其他问题,或需要支持,请将问题提交到 TensorFlow GitHub 问题中,并加上 “comp:mkl” 标签,或提交到英特尔® AI Frameworks Forum

 

实用资源

 

 

产品和性能信息

1

性能因用途、配置和其他因素而异。请访问 www.Intel.cn/PerformanceIndex 了解更多信息。