Caffe-MPI实现多机多卡训练

    1. MPI简介

对MPI的定义是多种多样的 ,但不外乎下面三个方面,它们限定了MPI的内涵和外延。

  1. MPI是一个库,而不是一门语言。许多人认为MPI就是一种并行语言,这是不准确的。但是,按照并行语言的分类,可以把FORTRAN+MPI或C+MPI 看作是一种在原来串行语言基础之上扩展后得到的并行语言。MPI库可以被FORTRAN77/C/Fortran90/C++调用。从语法上说 它遵守所有对库函数/过程的调用规则,和一般的函数/过程没有什么区别。
  2. MPI是一种标准或规范的代表,而不特指某一个对它的具体实现。迄今为止,所有的并行计算机制造商都提供对MPI的支持,可以在网上免费得到MPI在不同并行计算机上的实现一个正确的MPI程序,可以不加修改地在所有的并行机上运行。
  3. MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准 。MPI虽然很庞大 但是它的最终目的是服务于进程间通信这一目标的。

MPI提供了一种与语言和平台无关,可以被广泛使用的编写消息传递程序的标准 。用它来编写消息传递程序 ,不仅实用、 可移植 、高效和灵活 ,而且和当前已有的实现没有太大的变化。

MPI的内容很多,Caffe-MPI使用的是MPI的简单的基础API,在此略过,不做描述。

    1. Caffe-MPI的运行指令

以我的当前使用的ImageNET抽取的10分类训练为例,两台x64的服务器,硬件是K80的GPU,介绍caffe-MPI的使用。

下面是我的运行命令:

mpirun -host 127.0.0.1,192.168.100.76  -np 4  ./build/tools/caffe train --solver=models/alexnet_songqing/solver.prototxt  --gpu=0,1

使用了四个进程,每台服务器2个进程,每个进程使用0,1这两块卡。

 

    1. Caffe-MPI基本实现

Caffe-MPI的实现框架类似于caffe的单机多卡训练的实现框架,下面是caffe源码内的类之间的关联关系。

      1. Class关联关系图

Caffe-MPI实现多机多卡训练_第1张图片

      1. 基本实现流程

因为caffe-MPI实现中,MPI的主要作用是同时多个机器启动多个进程,及NCCL的初始化同步,并不复杂。

因此,要想研究透caffe-MPI的单机多卡和多机多卡的实现还是要深入的理解NCCL的实现。

NCCL的实现类似于MPI,可惜我没有找到NCCL的跨服务器间通信的源码部分,如果有高手清楚请多多指教,谢谢!
关于caffe源码部分的解析暂时就到这里了,下一步,我要学习一下人脸检测的算法训练。

你可能感兴趣的:(caffe)