Keras多GPU訓(xùn)練

Keras 2.X版本后可以很方便的支持使用多GPU進行訓(xùn)練了,使用多GPU可以提高我們的訓(xùn)練過程,比如加速和解決內(nèi)存不足問題稚照。

多GPU其實分為兩種使用情況:數(shù)據(jù)并行和設(shè)備并行策精。

數(shù)據(jù)并行將目標模型在多個設(shè)備上各復(fù)制一份,并使用每個設(shè)備上的復(fù)制品處理整個數(shù)據(jù)集的不同部分數(shù)據(jù)莱革。Keras在 keras.utils.multi_gpu_model 中提供有內(nèi)置函數(shù)峻堰,該函數(shù)可以產(chǎn)生任意模型的數(shù)據(jù)并行版本讹开,最高支持在8片GPU上并行。

數(shù)據(jù)并行是指將我們的模型放到多個GPU上去跑茧妒,來處理數(shù)據(jù)集的不同部分萧吠,Keras的keras.utils.multi_gpu_model支持任意模型的數(shù)據(jù)并行,最多支持8個GPU桐筏。我們大多數(shù)時候要用到的都是數(shù)據(jù)并行纸型,其他需求可以參考這篇博客:Keras多GPU及分布式

這里就給出數(shù)據(jù)并行的多GPU訓(xùn)練示例:

from keras.utils.training_utils import multi_gpu_model   #導(dǎo)入keras多GPU函數(shù)

model = get_model()
parallel_model = multi_gpu_model(model, gpus=2) # 設(shè)置使用2個gpu梅忌,該句放在模型compile之前
parallel_model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy'])
hist = parallel_model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs_num, validation_data=(x_test, y_test), verbose=1, callbacks=callbacks)

你還可以指定要哪幾個GPU來跑:

import os

os.environ["CUDA_VISIBLE_DEVICES"] = "3,5"

使用命令“nvidia-smi”可以查看各GPU的使用情況和序號狰腌,上面代碼就是指定用序號為3和5的兩個GPU來跑訓(xùn)練。

其實這樣就可以了牧氮,就是這么簡單琼腔。

但是實際運行中,我還是遇到了一些報錯踱葛。

報錯1

ValueError: Variable batch_normalization_1/moving_mean/biased already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:

我使用單GPU訓(xùn)練的時候沒有問題丹莲,改成多GPU后出現(xiàn)這個問題。這個問題好解決尸诽,將Tensorflow升級到1.4即可甥材。

報錯2

TypeError: can't pickle ...(different text at different situation) objects

查找資料后,發(fā)現(xiàn)可能源于callbacks.ModelCheckpoint() 并進行多 gpu 并行計算時性含,使用姿勢不對導(dǎo)致callbacks 函數(shù)報錯洲赵。

我在代碼中為了保存最優(yōu)的訓(xùn)練模型,加了這個callback:

checkpoint = ModelCheckpoint(filepath='./cifar10_resnet_ckpt.h5', monitor='val_acc', verbose=1,save_best_only=True)

而在改為多GPU訓(xùn)練后商蕴,每次回調(diào)存儲的模型變成了parallel_model叠萍,這會導(dǎo)致報錯,只需要改成依然保存原本的model即可绪商,所以我們需要改一下:

class ParallelModelCheckpoint(ModelCheckpoint):
    def __init__(self,model,filepath, monitor='val_loss', verbose=0,
                 save_best_only=False, save_weights_only=False,
                 mode='auto', period=1):
        self.single_model = model
        super(ParallelModelCheckpoint,self).__init__(filepath, monitor, verbose,save_best_only, save_weights_only,mode, period)

    def set_model(self, model):
        super(ParallelModelCheckpoint,self).set_model(self.single_model)

checkpoint = ParallelModelCheckpoint(model, filepath='./cifar10_resnet_ckpt.h5', monitor='val_acc', verbose=1, save_best_only=True) # 解決多GPU運行下保存模型報錯的問題

其余的不變苛谷,也就是改為依然存儲原本的model即可。還有其他的改法可以參考這篇博客:[Keras] 使用多 gpu 并行訓(xùn)練并使用 ModelCheckpoint() 可能遇到的問題格郁,思路都是一樣的腹殿,只是改法不同。

這樣就能夠成功使用多GPU訓(xùn)練啦理张。


查看作者首頁

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赫蛇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雾叭,更是在濱河造成了極大的恐慌悟耘,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件织狐,死亡現(xiàn)場離奇詭異暂幼,居然都是意外死亡筏勒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門旺嬉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來管行,“玉大人,你說我怎么就攤上這事邪媳【枨辏” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵雨效,是天一觀的道長迅涮。 經(jīng)常有香客問我,道長徽龟,這世上最難降的妖魔是什么叮姑? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮据悔,結(jié)果婚禮上传透,老公的妹妹穿的比我還像新娘。我一直安慰自己极颓,他們只是感情好朱盐,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著讼昆,像睡著了一般托享。 火紅的嫁衣襯著肌膚如雪骚烧。 梳的紋絲不亂的頭發(fā)上浸赫,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音赃绊,去河邊找鬼既峡。 笑死,一個胖子當著我的面吹牛碧查,可吹牛的內(nèi)容都是我干的运敢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼忠售,長吁一口氣:“原來是場噩夢啊……” “哼传惠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起稻扬,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤卦方,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后泰佳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盼砍,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡尘吗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了浇坐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睬捶。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖近刘,靈堂內(nèi)的尸體忽然破棺而出擒贸,到底是詐尸還是另有隱情,我是刑警寧澤觉渴,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布酗宋,位于F島的核電站,受9級特大地震影響疆拘,放射性物質(zhì)發(fā)生泄漏蜕猫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一哎迄、第九天 我趴在偏房一處隱蔽的房頂上張望回右。 院中可真熱鬧,春花似錦漱挚、人聲如沸翔烁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蹬屹。三九已至,卻和暖如春白华,著一層夾襖步出監(jiān)牢的瞬間慨默,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工弧腥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厦取,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓管搪,卻偏偏與公主長得像虾攻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子更鲁,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

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