面向新手的人工智能从业者指南

在基于英特尔® 至强™ 平台的基础设施上部署 TensorFlow* 框架并运行示例测试

范围

本篇从业者支持指南首先从较高的层面介绍机器学习 (ML) 从业者需了解的业务与数据战略,然后详细介绍如何在英特尔® 至强® 可扩展平台上安装并验证其中一个比较常用的人工智能 (AI) 框架 — TensorFlow*。本指南将详细介绍三种安装正在运行的常用示例的方法:基于裸机、通过容器和基于云。

注:本指南中所介绍的示例未经性能优化,仅用于培训目的。

人工智能 (AI) 定义

“人工智能”的定义不断变化,但是万变不离其宗,它是指与人类思维相关的机器模拟(和/或超越)认知功能。在方法众多的 AI 领域,以数据为中心的机器学习一直处于领先地位,因为机器学习能够游刃有余地处理三个主要 AI 子任务 — 感知、规划/推理和控制。最终,融合多种方式交付更加智能的机器,从而实现 AI。在不久的将来,AI 发展将以深度学习为核心,其他方法也会根据数据集、问题和独特需求的不同而扮演重要的角色。

如图 1 所示,AI 伞形结构的子集是机器学习,即性能随时间推移和数据增加而逐步提升的机器算法。例如,如果为自学机器人编程,让它给花园里的植物浇水,机器人在浇花过程中撞上了一块石头,以后它会学着避开障碍物,选择最佳路径。因此,花园机器人的机器学习有助于提升性能。

机器学习的一个子集是深度学习 (DL),指多层神经网络通过海量数据进行学习。深度学习是 AI 的一个分支,近年来获得了广泛的普及和采用。本文提供的框架和示例将以深度学习为基础。DL 包含两个主要部分:训练和推理。训练通过馈送已标记数据/内容,教会多层神经网络(亦称“模型”)识别对象/文本等。模型完成训练后,开始进行推理,使用经过训练的模型识别未标记内容。

AI and its major subsets
图 1:AI 及其主要子集

业务考虑因素

确定数据战略1

人工智能的当务之急源于数据 — 未来的货币。到 2020 年,我们预计将有超过 500 亿台设备和 2,000 亿个传感器接入互联网,智能和连接设备的爆炸性增长将导致海量数据的产生。预计到 2020 年,平均每名互联网用户每天将生成约 1.5 GB 流量(远高于 2015 年的约 650MB)。数据规模之庞大,超乎您的想象:

  • 智能医院将每天生成 3,000 GB 流量
  • 自动驾驶汽车每天生成超过 4,000 GB 流量
  • 联网飞机每天将生成超过 40,000 GB 流量
  • 互联工厂将每天生成 100 万 GB 流量

数据中包含对业务、运营和安全性至关重要的洞察,相关行业希望能够实时提取、分析和解析数据,获得宝贵洞察。提取数据价值需使用 AI 工具。

AI 之旅的第一步是准备数据。因此,在考虑 AI 业务模型时,必须重点关注整个数据生命周期。

added AI data life cycle
图 2:已添加的 AI 数据生命周期

数据战略应包含关于如何创建、获取、传输、采集、整理和集成各种数据,以及如何存储和组织数据以供处理的清晰计划。每家公司都有独特的数据战略,但要牢记数据生命周期并专注于构建基于数据的端到端优化型解决方案,以形成独特、极具竞争力的数据战略。

分析您希望解决的业务难题1

探索 AI 之前,必须了解在贵公司实施 AI 将是一段旅程。第一步是确定公司面临的挑战,并根据业务价值和解决成本确定挑战的优先级。绘制一张 2x2 图表,y 轴表示业务价值,自下而上越来越高,x 轴表示解决成本,从左到右越来越低;所以,影响最大、必须首先解决的挑战位于右上方的象限中。接下来是确定适合各个问题的 AI(或其他)方法,然后评估是否具备实施该解决方案所需的专业知识。(此外,您还要了解这些专家是否接受快速修复问题持续改进的理念,因为相比传统确定性软件开发项目,AI 项目中的不确定性因素较多,需要反复试验和探索。)相关人员就位后,接下来是获取和准备数据以供分析,同时准备好解决该问题所需的全部技术基础设施。

最后,您已做好准备承担使用数据解决业务挑战这一重任 — 但如果贵公司没有准备好接受并为之行动以获取数据驱动型洞察,那么一切准备工作都是徒劳。例如,体育界最初十分抵制数据分析,对于计算机算法会超越他们多年的经验和领域知识,总经理和球探们嗤之以鼻。总之,如果您考虑到了 AI 生命周期中的所有这些步骤,那么您通过 AI 交付业务价值的成功几率将会更大。

麻省理工学院斯隆商学院的教授 Thomas Malone 是 MIT Center for Collective Intelligence 的创始主任。他在多部著作中探讨了关于人机合作改变未来的想法。了解人类和 AI 的集体智慧如何影响贵公司的业务战略至关重要。深入了解试图用 AI 解决的业务问题,加上强大的数据战略,可帮助您在未来加速业务发展。

TensorFlow* 框架部署和示例

本节将详细介绍三种为基于英特尔® 至强® 平台的基础设施部署面向深度学习训练与推理的 TensorFlow 框架的方法。

 单节点多节点
方案 1裸机裸机
方案 2通过容器X(本文未涉及,请参阅参考文献)6, 29
方案 3基于云基于云

方案 1:裸机

单节点安装:

本节将详细介绍如何使用 TensorFlow* 框架和 CIFAR-10 图像识别 数据集,训练和测试基于单节点英特尔® 至强® 可扩展处理器的系统。这些分步说明可以按原样使用,也可以此为基础进行增强和/或修改。

必备知识:

  • 硬件:相关步骤已在英特尔® 至强® 可扩展处理器上进行了验证,但还应适用于任何基于英特尔® 至强® 处理器的最新系统。本文中使用的所有软件均未进行性能优化。
  • 软件:基础 Linux*,熟悉深度学习训练的概念

本节描述了一种在运行 CentOS* 7.3 的单节点英特尔® 至强® 可扩展处理器系统上成功部署和测试图像识别示例的方法。如欲了解其他安装方案,可参阅 《在 Ubuntu* 上安装 TensorFlow*》 《英特尔® Optimization for TensorFlow* 安装指南》。本文使用虚拟环境安装 TensorFlow。如欲使用 Anaconda*,请首先阅读 这篇文章。本文不是为了详细描述如何达到出色性能,而是介绍 TensorFlow 及如何在基于英特尔® 至强® 可扩展处理器系统上使用 CIFAR-10 数据集进行简单的训练和测试。

硬件和软件物料清单

项目制造商型号/版本
硬件  
基于英特尔处理器的服务器机箱英特尔R1208WT
基于英特尔处理器的服务器主板英特尔S2600WT
(双路)英特尔® 至强® 可扩展处理器英特尔英特尔® 至强® 金牌 6148 处理器
(6 个)32GB LRDIMM DDR4Crucial*CT32G4LFD4266
(1 块)英特尔® 固态盘 1.2TB英特尔S3520
软件  
CentOS* Linux* Installation DVD 7.3.1611
英特尔® Parallel Studio XE 集群版 2017.4
TensorFlow* setuptools-36.7.2-py2.py3-none-any.whl
第 1 步:安装 Linux* 操作系统

本节中使用的是 CentOS7.3.1611,是从 CentOS 网站下载的最新版。

具体操作系统安装步骤请参阅附录。

第 2 步:配置 YUM

如果公共网络实施了互联网接入代理服务器,则必须配置 Yellowdog Updater Modified* (YUM*) 方可使用。

打开 /etc/yum.conf 文件进行编辑。

在主要部分下方,附加以下命令行:

proxy=http://<address>:<port>;

其中 <address> 表示代理服务器地址,而 <port> 表示 HTTP 端口。

保存文件,然后退出。

禁用更新和额外功能。本文中的某些程序需要基于内核构建软件包。未来内核更新可能会破坏已构建软件包与新内核的兼容性,因此建议禁用资源库更新和额外功能,以延长本文档的适用时间。

如果 CentOS 更新至新版本,可能无法直接使用本文档。如要在此类更新后使用本文档,必须重新定义资源库路径,以指向 CentOS 库中的 CentOS 7.3。禁用存储库更新和附加功能:Yum-config-manager --disable updates --disable extras。

第 3 步:安装 EPEL

Extra Packages for Enterprise Linux (EPEL) 可为 Linux 分发版提供需要的所有优质附加软件包。安装 EPEL(需要所有软件包的最新版本):

yum –y install

(点击此处下载)

第 4 步:安装 GNU* C 编译器

请检查是否已安装 GNU 编译器套装* (GCC*)。此安装步骤应为操作系统安装中开发工具安装流程的一部分。(具体请参阅附录。)输入以下内容进行检查:

gcc --version or whereis gcc

如果未安装,请点击 此处查找最新安装。

使用以下命令可从官方 CentOS 库安装 GCC:

yum –y install gcc
第 5 步:安装 TensorFlow*

使用 virtualenv3,按照以下步骤安装 TensorFlow:

  1. 更新至 EPEL 的最新分发版:

    yum –y install epel-release
  2. 如需安装 TensorFlow,必须安装以下关联组件:
    • NumPy:TensorFlow 需要的数字处理软件包
    • Devel*:支持添加扩展至 Python*
    • PIP*:支持安装和管理某些 Python 软件包
    • Wheel*:支持管理 wheel 格式的 Python 压缩软件包 (.whl)
    • Atlas*:自动调优线性代数软件
    • Libffi*:库提供 Foreign Function Interface (FFI),以支持一种语言编写的代码调用另一种语言编写的代码。它可为各种调用协定提供可移植高级编程接口8
  3. 安装关联组件:

    sudo yum -y install gcc gcc-c++ python-pip python-devel atlas atlas-devel gcc-gfortran openssl-devel libffi-devel python-numpy
  4. 安装 virtualenv

    安装 TensorFlow 的方式有多种。本文使用了创建隔离 Python 环境的 virtualenv 工具9.

    pip install --upgrade virtualenv
  5. 在您的目标目录中创建 virtualenv:

    virtualenv --system-site-packages <targetDirectory>

    例:

    virtualenv --system-site-packages tensorflow
  6. 激活 virtualenv4:

    source ~/<targetdirectory>/bin/activate

    例:

    source ~/tensorflow/bin/activate
  7. 需要时升级您的软件包:

    pip install --upgrade numpy scipy wheel cryptography
  8. 安装最新版 Python 压缩 TensorFlow 软件包:

    pip install --upgrade

本文使用 TensorFlow 0.8 wheel 进行部署和测试。

谷歌会定期发布新版 TensorFlow,因此建议使用最新版 TensorFlow wheel。

GitHub* 中的 Community Supported Builds 下方,找到最新版面向深度神经网络的英特尔® 数学核心函数库(英特尔® MKL-DNN)优化的 Tensor wheel 文件。

4:

Tensor wheel file on GitHub example

TensorFlow 网页仅提供用于 CPU 的 wheel 文件版本,可以使用,但它们不是面向 CPU 优化的 wheel 文件。

安装 TensorFlow wheel 的版本后,可以选择升级到最新版 TensorFlow,但请注意升级版本可能不是 CPU 优化型版本。

第 6 步:训练卷积神经网络 (CNN)
  1. 将 CIFAR1011 训练数据集下载到/tmp/目录,目录中包含 Python 版本可以在这里找到。
  2. 解压缩 /tmp/ 区域的 tar 文件,支持 Python 脚本 (cifar10_train.py) 查找该目录中的数据:

    tar –zxf <dir>/cifar-10-python.tar.gz
  3. 将目录更改为 TensorFlow:

    cd tensorflow
  4. 创建新目录:

    mkdir git_tensorflow
  5. 将目录更改为上一步创建的目录:

    cd git_tensorflow
  6. 从 GitHub 下载 TensorFlow 存储库 的副本。

    git clone https://github.com/tensorflow/tensorflow.git

     

  7. 如果 tensorflow/tensorflow 目录中丢失了模型文件夹,可通过 TensorFlow Github 访问模型的 Git:13

    cd tensorflow/tensorflow
    git clone https://github.com/tensorflow/models.git

     

  8. 安装最新版 TensorFlow ,否则在训练模型时会发生错误:

    pip install intel-tensorflow
  9. 将目录更改为 CIFAR-10 目录,获取训练和评估 Python 脚本12

    cd models/tutorials/image/cifar10
  10. 在运行训练代码时,检查 cifar10_train.py 代码,需要时将阶跃从 100K 更改为 60K,并将记录频率从 10 更改为您需要的数值。

    在本文档中,我们对 100K 阶跃和 60K 阶跃,以及 128 的批次大小和 10 的记录频率进行了测试。

    parser.add_argument(‘--max_steps’, type=int, default=100000, help=’Number of batches to run.’)
  11. 运行训练 Python 脚本,以训练您的网络:

    python cifar10_train.py

    该操作需要几分钟时间,您会看到类似于以下内容的图像:

    train output example
测试脚本和数据集术语

在神经网络术语中:

  • 一个 epoch = 所有训练示例的一次正向传递和一次反向传递。
  • 批次大小 = 一次正向/反向传递中的训练示例数量。批次越大,所需的内存空间越多。TensorFlow 通过一次正向传递推送全部项目(并行),然后对相同集进行反向传播。这是一次迭代或阶跃。
  • 迭代数量 = 传递数量,每次传递使用[批次大小]数量的示例。需要说明的是,一次传递等于一次正向传递加一次反向传递(一次正向传递和一次反向传递不计为两次不同的传递)。
  • 阶跃 参数指示 TensorFlow 运行 X 次此类迭代,以训练模型。
    示例:以 1,000 个训练示例和 500 的批次大小为例,完成一个 epoch 需要两次迭代。

如欲更多地了解 epoch、批次大小和迭代之间的区别,请阅读《TensorFlow 性能指南》

在 cifar10_train.py 脚本中:

  • 批次大小设置为 128。它表示一个批次中需处理的图像数量。
  • 最大阶跃设置为 100,000。它表示所有 epoch 的迭代数量。

    注:GitHub 代码具有一处排印错误,数字显示为 1000K,而非 100K。请在运行前更新。

  • 《英特尔® Optimization for TensorFlow* 安装指南》中的 CIFAR-10 二进制数据集包含 60,000 张图像:50,000 张图像用于训练,10,000 张图像用于测试。每个批次大小为 128,因此,需要训练的批次数量为 50,000/128,一个 epoch 的批次数量约为 391。
  • cifar10_train.py 使用 256 个 epoch,因此,所有 epoch 的迭代数量约为 391 x 256,迭代或阶跃数量约为 100K。
第 7 步:评估模型

使用 cifar10_eval.py script8 评估训练的模型在维持 (hold-out) 数据集上的运行情况:

python cifar10_eval.py

如果达到预期的准确度,运行上述命令时,屏幕上应该能看到 precision @ 1 = 0.862。它可以在阶跃步骤结束时运行,也可以在训练脚本完成后运行。

train script run result example

使用本文硬件和软件物料清单部分描述的系统实现了类似于以下显示内容的结果。

请注意,这些数字仅用于学习目的,未实施特定的 CPU 优化。

系统阶跃时间(秒/批次)准确度
双路英特尔® 至强® 金牌 6148 处理器~ 0.10560,000 次阶跃(约 2 小时),准确度为 85.8%
双路英特尔® 至强® 金牌 6148 处理器~0.109100,000 次阶跃(约 3 小时),准确度为 86.2%

当您训练和测试完 CIFAR-10 数据集时,相同的模型目录中包含用于 MNIST* 和 AlexNet* 性能指标评测的图像。如需了解更多信息,请访问 MNIST 和 AlexNet 目录,尝试运行 Python 脚本以查看结果。

多节点安装:

Wei Wang 和 Mahmoud Abuzaina 在他们的文章中详细介绍了如何将英特尔至强可扩展处理器和基于 TensorFlow 的 Horovod* 实现性能扩展。他们的博客一直是本节内容的来源。

许多复杂的深度学习模型需要在多节点上进行训练。因为它们要么不适合某台设备,要么在一组设备上进行训练后,训练时间能显著缩短。因此,英特尔还在多节点英特尔至强可扩展处理器集群上进行了扩展研究。本节将分步骤介绍如何使用面向 TensorFlow 的分布式训练框架 Horovod 在英特尔至强处理器集群上部署 TensorFlow。

Horovod 由 Uber* 开发,以消息传递接口 (MPI) 为主要通信机制。它使用 MPI 概念(如 allgather 和 allreduce)处理交叉副本通信和权重更新。OpenMPI* 可与 Horovod 一起使用,支持这些概念。Horovod 作为单独的 Python 软件包安装。通过从深度学习神经网络模型脚本调用 Horovod 的 API,TensorFlow 的常规构建可用来运行分布式训练。使用 Horovod 时,不需要更改 TensorFlow 中的源代码,也支持使用 MPI 进行分布式训练。

硬件和软件物料清单

项目制造商型号/版本
硬件  
英特尔® 至强® 可扩展处理器英特尔英特尔® 至强® 金牌 6148 处理器
(12 个)16GB DDR4 @ 2666MT/秒  
(3 块)英特尔® 固态盘 800GB,1.6TB英特尔RS3WC080
软件  
CentOS* CentOS 7.4 (Maipo)
Kernel 3.10.0-693.21.1.0.1.el7.knl1.x86_64
TensorFlow* 1.7
第 1 步:安装 Linux 操作系统

本节中使用的是 CentOS* 7.4,是从 CentOS 网站 下载的最新版。

具体操作系统安装步骤请参阅附录。

本白皮书假设已构建多节点集群,且头节点和计算节点之间存在通信。如欲获取集群设置指南,请参阅《HPC 集群参考设计》19

第 2 步:配置 YUM

如果公共网络实施了互联网接入代理服务器,则必须配置 Yellowdog Updater Modified* (YUM*) 方可使用。

打开 /etc/yum.conf 文件进行编辑。

在主要部分下方,附加以下命令行:

proxy=http://<address>:<port>;

其中 <address>表示代理服务器地址,<port> 表示 HTTP 端口。

保存 文件,然后 退出

禁用更新和额外功能。本文中的某些程序需要基于内核构建软件包。未来内核更新可能会破坏已构建软件包与新内核的兼容性,因此建议禁用资源库更新和额外功能,以延长本文档的适用时间。

如果 CentOS 更新至新版本,可能无法直接使用本文档。如要在此类更新后使用本文档,必须重新定义资源库路径,以指向 CentOS 库中的 CentOS 7.4。禁用存储库更新和附加功能:Yum-config-manager --disable updates --disable extras。

第 3 步:安装 EPEL

Extra Packages for Enterprise Linux (EPEL) 可为 Linux 分发版提供需要的所有优质附加软件包。安装 EPEL(需要所有软件包的最新版本):

下载:

yum –y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
第 4 步:安装 GNU* C 编译器

请检查是否已安装 GNU 编译器套装* (GCC*)。此安装步骤应为操作系统安装中开发工具安装流程的一部分(参阅附录)。可以输入以下命令进行检查:

gcc --version or whereis gcc

如果未安装,请点击此处查找最新安装。

使用以下命令可从官方 CentOS* 库安装 GCC:

yum –y install gcc
第 4 步:安装 OpenMPI

可以在最新版 CentOS 上通过 yum 安装 OpenMPI。一些现有集群包含可用 OpenMPI。在本节中,我们将使用 OpenMPI 3.0.0。按照此链接中的说明安装 OpenMPI。

下载后的 rpm 文件安装示例:

yum localinstall openmpi-3.0.0-1.src.rpm
第 5 步:Python 安装

确保 Python* 2.7 或 Python* 3.6 已安装并测试。作为操作系统安装的一部分,必须安装必要软件包。更新所有必要软件包,如下所示:

sudo yum update
sudo yum install yum-utils
sudo yum groupinstall development

继续安装 Python。本节提供 Python 3.6.1 安装步骤。标准 yum 存储库不提供最新 Python 版本,因此需要一个保持上游稳定 (IUM) 的额外的存储库,因为它可以提供必要的 RPM 软件包。

sudo yum 安装包 https://centos7.iuscommunity.org/ius-release.rpm

sudo yum install python36u

输入以下命令,检查 Python 3 的版本:

python3.6 –V

python –V 将返回系统 Python 版本

如要管理 Python 软件包,请安装 pip 和所需的开发包(如果没有)。

sudo yum install python36u-pip
sudo yum install python36u-devel
第 6 步:Horovod* 安装

Uber Horovod 支持 TensorFlow 分布式运行。将 Horovod 作为独立 Python 软件包安装,如下所示:

pip install –no-cache-dir horovod (e.g. horovod-0.11.3)

请查看以下链接,从此来源安装 Horovod:

第 7 步:获取最新性能指标评测

目前的 TensorFlow 性能指标评测近期经过修改,可以使用 Horovod。从 GitHub 中获取性能指标评测代码:
 

git clone https://github.com/tensorflow/benchmarks
cd benchmarks/scripts/tf_cnn_benchmarks

运行 tf_cnn_benchmarks.py,如下所述。

第 8 步:使用 Horovod* 运行 TensorFlow* 性能指标评测

本节介绍了如何使用所需的命令以使用 Horovod 框架运行分布式 TensorFlow。

在单节点上运行 2 条 MPI 进程:

export LD_LIBRARY_PATH=<path to OpenMP lib>:$LD_LIBRARY_PATH
export PATH=<path to OpenMPI bin>:$PATH
export inter_op=2
export intra_op=18 {# cores per socket}
export batch_size=64
export MODEL=resnet50 {or inception3}
export python_script= {path for tf_cnn_benchmark.py script}

mpirun -x LD_LIBRARY_PATH -x OMP_NUM_THREADS -cpus-per-proc 20 --map-by socket  --overscribe
--report-bindings -n 2 python $python_script --mkl=True --forward_only=False --num_batches=200
--kmp_blocktime=0 --num_warmup_batches=50 --num_inter_threads=$inter_op --distortions=False
--optimizer=sgd --batch_size=$batch_size --num_intra_threads=$intra_op --data_format=NCHW
--model=$MODEL --variable_update horovod --horovod_device cpu --data_dir <path-to-real-dataset>
--data_name <dataset_name>

每节点 1 条 MPI 进程的配置如下;其他环境变量保持不变。

export intra_op=38
export batch_size=128

mpirun -x LD_LIBRARY_PATH -x OMP_NUM_THREADS --bind-to none --report-bindings
-n 1 python $python_script --mkl=True --forward_only=False --num_batches=200
--kmp_blocktime=0 --num_warmup_batches=50 --num_inter_threads=$inter_op
--distortions=False --optimizer=sgd --batch_size=$batch_size
--num_intra_threads=$intra_op --data_format=NCHW --model=$MODEL
--variable_update horovod --horovod_device cpu --data_dir <path-to-real-dataset>
--data_name <dataset_name>

注:如要训练模型达到良好的准确度,请使用 –distortions=True。可能还需要更改其他超参数。

如要在多节点集群上运行模型,可使用与上面类似的运行脚本。例如,如要在 64 节点上运行(每节点 2 条 MPI 进程),其中所有节点均为英特尔至强金牌 6148 处理器,分布式训练的启动如下所示。所有导出列表都与上面相同。

mpirun -x LD_LIBRARY_PATH -x OMP_NUM_THREADS -cpus-per-proc 20 --map-by node
--report-bindings -hostfile host_names -n 128 python $python_script --mkl=True
--forward_only=False --num_batches=200 --kmp_blocktime=0 --num_warmup_batches=50
--num_inter_threads=$inter_op --distortions=False --optimizer=sgd --batch_size=$batch_size
 --num_intra_threads=$intra_op --data_format=NCHW --model=$MODEL --variable_update horovod
--horovod_device cpu --data_dir <path-to-real-dataset> --data_name <dataset_name>

这里,host_names 文件是您想在上面运行工作负载的主机列表。

分布式 TensorFlow* 对在英特尔® 至强® 处理器上进行的 DL 训练有何重要意义

为了在 CPU 和 GPU 上实施分布式 TensorFlow,我们做了很大努力。例如 gRPC、VERBS、TensorFlow 内置 MPI。这些技术都已集成至 TensorFlow 代码库。Uber Horovod 是一种分布式 TensorFlow 技术,能够充分发挥英特尔至强处理器的功能。它使用基础 MPI,并将基于 Ring 的归约和集聚用于深度学习参数。Wang 和 Abuzaina 的博客介绍,英特尔至强处理器上的 Horovod 极大地扩展了现有 DL 性能指标评测模型,如 64 节点上的 Resnet 50(高达 94%)及 Inception v3(高达 89%)。换言之,相比单节点,使用 64 个英特尔至强处理器节点训练 DL 网络的时间分别缩短了多达 57 倍 (resnet 50) 和 58 倍 (inception V3)。目前,英特尔建议 TensorFlow 用户指定英特尔优化的 TensorFlow 和 Horovod MPI 在英特尔至强可扩展处理器上进行多节点训练。

方案 2:使用 AI 容器

单节点安装:

硬件和软件物料清单

项目制造商型号/版本
硬件  
(双路)英特尔® 至强® 可扩展处理器英特尔英特尔® 至强® 铂金 8164 处理器
(12 个)32GB DDR4 @ 2666MT/秒  
(3 块)英特尔® 固态盘 800GB,1.6TB英特尔RS3WC080
软件  
CentOS CentOS 7.5
Kernel 3.10.0-862.el7.x86_64
TensorFlow* 1.9
第 1 步:安装 Linux 操作系统

本节中使用的是 CentOS* 7.4,是从 CentOS 网站下载的最新版。

具体操作系统安装步骤请参阅附录。

第 2 步:配置 YUM

如果公共网络实施了互联网接入代理服务器,则必须配置 Yellowdog Updater Modified* (YUM*) 方可使用。

打开 /etc/yum.conf 文件进行编辑。

在主要部分下方,附加以下命令行:

proxy=http://<address>:<port>;

其中 <address> 表示代理服务器地址,<port> 表示 HTTP 端口。

保存文件,然后退出

禁用更新和额外功能。本文中的某些程序需要基于内核构建软件包。未来内核更新可能会破坏已构建软件包与新内核的兼容性,因此建议禁用资源库更新和额外功能,以延长本文档的适用时间。

如果 CentOS 更新至新版本,可能无法直接使用本文档。如要在此类更新后使用本文档,必须重新定义资源库路径,以指向 CentOS 库中的 CentOS 7.4。禁用存储库更新和附加功能:Yum-config-manager --disable updates --disable extras.

第 3 步:安装 EPEL

Extra Packages for Enterprise Linux (EPEL) 可为 Linux 分发版提供需要的所有优质附加软件包。安装 EPEL(需要所有软件包的最新版本):

yum –y install (从这里下载)

第 4 步:安装 GNU* C 编译器

请检查是否已安装 GNU 编译器套装* (GCC*)。此安装步骤应为操作系统安装中开发工具安装流程的一部分(查看附录)。您可以输入以下命令进行检查:

gcc --version or whereis gcc

如果未安装,请点击 此处查找最新安装。

使用以下命令可从官方 CentOS 库安装 GCC:

yum –y install gcc
第 5 步:下载并安装 Anaconda*

请按照 Anaconda* 下载网站 上的说明下载并安装 Anaconda。

下载 Anaconda for Python* 2.7 的源文件

(建议使用 Python* 2.7,因为目前 TensorFlow 仅支持 Python* 2.7 或 Python* 3.5。本节使用 Python* 2.7)

使用以下 命令安装 Anaconda

bash Anaconda-latest-Linux-x86_64.sh

按照屏幕中的提示完成安装。

注:需要打开一个新终端才能启动 Anaconda 安装。

第 6 步:安装 Anaconda* 中的最新版英特尔® Optimization for TensorFlow*

使用以下指令打开 Anaconda 提示:

conda install tensorflow

按照屏幕中的提示完成软件包下载和解压。

将看到类似于以下的屏幕:

conda install tensorflow result example

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

conda install –c anaconda tensorflow

将看到类似于以下的屏幕:

conda install –c anaconda tensorflow result example

除上述安装方法外,英特尔 Optimization for TensorFlow 还在 Web 页面英特尔通道上作为 wheel、docker 映像和 conda 软件包分发。本节将介绍如何使用 docker 映像安装英特尔 Optimization for TensorFlow。

第 7 步:安装 Docker*

在系统上安装 Docker*,如果 Docker 已安装,请跳至第 8 步。

CentOS 上安装 Docker

yum install docker

完成后,将看到类似于以下的屏幕:

yum install docker result example

安装 epel 存储库,系统上必须启用该存储库。

yum install epel-release
yum install docker-io

安装完 Docker 软件包后,启动后台程序。在系统范围内启用该程序并使用以下命令检查其状态:

systemctl start docker
systemctl status docker
systemctl enable docker
systemctl enable docker result example

最后,使用以下命令运行容器检测映像,验证 Docker 运行是否正常:

docker run hello-world

如果 Docker 运行正常,将会看到如下内容:

docker run hello-world result example

注:如果出现 Docker 连接超时问题,您将在代理服务器后面(例如在公司网络设置中),可能需要在 Docker 系统服务文件中添加某些配置。

第 8 步:在现有 Python* 安装中安装最新英特尔® Optimization for TensorFlow* Docker 映像

这些 Docker 映像都在 dockerhubintelaipg/intel-optimized-tensorFlow 命名空间中发布,可使用以下命令拉取:

docker pull docker.io/intelaipg/intel-optimized-tensorflow:<tag>

例:

docker pull docker.io/intelaipg/intel-optimized-tensorflow:latest-devel-mkl

点击此处,获取可用的容器配置和标签。

Docker 拉取完成后,可看到类似于以下的屏幕:

docker pull complete example

如要查看系统中所有可用的 Docker 映像,可输入以下命令:

docker images
docker images result example

现在,您可以运行 Python* 2.7 数据科学容器的示例,并输入以下内容,在 Jupyter* Notebook 中打开该示例:

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

在浏览器上打开网址:http://localhost:8888/

docker run 8888 result example

默认情况下,‘latest’ 和其他不包含 ‘devel’ 的标签不会打开交互式终端。

您可以在 docker run 命令的末尾添加 ‘/bin/bash’,强制打开一个交互式终端。例如:

docker run -ti intelaipg/intel-optimized-tensorflow:latest /bin/bash
force open terminal result example
第 9 步:获取最新性能指标评测

从 GitHub 获取当前 TensorFlow 性能指标评测代码:

git clone https://github.com/tensorflow/benchmarks
cd benchmarks/scripts/tf_cnn_benchmarks
运行 tf_cnn_benchmarks.py,如下所述。

注:容器是空映像,必须在 Docker 容器映像上安装 yum、wget、vi 等基础 Linux 软件包。克隆性能指标评测之前,作者运行了以下步骤。容器映像基于 Ubuntu。

apt-get update
apt-get install vim –y
apt-get install yum
apt-get install git

对容器进行必要的更新/更改后,使用以下命令退出并保存对本地版本映像的更改:

docker commit <container_ID> <name_you_like>

其中的 Container_ID 是最初运行容器时提供的 ID。

例:

docker commit container id result example
第 10 步:运行 TensorFlow* 性能指标评测

本节介绍了运行 TensorFlow* CNN 性能指标评测所需的运行命令。

cd benchmarks/scripts/tf_cnn_benchmarks
python tf_cnn_benchmarks.py --forward_only=True --device=cpu --mkl=True --kmp_blocktime=0 --nodistortions --batch_size=32 --model=inception3 --data_format=NCHW  --num_intra_threads=4  --num_inter_threads=1

使用《TensorFlow* 性能指南》中提供的命令了解如何实现最佳 CPU 优化。上述示例命令适用于 inceptionV3 模型,不过也可以使用 tf_cnn_benchmark 目录中的其他模型。

多节点安装:

撰写本文之际,还没有适用于多节点的面向英特尔® 技术优化的 Docker* 容器,因此不包含针对该节点的测试说明。建议阅读已经发布的文章,如《使用 MLT 在 Kubernetes 上进行 Horovod 分布式训练》,了解如何在 Kubernetes 上进行分布式训练。此外,如欲在多节点上通过容器部署 TensorFlow,请阅读白皮书《在基于英特尔® 至强® 处理器的集群上使用 TensorFlow* 扩展深度学习的最佳已知方法》《Nauta》。本文分步骤介绍了如何使用多节点环境创建奇点容器,然后部署/运行这些奇点容器。

方案 3:云中的 AI

单节点安装:

我们可以借助不同的云服务提供商 (CSP) 通过云部署 AI 工作负载。本文以几家主要 CSP 为例介绍如何在云中部署 AI。

此示例适用于 Amazon Web Services (AWS)*,不过您也可以使用您选择的 CSP。

资料来源:《AWS 深度学习教程》

第 1 步:登录 AWS 管理控制台

使用用户名和密码登录 AWS 管理控制台。然后选择 EC2 实例。

第 2 步:配置实例
  1. 选择 EC2 实例并单击 Launch Instance
  2. 选择 AWS 深度学习 AMI
    《TensorFlow* 性能指南》指出,Amazon Machine Instance (AMI) 适用于 Ubuntu 和 Amazon Linux。选择最适用您的应用的那种。本指南选择深度学习 AMI (Ubuntu)。

    selected Deep Learning AMI screenshot
  3. 选择满足深度学习和部署需求的实例类型。选择 Compute Optimized Instance (c5),以获取 CPU 优化的软硬件。然后单击 Review and Launch。

    例:

    selected Compute Optimized Instance screenshot
  4. 在 review 页面上选择 Launch。

    choose Launch screenshot
  5. 选择 Create New Key Pair 创建私人密钥文件,并将其下载到安全位置。然后启动该实例。您将看到如下截图:

    create a private key file screenshot

    注:您可能会收到一条消息“your account is currently being verified”。验证通常需要不到两个小时。您可以在 30 分钟后重启实例。

  6. 单击 View Instance,查看您的实例。

    例:

    click view instancee screenshot
  7. 单击 View Instance 后,找到并复制实例的公共 DNS。

    示例截图:

    find and copy public DNS screenshot
第 3 步:连接至实例

如要开始使用命令行终端,与使用 Windows* 的 AWS 上的实例通信,可使用命令提示或下载 Git for Windows*

  1. 按照 [24] 中介绍的步骤打开命令终端
  2. 切换至安全密钥所在的目录
  3. 更改密钥对文件的权限
  4. 使用 SSH 连接至实例

例:

cd /user/xzy/Downloads/ 
chmod 0400 <key_file_name.per> 
ssh –l localhost:8888:localhost:8888 –i <key_file_name.per> ubuntu@<your_instance_DNS_that_you_copied>

注:如果登录的是公司网络,可能需要使用代理连接至您的实例。

使用 Putty:

  1. PuTTY 下载页面 下载并安装 PuTTY 。
  2. PuTTY 本身不支持 AWS EC2 生成的 .pem 文件,因此要将 .pem 密钥文件转换为所需的 PuTTY 格式 (.ppk)。
  3. 转换私人密钥:
    1. 启动 Puttygen
    2. 在 type of key to generate 下方,选择 RSA。如果使用的是旧版 PuTTYgen,请选择 SSH-2 RSA

      choose SSH-2 RSA screenshot
    3. 选择 Load。默认情况下,PuTTY 仅列出 .ppk 文件。从下拉菜单中选择 All Files,以查看 .pem 文件

      select All Files screenshot
    4. 选择启动实例时指定的 AWS 密钥对的 .pem 文件,然后选择 Open。选择 OK 关闭对话框。
    5. 选择 Save Private Key,将密钥保存为 PuTTY 可以使用的格式。PuTTYgen 会显示在没有口令的情况下保存密钥的告警。选择 Yes。
    6. 为用于密钥对的密钥指定相同的名称。PuTTY 会自动添加 .ppk 文件扩展名。
  4. 打开 PuTTY 会话:
    1. 启动 PuTTY
    2. 单击 Session,在 Host Name 中添加 EC2 实例的 IPv4 Public IP 地址。

      例:

      add the IPv4 Public IP address screenshot
    3. 现在单击 Connection 下方的 SSH,展开并单击 Auth。在 Auth 中添加通过 .pem 文件创建的 .ppk 文件的链接。例:

      add link to ppk file screenshot
    4. 如果使用的是公司网络,单击 Proxy,选择 Socks5,输入代理网络的名称,添加端口 1080

      例:

      set proxy screenshot
    5. 将会话保存为某一名称,如果愿意,保存在 Session 选项卡下方
    6. 保存后,单击 Open
    7. 对于 Login,请输入 Ubuntu
    8. 会话应成功打开,如示例截图所示:

      session start example
第 4 步:运行深度学习框架

使用 Jupyter* 或直接在命令终端上运行深度学习工作负载。

如果使用 Jupyter:输入 jupyter notebook

拷贝所显示的 URL 访问笔记簿,并开始使用深度学习框架。

如果使用终端:

本白皮书使用容器安装英特尔 Optimization for TensorFlow 框架并运行性能指标评测示例。运行的 AWS 实例应已安装 Docker。

  1. 输入以下命令,检查是否已安装 Docker。

    apt-cache policy docker-ce

    您应该看到 Docker Installed。如果显示 Installed:(none),请在实例上安装 Docker。如要在 Ubuntu 上安装 Docker,请按照 此处或类似文档中介绍的步骤。

    docker installed example
  2. 如要查看运行中的 Docker,请输入:

    sudo systemctl status docker
    docker status example

    运行 Docker hello-world,查看 Docker 是否安装正确。

  3. 使用以下命令拉取英特尔 Optimization for TensorFlow Docker 容器。按照方案 2 中的步骤查看详细信息。

    docker pull docker.io/intelaipg/intel-optimized-tensorflow:latest-devel-mkl

    如要查看系统上的可用 Docker 映像列表,请输入以下命令:

    docker images
    docker images example
  4. 运行英特尔 Optimization for TensorFlow Docker 映像。

    默认情况下,‘latest’ 和不包含 ‘devel’ 的标签不会打开交互式终端。

如果使用 Jupyter notebook,请运行以下命令:

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

在浏览器上打开如下链接:http://localhost:8888/

如果使用命令终端,请运行以下命令:

docker run -ti intelaipg/intel-optimized-tensorflow:latest /bin/bash

最新标签将自动加载最新版优化型容器。

docker run example
第 5 步:运行 TensorFlow 性能指标评测

您拉取的 TensorFlow 容器是一个空映像;运行性能指标评测之前,在 Docker 容器映像上安装基础 Linux 软件包,如 yum、wget、vi 等。克隆性能指标评测之前,作者运行了以下步骤。容器映像基于 Ubuntu。

apt-get update
apt-get install vim –y
apt-get install yum
apt-get install git

对容器进行必要的更新/更改后,使用以下命令退出并保存对本地版本映像的更改:

root@<container_ID>:/notebooks# exit
root@<container_ID>:/notebooks# docker commit <container_ID> <name_you_like>

其中的 container_ID 是最初运行容器时提供的 ID。

例:

save container id example

现在运行新的 Docker 映像:

docker run –ti <new_name_you_gave_to_container_saved_above>:latest /bin/bash

例:

run latest docker example

从 GitHub 获取当前 TensorFlow 性能指标评测代码:

git clone https://github.com/tensorflow/benchmarks
cd benchmarks/scripts/tf_cnn_benchmarks

本节介绍了运行 TensorFlow* CNN 性能指标评测所需的命令。

python tf_cnn_benchmarks.py --forward_only=True --device=cpu --mkl=True --kmp_blocktime=0 --nodistortions --batch_size=32 --model=inception3 --data_format=NCHW  --num_intra_threads=4  --num_inter_threads=1

此处提供的命令可提取关于如何实现最佳 CPU 优化的详细信息。上述示例命令适用于 inceptionV3 模型,不过也可以使用 tf_cnn_benchmark 目录中的其他模型。

此处是运行上述命令后的示例截图:

run TensorFlow CNN benchmarks result example

注:运行 Python 命令时会显示错误消息:“No module experimental.ops”,可能表示容器 TensorFlow 的版本不兼容用于性能指标评测的版本。

例如:如果性能指标评测兼容 TensorFlow v1.12,您的容器适用于 TensorFlow v1.10,那么请使用以下命令下载兼容的性能指标评测:

git clone –b cnn_tf_v1.10_compatible https://github.com/tensorflow/benchmarks
第 6 步:终止实例

 

多节点安装:

本节介绍使用基于谷歌机器学习 (ML) 引擎的谷歌云平台* 运行分布式 TensorFlow 的步骤。包括如何获取在谷歌 ML 引擎上运行的实例、如何部署 TensorFlow,以及如何在全 CPU 多节点设置(运行分布式训练时选择 standard_1 tier,以分配该设置)下运行示例训练。本节介绍的大多数步骤摘自《谷歌 ML 引擎入门指南》

使用谷歌云平台* (GCP)

来源:《TensorFlow 入门》

第 1 步:登录谷歌帐户。
第 2 步:通过 “go to the manage resources page” 选择或创建 GCP 项目。
第 3 步:按照这些说明启用项目计费。
第 4 步:单击此链接启用 Cloud Machine Learning Engine 和 Compute Engine API:

将会看到如下屏幕。选择项目并单击“Continue”。启用 API 需要几分钟的时间。

register your application screenshot

API 启用完成后,将看到类似于以下的屏幕:

APIs are enabled screenshot
第 5 步:设置身份验证
  1. 在 GCP 控制台中,前往创建服务帐户密钥页面。
  2. service account 下拉列表中,选择 New Service Account
  3. Service Account Name 字段中输入姓名。
  4. Role 下拉列表中选择 Project > Owner
  5. 单击 Create。包含密钥的 JSON 文件将下载至您的电脑。
第 6 步:将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设为包含服务帐户密钥的 JSON 文件的文件路径。该变量仅用于当前 shell 会话,如果打开新会话,需再次设置变量。

对于 Windows,使用的命令提示如下所示:

set GOOGLE_APPLICATION_CREDENTIALS= "<PATH>"
set Google app credentials example
第 7 步:按照此处的说明安装并初始化云 SDK。
  1. 下载 Cloud SDK Installer,务必使用正确的谷歌证书登录。

    注:如果下载失败:连接至主机消息,您可能位于公司防火墙之后,如果无法越过防火墙,请按照此处的步骤通过归档版本进行安装。

  2. 启动安装程序并按照提示说明操作。
  3. 安装完成后,接受以下选项:
    • 启动云 SDK shell。(对于 Windows* 用户,如果默认没有启动,请查找并单击已安装的 SDK。)它应打开命令提示,如下所示:

      Google cloud SDK shell command prompt screenshot
    • 运行 gcloud init(对于 Windows,请在终端窗口中输入 gcloud init,如下所示)

      gcload init run result example

      身份验证完成后,会打开一个 Web 浏览器页面,并显示如下屏幕:

      authentication complete screenshot

      注:如果您有网络代理,请使用正确的 HTTPS_PROXY 和 HTTP_PROXY 地址将其作为 glcoud 设置的一部分进行设置

      例:

      set proxy example
  4. 设置云项目后,系统将要求设置特定时区。选择时区非常重要,因为稍后在云上进行分布式训练期间,您必须为云存储桶创建一个区域,该区域应匹配为运行 LM 云引擎所选择的时区。

    set time zone example
  5. 完成后,您会看到一条消息,显示您的谷歌云 SDK 已配置,可以使用。

    例:

    time zone complete example
第 8 步:设置环境

本节中的说明摘自谷歌云 AI 和机器学习产品页面。谷歌提供 MAC OS 和 Cloud Shell(适用于 macOS*、Linux 和 Windows)说明,用于本地设置环境。本节仅介绍在 Windows 设备上通过 Cloud Shell 进行设置的步骤。

  1. 打开谷歌云平台控制台

    会出现类似以下截图的 Web 浏览器页面。可以从左上角的下拉菜单中选择相应的项目。

    google cloud platform console screenshot
  2. 单击控制台窗口顶部的 Activate Google Cloud Shell 按钮。

    Activate Google Cloud Shell button screenshot

    此操作将打开类似以下截图的窗口。单击 Start Cloud Shell 开始。

    Google Cloud Shell screenshot

    等待云 shell 设备启动。

    Google cloud shell starting screenshot

    “谷歌云平台”页面底部的新帧中会打开一个云 shell 会话,如下所示:

    cloud shell session in a new frame screenshot
  3. 如果之前没有在“谷歌云平台”页面中选择项目 ID,现在可以进行设置,或使用以下命令改为其他项目 ID:

    gcloud config set project <project-ID>
第 9 步:验证谷歌云 SDK 组件
  1. 列出模型:

    gcloud ml-engine models list

    如果之前未创建任何模型,该命令将返回一个空列表。

    return empty list example
  2. 如果之前安装了 gcloud,请更新 gcloud:

    gcloud components update

安装 TensorFlow*

如欲安装 TensorFlow,请运行以下命令:

pip install –user –upgrade tensorflow
install TensorFlow example

默认情况下可能安装 TensorFlow,因此您会看到一条关于要求已经更新的消息,其中包含 TensorFlow 版本。

运行简单的 TensorFlow Python 程序(可选)

尝试运行以下基本 Python 程序,以便自信地编写和测试 TensorFlow 安装。

import tensorflow as tf
hello= tf.constant(‘Hello, Tensorflow!’)
sess = tf.Session()
print(sess.run(hello))

如果成功,系统会输出:

Hello, Tensorflow!
>>> exit()

您的测试应类似于以下截图:

test output example

“谷歌云 AI 和机器学习产品”页面显示,从提取这些指令的地方,云 ML 引擎在默认情况下运行 Python 2.7,而且本节的示例代码使用 Python* 2.7。您可以查看“谷歌云 AI 和机器学习产品”页面,进一步了解如何使用 Python 3.5 提交任务。

第 10 步:下载用于示例的代码

本文介绍了在 Windows OS 上运行 Cloud Shell 的步骤。出色的 AI 和 ML 学习产品: 谷歌云 AI 和 ML 产品入门页面介绍了运行 MacOS 和 Cloud Shell 的步骤。

  1. GitHub 存储库下载示例 zip 文件:

    解压示例 zip 文件,以解压 cloudml-samples-master 目录:

    unzip master.zip

    示例截图:

    unzip master.zip example
  2. 导航至 cloudml-samples-master → census → estimator 目录。本节中的命令必须从 estimator 目录中运行。

    cd cloudml-samples-master/census/estimator
第 11 步:获取训练数据

谷歌托管了一个公共云存储桶,其中包含适用于本节的相关数据文件、adult.dataadult.test

  1. 创建数据目录并将数据下载到 estimator 目录:

    mkdir data
    gsutil –m cp gs://cloud-samples-data/ml-engine/census/data/* data/
  2. TRAIN_DATAEVAL_DATA 变量设置为文件路径。

    例:

    TRAIN_DATA=<local path>/data/adult.data.csv
    EVAL_DATA=<local path=>/data/adult.test.csv
第 12 步:安装关联组件:

TensorFlow 安装在 Cloud Shell 上,但本节中的示例基于 TensorFlow 1.10。因此,必须运行示例的 requirements.txt 文件,确保所使用的 TensorFlow 和其他关联组件的版本与本节示例所需的版本相同。

您应在 clouldml-samples-master/census/estimator 目录中。

在上述目录中找到 requirements.txt 文件。

find requirements.txt example

现在运行:

pip install --user –r ../requirements.txt
第 13 步:设置云存储桶
  1. 指定新存储桶的名称。名称必须是唯一的,与云存储中所有存储桶的名字不同。

    BUCKET_NAME =”<your bucket name>”

    注:为确保存储桶名称的唯一性,建议搭配使用项目名称与 –mlengine,如下列命令所示。

    PROJECT_ID=$(gcloud config list project –format “value(core.project)”)
    BUCKET_NAME=${PROJECT_ID}-mlengine
  2. 检查您创建的存储桶名称:

    echo $BUCKET_NAME

    示例截图:

    check bucket name example
  3. 为存储桶选择一个区域并设置环境变量:

    REGION=<name of region>

    例:

    REGION=us-west1

    注 1:为存储桶指定一个唯一的区域;不能有多区域位置。在面向云 ML 引擎的谷歌云 AI 和 ML 产品页面查找可用区域。

    注 2:使用与计划运行云 ML 引擎任务的区域相同的区域 — “使用谷歌云平台”小节的第 7 步中选择的区域。

    注 3:如果重启会话,可能会丢失 BUCKET_NAME 和 REGION 的环境设置。建议在进行下一步之前检查变量设置,尤其是重新启动 cloud shell 的时候。

  4. 创建新存储桶:

    gsutil mb –l $REGION gs://$BUCKET_NAME

    示例截图:

    create new bucket example
第 14 步:将数据文件上传到云存储桶
  1. 使用 gsutil 将这两个文件拷贝至新创建的云存储桶:

    gsutil cp –r data gs://$BUCKET_NAME/data
  2. TRAIN_DATAEVAL_DATA 变量指向云存储桶中的文件位置:

    TRAIN_DATA=gs://$BUCKET_NAME/data/adult.data.csv
    EVAL_DATA=gs://$BUCKET_NAME/data/adult.test.csv
  3. 使用 gsutil 将 JSON 测试文件拷贝至云存储桶:

    gsutil cp ../test.json gs://$BUCKET_NAME/data/test.json
  4. 设置 TEST_JSON,以指向该文件:

    TEST_JSON=gs://$BUCKET_NAME/data/test.json

    以下是将数据文件上传到云存储桶的示例截图:

    uploading to cloud bucket example
第 15 步:在云中运行分布式训练

如果在谷歌云中分布式运行训练任务,那么这些命令与用于在谷歌云的单个实例上运行训练的命令非常相似。本文不介绍谷歌云上的单实例训练,相关信息可访问 谷歌云 AI 和 ML 产品页面。单实例训练与多实例训练的主要区别在于设置 – 多实例有用于纠正层级的 scale-tier,单实例仅包含基础设置。如欲了解谷歌云 ML 引擎的可用扩展层级信息,请点击此处

  1. 设置分布式训练任务名称:

    JOB_NAME=<your distributed training name>

    例:

    JOB_NAME=census_dist_rev1
  2. 创建一个 OUTPUT_PATH。建议添加 JOB_NAME,以避免在任务之间重复使用检查点。

    注:如果已启动新的 shell 会话,可能需要重新定义 BUCKET_NAME。运行 echo $BUCKET_NAME,确保变量设置正确。

    OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME

    例:

    set output path example
  3. 运行以下命令,以在使用多个 worker 的谷歌云中提交分布式训练任务。此示例使用 standard_1 扩展层级,以使用基于全 CPU 的配置。任务可能需要几分钟才开始。

    --scale-tier 放在 -- 上方,隔开用户参数和命令行参数。

    31

    gcloud ml-engine jobs submit training $JOB_NAME \
    		    --job-dir $OUTPUT_PATH \
    		    --runtime-version 1.10 \
    		    --module-name trainer.task \
    		    --package-path trainer/ \
    		    --region $REGION \
    		    --scale-tier STANDARD_1 \
    		    -- \
    		    --train-files $TRAIN_DATA \
    		    --eval-files $EVAL_DATA \
    		    --train-steps 1000 \
    		    --verbosity DEBUG  \
    		    --eval-steps 100

    准确提交任务后,可看到类似于以下的消息:

    job successful example

    观察命令行输出,或在谷歌云平台控制台上的 ML Engine > Jobs 中监控任务进度。

    GCP ML Engine Jobs screenshot

    完成后,可看到如下屏幕:

    job complete GCP screenshot

    使用以下命令查看 cloud shell 上的任务状态:

    gcloud ml-engine jobs describe census_dist_rev1

    它会生成类似以下截图的输出:

    job status output example

    训练完成后,状态变量将显示"SUCCEEDED

第 16 步:检查日志

有两种方法可用来检查分布式训练生成的日志:

前往 GCP Console ML Engine > Jobs,单击 View Logs,或在 cloud shell 终端中输入以下命令:

gcloud ml-engine jobs stream-logs $JOB_NAME

超参数调优(可选)

超参数调优可帮助最大限度地提高模型的预测准确性。本文使用的调查示例将超参数配置设置保存在名为 hptuning_config.yaml 的 YAML 文件中。您可以将它用作特定模型和训练的模板。

  1. 选择新任务名称并创建引用该配置的变量:

    HPTUNING_CONFIG=../hptuning_config.yaml
    JOB_NAME=cesus_dist_hptune_rev1
    echo $BUCKET_NAME
    TRAIN_DATA=gs://$BUCKET_NAME/data/adult.data.csv
    EVAL_DATA=gs://$BUCKET_NAME/data/adult.test.csv

    示例截图:

    new job config var example
  2. 如上所述设置 OUTPUT_PATH。确保 BUCKET_NAME 已定义,而且不会在任务之间无意使用检查点。

    OUTPUT_PATH=gs://$BUCKET_NAME/$JOB_NAME
  3. 运行以下命令,以提交在多个节点上使用超参数调优的训练任务:

    gcloud ml-engine jobs submit training $JOB_NAME \
    	    --stream-logs \
    	    --job-dir $OUTPUT_PATH \
    	    --runtime-version 1.10 \
    	    --config $HPTUNING_CONFIG \
    	    --module-name trainer.task \
    	    --package-path trainer/ \
    	    --region $REGION \
    	    --scale-tier STANDARD_1 \
    	    -- \
    	    --train-files $TRAIN_DATA \
    	    --eval-files $EVAL_DATA \
    	    --train-steps 1000 \
    	    --verbosity DEBUG  \
    	    --eval-steps 100
  4. 在 GCP 控制台上的 ML Engine > Jobs 中查看结果,与之前的操作类似。
第 17 步:部署模型以支持预测(推理)
  1. 和此步骤中选择任务名称一样,选择模型名称。名称必须以字母开头,并且只能包含字母、数字和下划线。

    例:

    MODEL_NAME=census_rev1
  2. 创建云 ML 引擎模型:

    gcloud ml-engine models create $MODEL_NAME --regions=$REGION
  3. 创建待使用的输出路径。例如,使用 census_dist_rev1 作为任务名称,与在分布式非超参数调优一节中创建的名称相同:

    OUTPUT_PATH=gs://$BUCKET_NAME/census_dist_rev1
  4. 查找导出的经过训练的模型库的完整路径:

    gsutil ls –r $OUTPUT_PATH/export

    示例截图:

    find lib full path example1find lib full path example2
  5. 在上述步骤中,屏幕将显示 $BUCKET_NAME/export 下面的所有目录。找到名为 $OUTPUT_PATH/export/census/<timestamp> 的目录,拷贝该目录路径(末尾带冒号 “:”)并将其设为 MODEL_BINARIES 标记。查看上述截图中的红色高亮部分。

    MODEL_BINARIES=gs://$BUCKET_NAME/census_dist_rev1/export/census/1544207287/
  6. 运行以下命令以创建版本 rev1:

    gcloud ml-engine versions create rev1 --model $MODEL_NAME –origin $MODEL_BINARIES --runtime-version 1.10

    这需要几分钟的时间。完成后,会看到如下例所示的屏幕消息。

    create version rev complete example
  7. 使用 list 命令获取模型列表:

    gcloud ml-engine models list

    输出结果将如下所示:

    obtain model list output example
第 18 步:向部署的模型发送在线预测请求

现在已部署模型,可以发送预测请求。在下列示例中,以下命令将使用上述步骤中下载的 test.json 文件发送在线预测请求。

gcloud ml-engine predict --model $MODEL_NAME --version v1 --json-instances ../test.json

此命令将产生如下输出:

send prediction requests output example

结果显示预测收入大于或小于 5 万美元。

如欲详细了解如何提交批量预测任务,请访问“谷歌云 AI 和 ML 产品”页面。批量预测适用于处理大量数据,且对接收预测结果没有延迟要求。运行批量预测所使用的格式与在线预测相同,但使用 Cloud Storage 存储数据。

实例数量较少时批量预测的速度较慢,因此更适合处理大量数据。

第 19 步:清空

分析完训练和推理运行的输出后,可使用以下命令清空云存储,避免产生额外的 GCP 费用。

gsutil rm -r gs://$BUCKET_NAME/$JOB_NAME

如欲了解如何部署更多工作负载,谷歌的“AI 和机器学习产品”页面列出了更多示例和教程

结论

本文旨在帮助新手 AI 从业者大致了解关于 AI 的业务考虑因素,并分步骤详细介绍了如何在英特尔至强平台上部署 TensorFlow 以及如何运行示例训练和推理任务。

英特尔及众多生态系统合作伙伴将为开发人员提供更多资源,帮助大家开启人工智能之旅。请访问英特尔® AI,了解更多关于英特尔 AI 产品的信息,并访问英特尔® AI Builders,查看 AI builder 合作伙伴、AI 博客、解决方案、参考设计和嘉评。

附录

安装 Linux* 操作系统

本部分需要 CentOS-7-x86_64-*1611.iso。该软件组件可从 CentOS 网站下载。

DVD ISO 用于实施和验证本文中的步骤,您还可使用 Everything ISO 和 Minimal ISO。

Linux 安装步骤
  1. 插入 CentOS 7.3 1611 安装光盘/USB。从驱动器启动,并选择 Install CentOS 7
  2. 选择 Date and Time
  3. 如有必要,请选择 Installation Destination
    1. 选择 automatic partitioning 选项。
    2. 单击 Done 返回主页。在看到提示时接受分区向导的所有默认项。
  4. 选择 Network and hostname
    1. 输入"<hostname>" 作为主机名称。
      1. 单击 Apply,主机名称将生效。
    2. 选择 Ethernet enp3s0f3 并点击 Configure,设置外部接口。
      1. General 部分,选中 Automatically connect to this network when it’s available
      2. 根据需要配置外部接口。SaveExit
    3. 选择将接口切换至 ON
    4. 选择将接口切换至 ON
  5. 选择 Software Selection。在左侧标有 Base Environment 的复选框中,选择 Infrastructure server
    1. 单击 Done 返回主页。
    2. 等待 Begin Installation 按钮可用,可能需要几分钟时间。然后点击继续。
  6. 在等待安装步骤完成时,设置 root 密码。
  7. 安装完成时点击 Reboot
  8. 从主设备启动,并以 root 身份登录。

参考资料

  1. 多种定义人工智能的方法
  2. 在 Ubuntu*上安装 TensorFlow(访问时间:2018 年 6 月 25 日)
  3. 英特尔® Optimization for TensorFlow* 安装指南
  4. AI 数据生命周期
  5. TensorFlow 下载与设置
  6. 使用 MLT 在 Kubernetes 上进行 Horovod 分布式训练
  7. 从源代码安装 TensorFlow
  8. 可移植 Foreign Function Interface 库 (Libffi)
  9. Virtualenv
  10. 在 CentOS7 上安装 TensorFlow(访问时间:2018 年 6 月 25 日)
  11. CIFAR-10 数据集
  12. CIFAR-10 详情
  13. TensorFlow 模型
  14. Epoch、批次大小与迭代
  15. 发现微小图像中的多层特征 (PDF),Alex Krizhevsky,2009
  16. 神经网络中的批次大小是什么?
  17. TensorFlow 性能指南
  18. 借助英特尔® 至强® 实现 TensorFlow* 与 Horovod* 的多节点扩展
  19. 集群设计参考架构
  20. PuTTY 下载页面
  21. AI 数据生命周期
  22. Conda 下载指南
  23. 安装 Docker 并了解 CentOS 和 RHEL 7/6 中的基础容器操作 — 第 1 部分
  24. 自定义 Docker 后台程序选项
  25. TensorFlow 性能指南 — 面向 CPU 优化
  26. 启动 AWS 深度学习 AMI
  27. Git 下载指南
  28. 如何在 Ubuntu 16.04 上安装和使用 Docker
  29. 在基于英特尔® 至强® 处理器的集群上借助 Tensorflow* 扩展深度学习的已知最佳方法
  30. 什么是 AWS 深度学习 AMI?
  31. 训练预测入门
  32. 指定机器类型或扩展层级
  33. 麻省理工学院 Thomas W. Malone
  34. TensorFlow 示例
  35. 在 CPU 上最大限度地提升 TensorFlow* 性能:推理工作负载注意事项和建议
有关编译器优化的更完整信息,请参阅优化通知