基于英特尔® 至强™ 处理器 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 依赖性和英特尔软件工具。

在单节点上运行

  1. 解包软件包。
  2. 为以下 ‘intel_alexnet’ 模型文件中的数据库、快照位置和图像均值文件指定路径。
    • models/intel_alexnet/deploy.prototxt
    • models/intel_alexnet/solver.prototxt
    • models/intel_alexnet/train_val.prototxt
  3. 系统要求和限制部分列出的软件工具设置运行时环境。
  4. 在 LD_LIBRARY_PATH 环境变量中添加连接至 ./build/lib/libcaffe.so 的路径。
  5. 按照以下方式设置线程环境:
    $> export OMP_NUM_THREADS=<N_processors * N_cores>
    $> export KMP_AFFINITY=compact,granularity=fine

注: OMP_NUM_THREADS 必须为大于等于 2 的偶数。

  1. 使用该命令在单节点上执行计时:
    $> ./build/tools/caffe time \
           -iterations <number of iterations> \
           --model=models/intel_alexnet/train_val.prototxt
  2. 使用该命令在单节点上运行培训:
    $> ./build/tools/caffe train \
           --solver=models/intel_alexnet/solver.prototxt

在集群上运行

  1. 解包软件包。
  2. 系统要求和限制部分列出的软件工具设置运行时环境。
  3. 在 LD_LIBRARY_PATH 环境变量中添加连接至 ./build-mpi/lib/libcaffe.so 的路径。
  4. 按照如下方式,针对要使用的节点数量设置 NP 环境变量:

$> export NP=<number-of-mpi-ranks>

注:通过在每个节点添加一个 MPI 队列可以实现最佳性能。

  1. x${NP}.hosts 为名,在应用的根目录中创建一个节点文件。 比如,对于 IBM* 平台 LSF*,可以运行以下命令:

$> cat $PBS_NODEFILE > x${NP}.hosts

  1. 为以下 ‘mpi_intel_alexnet’ 模型文件中的数据库、快照位置和图像均值文件指定路径:
    • models/mpi_intel_alexnet/deploy.prototxt,
    • models/mpi_intel_alexnet/solver.prototxt,
    • models/mpi_intel_alexnet/train_val_shared_db.prototxt

注:在某些系统配置上,共享磁盘系统的性能可能会成为瓶颈。 在这种情况下,建议将映像数据库预先分配到计算节点以实现最佳性能结果。 参阅数据包中的自述文件,了解相关说明。

  1. 按照以下方式设置线程环境:

$> export OMP_NUM_THREADS=<N_processors * N_cores>
$> export KMP_AFFINITY=compact,granularity=fine

注: OMP_NUM_THREADS 必须为大于等于 2 的偶数。

  1. 使用该命令执行计时:
    $> 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

  1. 使用该命令运行培训:
    $> mpirun -nodefile x${NP}.hosts -n $NP -ppn 1 -prepend-rank \

         ./build-mpi/tools/caffe train \

         --solver=models/mpi_intel_alexnet/solver.prototxt

系统要求和限制

该预览包与未优化的 Caffe 拥有相同的软件关联组件:

英特尔软件工具:

硬件兼容性:

此软件仅使用 AlexNet 拓扑进行验证,可能不适用于其他配置。

支持

如有关于该预览包的问题和建议,请联系:mailto:intel.mkl@intel.com

有关编译器优化的更完整信息,请参阅优化通知