Pytorch多GPU訓(xùn)練過(guò)程
1 導(dǎo)入庫(kù)
import torch#深度學(xué)習(xí)的pytoch平臺(tái) import torch.nn as nn from torch.autograd import Variable from torch.utils.data import DataLoader from torch.utils.data import TensorDataset
2 指定GPU
2.1 單GPU聲明
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")2.2 多GPU聲明
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0,1,2,3,4,5' #指定GPU編號(hào)
device = torch.device("cuda") #創(chuàng)建GPU對(duì)象
3 數(shù)據(jù)放到GPU
x_train = Variable(train,requires_grad=True).to(device=device,dtype=torch.float32) #把訓(xùn)練變量放到GPU
4 把模型網(wǎng)絡(luò)放到GPU 【重要】
net = DNN(layers) net = nn.DataParallel(net) net.to(device=device)
重要:nn.DataParallel
net = nn.DataParallel(net) net.to(device=device)
1.使用 nn.DataParallel 打包模型
2.然后用 nn.DataParallel 的 model.to(device) 把模型傳送到多塊GPU中進(jìn)行運(yùn)算
torch.nn.DataParallel(DP)
DataParallel(DP)中的參數(shù):
module即表示你定義的模型device_ids表示你訓(xùn)練時(shí)用到的gpu deviceoutput_device這個(gè)參數(shù)表示輸出結(jié)果的device,默認(rèn)就是在第一塊卡上,因此第一塊卡的顯存會(huì)占用的比其他卡要更多一些。
當(dāng)調(diào)用nn.DataParallel的時(shí)候,input數(shù)據(jù)是并行的,但是output loss卻不是這樣的,每次都會(huì)在output_device上相加計(jì)算
===> 這就造成了第一塊GPU的負(fù)載遠(yuǎn)遠(yuǎn)大于剩余其他的顯卡。
DP的優(yōu)勢(shì)是實(shí)現(xiàn)簡(jiǎn)單,不涉及多進(jìn)程,核心在于使用nn.DataParallel將模型wrap一下,代碼其他地方不需要做任何更改。
例子:

5 其他:多GPU并行
加個(gè)判斷:
if torch.cuda.device_count() > 1:
model = torch.nn.DataParallel(model)
model = Model(input_size, output_size) # 實(shí)例化模型對(duì)象
if torch.cuda.device_count() > 1: # 檢查電腦是否有多塊GPU
print(f"Let's use {torch.cuda.device_count()} GPUs!")
model = nn.DataParallel(model) # 將模型對(duì)象轉(zhuǎn)變?yōu)槎郍PU并行運(yùn)算的模型
model.to(device) # 把并行的模型移動(dòng)到GPU上
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用turtle庫(kù)繪制小豬佩奇(實(shí)例代碼)
這篇文章主要介紹了Python使用turtle庫(kù)繪制小豬佩奇,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
Python進(jìn)階之遞歸函數(shù)的用法及其示例
本篇文章主要介紹了Python進(jìn)階之遞歸函數(shù)的用法及其示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
Python 實(shí)現(xiàn)將大圖切片成小圖,將小圖組合成大圖的例子
這篇文章主要介紹了Python 實(shí)現(xiàn)將大圖切片成小圖,將小圖組合成大圖的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
利用python為運(yùn)維人員寫(xiě)一個(gè)監(jiān)控腳本
近來(lái)在學(xué)習(xí)用Python進(jìn)行一些電腦運(yùn)維的工作。所以下面這篇文章主要給大家介紹了關(guān)于利用python為運(yùn)維人員寫(xiě)一個(gè)監(jiān)控腳本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03
OpenCV物體跟蹤樹(shù)莓派視覺(jué)小車(chē)實(shí)現(xiàn)過(guò)程學(xué)習(xí)
這篇文章主要介紹了OpenCV物體跟蹤樹(shù)莓派視覺(jué)小車(chē)的實(shí)現(xiàn)過(guò)程學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
Python簡(jiǎn)單實(shí)現(xiàn)socket信息發(fā)送與監(jiān)聽(tīng)功能示例
這篇文章主要介紹了Python簡(jiǎn)單實(shí)現(xiàn)socket信息發(fā)送與監(jiān)聽(tīng)功能,結(jié)合實(shí)例形式分析了Python基于socket構(gòu)建客戶端與服務(wù)器端通信相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
20個(gè)解決日常編程問(wèn)題的Python代碼分享
在這篇文章中,主要和大家分享了20個(gè)Python代碼片段,以幫助你應(yīng)對(duì)日常編程挑戰(zhàn)。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟上小編一起了解一下2023-01-01

