使用 TensorFlow* 进行深度学习训练和测试

签署人: Beenish Zia IDZSupport KS 已发布: 08/09/2018 最后更新时间: 07/05/2018

简介

在本教程中,您将学习使用 TensorFlow* 框架和 CIFAR-10 映像识别数据集,训练和测试单节点英特尔® 至强® 可扩展处理器平台系统。将这些分步说明用于预期目的,或用作增强和/或修改的基础。

前提条件

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

使用二进制软件包或通过 GitHub* 源代码安装 TensorFlow。本文描述了一种对运行 CentOS* 7.3 的单节点英特尔® 至强® 可扩展处理器系统成功进行部署和测试的方法。其他安装方法请见 2,18。本文不是为了详细描述如何达到出色性能,而是介绍 TensorFlow 及如何使用 CIFAR-10 数据集对单节点英特尔® 至强® 可扩展处理器系统进行简单的训练和测试。

硬件和软件物料清单

第 II 部分详细介绍了用于本文所推荐验证实施的硬件和软件物料清单。英特尔® Parallel Studio XE 集群版是单节点实施的一个安装选项,提供了多数基本工具和库。从英特尔 Parallel Studio XE 集群版开始入手可缩短对多节点实施进行相同训练和测试所需的学习曲线,因为该软件对于多节点深度学习实施可发挥重要作用。

项目 制造商 型号/版本
硬件    
英特尔® 服务器机箱 英特尔 R1208WT
英特尔® 服务器主板 英特尔 S2600WT
2 - 英特尔® 至强® 可扩展处理器 英特尔 英特尔® 至强® 金牌 6148 处理器
6 - 32 GB LRDIMM DDR4 Crucial* CT32G4LFD4266
1 - 英特尔® SSD 1.2 TB 英特尔 S3520
软件    
CentOS* Linux* 安装 DVD CentOS 7.3.1611
英特尔® Parallel Studio XE 集群版 英特尔 2017.4
TensorFlow*   setuptools-36.7.2-py2.py3-none-any.whl

安装 Linux* 操作系统

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

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

第 1 步.   安装 Linux

1.插入 CentOS 7.3 1611 安装光盘/USB。从盘中启动并选择安装 CentOS 7

2.选择日期时间。

3.必要时选择安装位置

a. 选择自动分区选项。

b. 点击Done,返回主页。在看到提示时接受分区向导的所有默认项。

4.选择网络和主机名称

a. 输入"<hostname>" 用作主机名。

i. 点击Apply,主机名将生效。

b. 选择 Ethernet enp3s0f3 并点击 Configure,设置外部接口。

i. 从General部分,选择Automatically connect to this network when it’s available

ii.根据需要配置外部接口。保存退出。

c. 选择将接口切换至ON

d. 选择将接口切换至ON

5.选择Software Selection。在左侧带有Base Environment标记的框中,选择Infrastructure server

a. 点击Done,返回主页。

b. 等到Begin Installation 按钮可以使用,这可能需要几分钟。然后点击该按钮,继续操作

6.在等待安装步骤完成时,设置根密码。

7.安装完成时点击Reboot

8.从主设备启动,并以根身份登录。

第 2 步.   配置 YUM*

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

  1. 打开/etc/yum.conf 文件进行编辑。
  2. 在主部分下面,附加下行内容:
    Proxy=http://<address>:<port>;
    其中<address> 表示代理服务器地址,<port> 表示 HTTP 端口。
  3. 保存 文件,并退出

禁用更新和附加部分 (extras)。本文中的某些程序需要软件包根据核心进行构建。未来的核心更新可能不会兼容具有该全新核心的软件包,因此我们建议禁用存储库更新和附加部分,以延长本文档的使用寿命。

当 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(下载网址https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

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

检查 GNU 编译器套装* 是否已安装。此安装步骤应为开发工具安装流程的一部分。键入以下内容,验证安装:

gcc --version or whereis gcc

第 5 步.   安装 TensorFlow*

使用 virtualenv18,按照这些步骤安装 TensorFlow:

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

yum –y install epel-release

2.如需安装 TensorFlow,必须安装以下关联组件10

  1. NumPy*:TensorFlow 需要的数字处理软件包
  2. Devel*:支持添加扩展至 Python*
  3. Pip*:支持安装和管理某些 Python 软件包
  4. Wheel*:支持管理 wheel 格式的 Python 压缩软件包 (.whl)
  5. Atlas*:自动调优线性代数软件
  6. Libffi*:库提供 Foreign Function Interface (FFI),以支持一种语言编写的代码调用另一种语言编写的代码。它可为各种调用协定提供可移植高级编程接口11

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 的安装方式有多种18。本文使用了创建隔离 Python 环境的 virtualenv 工具16


pip install --upgrade virtualenv

5.在您的目标目录中创建 virtualenv:


virtualenv --system-site-packages <targetDirectory>

Example: virtualenv --system-site-packages tensorflow

6.激活您的 virtualenv18


source <targetDirectory>/bin/activate

Example: source ~/tensorflow/bin/activate

7.需要时升级您的软件包:


pip install --upgrade numpy scipy wheel cryptography

8.安装最新版 Python 压缩 TensorFlow 软件包:


pip install --upgrade

https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl .OR:


pip install --upgrade tensorflow

Python code sample

第 6 步.   训练卷积神经网络 (CNN)

1.将 CIFAR103 训练数据集下载至 /tmp/ 目录:
下载 cifar-10 python 版本4,8https://www.cs.toronto.edu/~kriz/cifar.html

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 存储库的副本9
Git clone https://github.com/tensorflow/tensorflow.git

7.如果 tensorflow/tensorflow 目录中丢失了模型文件夹,访问模型的 Git:9
https://github.com/tensorflow/models.git:


cd tensorflow/tensorflow

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

8.将 TensorFlow 升级至最新版本,否则在训练模型时会发生错误:


pip install --upgrade tensorflow

9.将目录更改为 CIFAR-10 目录,获取训练和评估 Python 脚本14


cd models/tutorials/image/cifar10

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

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

code line

11.运行训练 Python 脚本,以训练您的网络:


python cifar10_train.py

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

Python code sample

测试脚本和数据集术语

在神经网络术语中:

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

示例:以 1,000 个训练示例和 500 的批次大小为例,完成一个 epoch 需要两次迭代。

如需详细了解 epoch、批次大小和迭代之间的区别,请阅读文章15

在 cifar10_train.py 脚本中:

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

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

  • 参考资料4 中的 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。该命令可在阶跃将要耗尽且训练脚本仍在运行时运行,或在训练脚本完成后运行。

Code line

示例结果

cifar10_train.py 脚本显示了以下结果:

Results of the test

使用本文硬件和软件物料清单部分描述的系统实现了类似于以下显示内容的结果。请注意,这些数字仅用于学习目的,未实施特定的 CPU 优化。

系统 阶跃时间(秒/批次) 准确度
2 - 英特尔® 至强® 金牌处理器 ~ 0.105 60K 阶跃时为 85.8%(约 2 小时)
2 - 英特尔® 至强® 金牌处理器 ~0.109 100K 阶跃时为 86.2%(约 3 小时)

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

参考

1.Thoolihan, n.d.“在 CentOS7 上安装 TensorFlow”,访问时间:2018 年 6 月 25 日。

2.n.d., “在 Ubuntu* 上安装 TensorFlow”,访问时间:2018 年 6 月 25 日。

3.n.d., “在 CentOS7 上安装 TensorFlow”,访问时间:2018 年 6 月 25 日。

4.CIFAR-10 数据集

5.TensorFlow、MNIST 和您自己手写的数字

6.TensorFlow 教程

7.有关在 TensorFlow 上实施 CNN 的教程

8.CIFAR-10 详情

9.TensorFlow 模型

10.安装相关来源的 TensorFlow

11.Libffi

12.TensorFlow 的性能指南

13.神经网络中的批次大小是多少?

14.从微小映像中发现多层特征 (PDF),Alex Krizhevsky,2009

15.Epoch、批次大小与迭代

16.Virtualenv

17.CPU 优化

18.下载和设置

产品和性能信息

1

英特尔的编译器针对非英特尔微处理器的优化程度可能与英特尔微处理器相同(或不同)。这些优化包括 SSE2、SSE3 和 SSSE3 指令集和其他优化。对于在非英特尔制造的微处理器上进行的优化,英特尔不对相应的可用性、功能或有效性提供担保。该产品中依赖于微处理器的优化仅适用于英特尔微处理器。某些非特定于英特尔微架构的优化保留用于英特尔微处理器。关于此通知涵盖的特定指令集的更多信息,请参阅适用产品的用户指南和参考指南。

通知版本 #20110804