1. 程式人生 > >Caffe支援多GPU分散式計算

Caffe支援多GPU分散式計算

    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·叄:全域性執行緒管理器》 一文。