Pytorch多GPU訓(xùn)練過程
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)文章
PyCharm運(yùn)行Python代碼時(shí)出現(xiàn)"未找到模塊"錯(cuò)誤解決步驟
在使用python的過程中經(jīng)常會(huì)遇到一個(gè)問題,就是叫什么名字的模塊未發(fā)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于PyCharm運(yùn)行Python代碼時(shí)出現(xiàn)"未找到模塊"錯(cuò)誤的解決步驟,需要的朋友可以參考下2023-11-11TensorFlow的reshape操作 tf.reshape的實(shí)現(xiàn)
這篇文章主要介紹了TensorFlow的reshape操作 tf.reshape的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Python.append()與Python.expand()用法詳解
今天小編就為大家分享一篇Python.append()與Python.expand()用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12python基礎(chǔ)之編碼規(guī)范總結(jié)
今天帶大家來學(xué)習(xí)python基礎(chǔ)知識(shí),文中對(duì)python編碼規(guī)范作了詳細(xì)的介紹,對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05用Python進(jìn)行一些簡(jiǎn)單的自然語(yǔ)言處理的教程
這篇文章主要介紹了用Python進(jìn)行一些簡(jiǎn)單的自然語(yǔ)言處理的教程,主要用到了pandas和collections庫(kù),需要的朋友可以參考下2015-03-03簡(jiǎn)單了解python關(guān)系(比較)運(yùn)算符
這篇文章主要介紹了簡(jiǎn)單了解python關(guān)系(比較)運(yùn)算符,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07基于Python pyecharts實(shí)現(xiàn)多種圖例代碼解析
這篇文章主要介紹了基于Python pyecharts實(shí)現(xiàn)多種圖例代碼解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Python運(yùn)行中頻繁出現(xiàn)Restart提示的解決辦法
在編程的世界里,遇到各種奇怪的問題是家常便飯,但是,當(dāng)你的 Python 程序在運(yùn)行過程中頻繁出現(xiàn)“Restart”提示時(shí),這可能不僅僅是令人頭疼的小問題,而是隱藏著深層次的原因,本文將深入探討這一現(xiàn)象,并提供解決方案,需要的朋友可以參考下2025-04-04Python中嘗試多線程編程的一個(gè)簡(jiǎn)明例子
這篇文章主要介紹了Python中嘗試多線程編程的一個(gè)簡(jiǎn)明例子,由于GIL的存在,Python中的多線程編程一個(gè)是熱點(diǎn)和難點(diǎn)問題,需要的朋友可以參考下2015-04-04