Caffe支持多GPU分布式计算

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tianrolin/article/details/52513721

    Caffe允许多GPU间并行计算,多GPU模式工作模式为“不共享数据,却共享网络”。当目标机器GPU数量大于1时,Caffe将允许多个solver存在,且应用到不同的GPU上去。

vector<int> gpus;
get_gpus(&gpus);
if (gpus.size() > 0)
{
    Caffe::SetDevice(gpus[0]);
    Caffe::set_mode(Caffe::GPU);
    // 启用多个solver
    Caffe::set_solver_count(gpus.size());
}


    其中第一个solver会成为root_solver_,其它solver就会成为shared_solver。root_solver_有很大一部分特权,具体有以下几点:


    1. LOG(INFO)日志信息:避免产生多份重复的信息,因此只允许root_solver_输出日志信息;

    2. 测试:只有root_solver_才能测试,应该是为了减少冗余计算;

    3.统计结果:只有root_solver_才能输出统计结果,原因同第一点。


    直接使用solver_count的地方是DataLayer层中的DataReader对象。每一个DataLayer都有一个DataReader,DataReader工作方式为异步线程,程序允许同时执行多个DataLayer,但是不可以有多个ConvLayer。


    ps: 本文主要参考Physcal《从零开始山寨Caffe·叁:全局线程管理器》 一文。


猜你喜欢

转载自blog.csdn.net/tianrolin/article/details/52513721