Pytorch Multi-GPU原理與實現(xiàn)(單機多卡)

最近訓練模型時候想要使用使用多GPU運算來提高計算速度雪隧,參考一些博客以及自己的動手實驗搞懂了Pytorch的Multi-GPU原理。現(xiàn)在稍微整理一下员舵。

原理

通常情況下脑沿,多GPU運算分為單機多卡和多機多卡,兩者在pytorch上面的實現(xiàn)并不相同马僻,因為多機時庄拇,需要多個機器之間的通信協(xié)議等設置。

pytorch實現(xiàn)單機多卡十分容易韭邓,其基本原理就是:加入我們一次性讀入一個batch的數(shù)據(jù), 其大小為[16, 10, 5]措近,我們有四張卡可以使用。那么計算過程遵循以下步驟:

  1. 假設我們有4個GPU可以用女淑,pytorch先把模型同步放到4個GPU中瞭郑。
  2. 那么首先將數(shù)據(jù)分為4份,按照次序放置到四個GPU的模型中鸭你,每一份大小為[4, 10, 5]屈张;
  3. 每個GPU分別進行前項計算過程;
  4. 前向過程計算完后袱巨,pytorch再從四個GPU中收集計算后的結(jié)果假設[4, 10, 5]阁谆,然后再按照次序?qū)⑵淦唇悠饋韀16, 10, 5],計算loss愉老。
    整個過程其實就是 同步模型參數(shù)→分別前向計算→計算損失→梯度反傳

實現(xiàn)

定義模型

import torch
import torch.nn as nn

class Model(nn.Module):
    def __init__(self):
        self.linear = nn.Linear(5, 5)

    def forward(self, inputs):
        output = self.linear(inputs)
        return output

model = Model()

定義優(yōu)化器

optimizer = torch.optim.SGD(model.parameters(), lr = 0.01, momentum=0.9)

實現(xiàn)多GPU

# 假設就一個數(shù)據(jù)
data = torch.rand([16, 10, 5])

# 前向計算要求數(shù)據(jù)都放進GPU0里面
# device = torch.device('cuda:0')
# data = data.to(device)
data = data.cuda()

# 將網(wǎng)絡同步到多個GPU中
model_p = torch.nn.DataParalle(model.cuda(), device_ids=[0, 1,  2, 3])
logits = model_p(inputs)
  
# 接下來計算loss
loss = crit(logits, target)
optimizer.zero_grad()
loss.backward()
optimizer.step()

注:模型要求所有的數(shù)據(jù)和初始網(wǎng)絡被放置到GPU0场绿,實際上并不需要,只需要保證數(shù)據(jù)和初始網(wǎng)路都在你所選擇的多個gpu中的第一塊上就行嫉入。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末焰盗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子咒林,更是在濱河造成了極大的恐慌姨谷,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件映九,死亡現(xiàn)場離奇詭異,居然都是意外死亡瞎颗,警方通過查閱死者的電腦和手機件甥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門捌议,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人引有,你說我怎么就攤上這事瓣颅。” “怎么了譬正?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵宫补,是天一觀的道長。 經(jīng)常有香客問我曾我,道長粉怕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任抒巢,我火速辦了婚禮贫贝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛉谜。我一直安慰自己稚晚,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布型诚。 她就那樣靜靜地躺著客燕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狰贯。 梳的紋絲不亂的頭發(fā)上也搓,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音暮现,去河邊找鬼还绘。 笑死,一個胖子當著我的面吹牛栖袋,可吹牛的內(nèi)容都是我干的拍顷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼塘幅,長吁一口氣:“原來是場噩夢啊……” “哼昔案!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起电媳,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤踏揣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后匾乓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捞稿,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了娱局。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彰亥。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖衰齐,靈堂內(nèi)的尸體忽然破棺而出任斋,到底是詐尸還是另有隱情,我是刑警寧澤耻涛,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布废酷,位于F島的核電站,受9級特大地震影響抹缕,放射性物質(zhì)發(fā)生泄漏澈蟆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一歉嗓、第九天 我趴在偏房一處隱蔽的房頂上張望丰介。 院中可真熱鬧,春花似錦鉴分、人聲如沸哮幢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽橙垢。三九已至,卻和暖如春伦糯,著一層夾襖步出監(jiān)牢的瞬間柜某,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工敛纲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喂击,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓淤翔,卻偏偏與公主長得像翰绊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子旁壮,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 學號:16020120050 姓名:吳言凡 轉(zhuǎn)自:https://www.zhihu.com/question/6...
    離原_ca70閱讀 4,066評論 1 2
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,898評論 2 89
  • 今天下了一天的雨监嗜,到挺涼爽,就是人家都打著傘抡谐,加微信不方便啊裁奇,我也不好意思呀。拖到中午了麦撵,為不礙事我決定...
    昊昊_0f5e閱讀 231評論 0 0
  • 《躍遷》讀后感 初次結(jié)緣于古典老師是2017年上半年讀到一本書《拆掉思維的墻》刽肠, 當時我很受啟發(fā)和激勵溃肪,古典老師的...
    AnnieShi閱讀 515評論 0 3
  • 目標:1、希望孩子擁有更多朋友更加開心快樂音五!智慧多多乍惊!不計較!不抱怨放仗!能夠心平氣和的說話!不著急撬碟!不上火诞挨!我倆不干...
    zl向日葵閱讀 176評論 0 1