基于英特尔® 至强™ 处理器 E5 产品家族的多节点分布式内存系统上的 Caffe* 培训
深度神经网络 (DNN) 培训属于计算密集型项目,需要在现代计算平台上花费数日或数周的时间方可完成。 在最近的一篇文章《基于英特尔® 至强™ E5 产品家族的单节点 Caffe 评分和培训》中,我们展示了基于 AlexNet 拓扑的 Caffe* 框架的性能提升 10 倍,单节点培训时间减少到 5 天。 英特尔继续履行 Pradeep Dubey 的博客中列出的机器学习愿景,在本篇技术预览中,我们将展示如何在多节点、分布式内存环境中将 Caffe 的培训时间从数日减少为数个小时。
本文介绍了功能有限且并不用于生产的预览包。 讨论的特性现已配备在英特尔 MKL 2017和英特尔 Caffe 分支 (fork) 中。
Caffe 是伯克利愿景和学习中心 (Berkeley Vision and Learning Center, BVLC) 开发的深度学习框架,是最常见的图像识别社区框架之一。 Caffe 经常作为基准测试与 AlexNet* (一种图像识别神经网络拓扑) 和 ImageNet*(一种标签图像数据库)一起使用。
Caffe 框架在默认情况下并不支持多节点、分布式内存系统,需要做出大范围的调整方可在分布式内存系统上运行。 我们借助英特尔® MPI 库对同步 minibatch 随机梯度下降 (SGD) 算法执行强扩展。 针对一次迭代的计算能够扩展到多个节点,这样,多线程多阶段并行实施便相当于单节点、单线程序列实施。
我们使用三种方法扩展计算:数据并行、模型并行和混合并行。 模型并行是指将模型或重量划分为节点,这样,每个部分的重量便由指定节点所有,每个节点在一个 minibatch 中处理所有数据点。 与重量和重量梯度的通信不同,这需要激活和激活梯度通信,数据并行通常就是这样。
借助这一更高级的分布式并行,我们对所有 2012 年 ImageNet 大规模视觉识别挑战赛 (ILSVRC-2012) 数据集上的 AlexNet 进行了培训,仅用了 5 个多小时的时间便在基于英特尔® 至强™ 处理器 E5 产品家族的 64 节点系统集群上达到 80% 的数据集准确度(位列前五名)。

入门
虽然我们正在努力将本文中列出的新功能整合至以后的英特尔® 数学核心函数库(英特尔® MKL)和英特尔®数学分析加速库(英特尔® DAAL) 版本中,您可以使用本文所附的技术预览包再次生成所演示的性能结果,甚至在您自己的数据集上培训 AlexNet。 预览包括单节点和多节点实施。 请注意,目前的实施仅限于 AlexNet 拓扑,可能无法与其他常见 DNN 拓扑配合使用。
该软件包支持 AlexNet 拓扑,并添加了 ‘intel_alexnet’ 和 ‘mpi_intel_alexnet’ 模型,这与在 ‘bvlc_alexnet’ 中添加两个新的 ‘IntelPack’ 和 ‘IntelUnpack’ 层,以及针对所有层优化卷积、池化、标准化层和基于 MPI 的实施一样。 我们还更改了验证参数以提高矢量化性能,即将验证 minibatch 尺寸从 50 提高到 256,将测试迭代次数从 1,000 减少到 200,从而使验证运行中使用的映像数量保持不变。 数据包在以下文件夹中包含 ‘intel_alexnet’ 模型:
- models/intel_alexnet/deploy.prototxt
- models/intel_alexnet/solver.prototxt
- models/intel_alexnet/train_val.prototxt.
- models/mpi_intel_alexnet/deploy.prototxt
- models/mpi_intel_alexnet/solver.prototxt
- models/mpi_intel_alexnet/train_val.prototxt.
- models/mpi_intel_alexnet/train_val_shared_db.prototxt
- models/mpi_intel_alexnet/train_val_split_db.prototxt
’intel_alexnet’ 和 ’mpi_intel_alexnet’ 模型都支持您培训和测试 ILSVRC-2012 培训集。
如要启动软件包,请确保您的系统中已安装了系统要求和限制部分列出的所有常规 Caffe 依赖性和英特尔软件工具。
在单节点上运行
- 解包软件包。
- 为以下 ‘intel_alexnet’ 模型文件中的数据库、快照位置和图像均值文件指定路径。
- models/intel_alexnet/deploy.prototxt
- models/intel_alexnet/solver.prototxt
- models/intel_alexnet/train_val.prototxt
- 为系统要求和限制部分列出的软件工具设置运行时环境。
- 在 LD_LIBRARY_PATH 环境变量中添加连接至 ./build/lib/libcaffe.so 的路径。
- 按照以下方式设置线程环境:
$> export OMP_NUM_THREADS=<N_processors * N_cores>
$> export KMP_AFFINITY=compact,granularity=fine
注: OMP_NUM_THREADS 必须为大于等于 2 的偶数。
- 使用该命令在单节点上执行计时:
$> ./build/tools/caffe time \
-iterations <number of iterations> \
--model=models/intel_alexnet/train_val.prototxt - 使用该命令在单节点上运行培训:
$> ./build/tools/caffe train \
--solver=models/intel_alexnet/solver.prototxt
在集群上运行
- 解包软件包。
- 为系统要求和限制部分列出的软件工具设置运行时环境。
- 在 LD_LIBRARY_PATH 环境变量中添加连接至 ./build-mpi/lib/libcaffe.so 的路径。
- 按照如下方式,针对要使用的节点数量设置 NP 环境变量:
$> export NP=<number-of-mpi-ranks>
注:通过在每个节点添加一个 MPI 队列可以实现最佳性能。
- 以 x${NP}.hosts 为名,在应用的根目录中创建一个节点文件。 比如,对于 IBM* 平台 LSF*,可以运行以下命令:
$> cat $PBS_NODEFILE > x${NP}.hosts
- 为以下 ‘mpi_intel_alexnet’ 模型文件中的数据库、快照位置和图像均值文件指定路径:
- models/mpi_intel_alexnet/deploy.prototxt,
- models/mpi_intel_alexnet/solver.prototxt,
- models/mpi_intel_alexnet/train_val_shared_db.prototxt
注:在某些系统配置上,共享磁盘系统的性能可能会成为瓶颈。 在这种情况下,建议将映像数据库预先分配到计算节点以实现最佳性能结果。 参阅数据包中的自述文件,了解相关说明。
- 按照以下方式设置线程环境:
$> export OMP_NUM_THREADS=<N_processors * N_cores>
$> export KMP_AFFINITY=compact,granularity=fine
注: OMP_NUM_THREADS 必须为大于等于 2 的偶数。
- 使用该命令执行计时:
$> mpirun -nodefile x${NP}.hosts -n $NP -ppn 1 -prepend-rank \
./build/tools/caffe time \
-iterations <number of iterations> \
--model=models/mpi_intel_alexnet/train_val.prototxt
- 使用该命令运行培训:
$> mpirun -nodefile x${NP}.hosts -n $NP -ppn 1 -prepend-rank \
./build-mpi/tools/caffe train \
--solver=models/mpi_intel_alexnet/solver.prototxt
系统要求和限制
该预览包与未优化的 Caffe 拥有相同的软件关联组件:
- boost* 1.53.0
- opencv* 2.4.9
- protobuf* 3.0.0-beta1
- glog* 0.3.4
- gflags* 2.1.2
- lmdb* 0.9.16
- leveldb* 1.18
- hdf5* 1.8.15
- Red Hat Enterprise Linux* 6.5 或更高版本
英特尔软件工具:
- 英特尔 MKL 11.3 或更高版本
- 英特尔 MPI 库 5.0
硬件兼容性:
此软件仅使用 AlexNet 拓扑进行验证,可能不适用于其他配置。
支持
如有关于该预览包的问题和建议,请联系:mailto:intel.mkl@intel.com。
基于英特尔® 至强™ 处理器 E5 产品家族的多节点分布式内存系统上的 Caffe* 培训的更多相关文章
- 基于英特尔® 至强 E5 系列处理器的单节点 Caffe 评分和训练
原文链接 在互联网搜索引擎和医疗成像等诸多领域,深度神经网络 (DNN) 应用的重要性正在不断提升. Pradeep Dubey 在其博文中概述了英特尔® 架构机器学习愿景. 英特尔正在实现 Prad ...
- 英特尔® 至强® 平台集成 AI 加速构建数据中心智慧网络
英特尔 至强 平台集成 AI 加速构建数据中心智慧网络 SNA 通过 AI 方法来实时感知网络状态,基于网络数据分析来实现自动化部署和风险预测,从而让企业网络能更智能.更高效地为最终用户业务提供支撑. ...
- [转帖]迎战AMD 7nm 64核EPYC 英特尔至强也玩起了胶水以及性价比
迎战AMD 7nm 64核EPYC 英特尔至强也玩起了胶水以及性价比 Intel 最强CPU 从最开始的双核 到现在的 28核 发展迅猛. https://www.cnbeta.com/article ...
- 英特尔与 Facebook 合作采用第三代英特尔® 至强® 可扩展处理器和支持 BFloat16 加速的英特尔® 深度学习加速技术,提高 PyTorch 性能
英特尔与 Facebook 曾联手合作,在多卡训练工作负载中验证了 BFloat16 (BF16) 的优势:在不修改训练超参数的情况下,BFloat16 与单精度 32 位浮点数 (FP32) 得到了 ...
- [转帖]抢先AMD一步,英特尔推出新处理器,支持LPDDR5!
抢先AMD一步,英特尔推出新处理器,支持LPDDR5! http://www.eetop.cn/cpu_soc/6946240.html 2019.10 intel的最新技术发展. 近日,知名硬件爆料 ...
- 面向基于英特尔® 架构的 Android* 的 CoCos2D
Cocos2D 是一款游戏引擎,可与从电脑到手机等多种设备配合使用. 该引擎支持丰富的特性,可帮助创建出色的 2D 游戏.它甚至包含具备全面功能的物理引擎. CoCos2D 的核心元素是基本动画元素( ...
- 借助第八代智能英特尔® 酷睿™ i7 处理器和 Unreal Swarm* 的强大性能快速构建光照
<虚幻竞技场>.<Robo Recall>等游戏的成功与 Unreal Engine 如何处理照明密切相关.原因之一就是静态光映射,但是这需要付出一定的代价:构建照明需要时间, ...
- 【硬件】- 英特尔CPU命名中的产品线后缀
产品线后缀是CPU命名体系里最复杂最难懂的,在英特尔冗长的产品线中,CPU的后缀也是千变万化.不带后缀的CPU一般就是最普通的桌面级处理器,不管是性能还是价格都比较中庸,比如当前性价比较高的Core ...
- 现代英特尔® 架构上的 TensorFlow* 优化——正如去年参加Intel AI会议一样,Intel自己提供了对接自己AI CPU优化版本的Tensorflow,下载链接见后,同时可以基于谷歌官方的tf版本直接编译生成安装包
现代英特尔® 架构上的 TensorFlow* 优化 转自:https://software.intel.com/zh-cn/articles/tensorflow-optimizations-on- ...
随机推荐
- 在ASP.NET中基于Owin OAuth使用Client Credentials Grant授权发放Token
OAuth真是一个复杂的东东,即使你把OAuth规范倒背如流,在具体实现时也会无从下手.因此,Microsoft.Owin.Security.OAuth应运而生(它的实现代码在Katana项目中),帮 ...
- ElasticSearch 5学习(1)——安装Elasticsearch、Kibana和X-Pack
安装准备: 安装Elasticsearch唯一的要求是安装官方新版的Java,包括对应的Jdk. 安装Elasticsearch 首先到官网下载最新版本的Elasticsearch压缩包. 可以使用命 ...
- MVC5 网站开发之六 管理员 2、添加、删除、重置密码、修改密码、列表浏览
目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MVC5 网站开发之三 数据存储层功能实现 MVC5 网站开发之四 业务逻辑层的架构和基本功能 MVC5 网 ...
- SQL Server-聚焦INNER JOIN AND IN性能分析(十四)
前言 本节我们来讲讲联接综合知识,我们在大多教程或理论书上都在讲用哪好,哪个性能不如哪个的性能,但是真正讲到问题的实质却不是太多,所以才有了本系列每一篇的篇幅不是太多,但是肯定是我用心去查找许多资料而 ...
- android 在 ListView 的 item 中插入 GridView 仿微信朋友圈图片显示。
转载请声明出处(http://www.cnblogs.com/linguanh/) 先上张效果图: 1,思路简述 这个肯定是要重写 baseAdapter的了,这里我分了两个数据适配器,一个是自定义的 ...
- ORACLE 11gR2 DG(Physical Standby)日常维护02
环境:RHEL 6.5 + Oracle 11.2.0.4 三.监控DG的状态 3.1监控DG备库的状态 3.2监控主库传输日志链路的状态 四.备库切换为snapshot standby 4.1备库切 ...
- 读书笔记--SQL必知必会09--汇总数据
9.1 聚集函数 聚集函数(aggregate function),对某些行运行的函数,计算并返回一个值. 使用聚集函数可以汇总数据而不必将涉及的数据实际检索出来. 可利用标准的算术操作符,实现更高级 ...
- 从273二手车的M站点初探js模块化编程
前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...
- Centos 上 Tengine安装
安装步骤: 1.系统环境 1.1 更新系统 [root@centos ~]# yum update -y 1.2 查看环境 [root@centos ~]# cat /etc/redhat-relea ...
- 一步一步开发Game服务器(四)地图线程
时隔这么久 才再一次的回归正题继续讲解游戏服务器开发. 开始讲解前有一个问题需要修正.之前讲的线程和定时器线程的时候是分开的. 但是真正地图线程与之前的线程模型是有区别的. 为什么会有区别呢?一个地图 ...