Pytorch多GPU訓練過程
1 導入庫
import torch#深度學習的pytoch平臺 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編號 device = torch.device("cuda") #創(chuàng)建GPU對象
3 數據放到GPU
x_train = Variable(train,requires_grad=True).to(device=device,dtype=torch.float32) #把訓練變量放到GPU
4 把模型網絡放到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中進行運算
torch.nn.DataParallel(DP)
DataParallel(DP)中的參數:
module
即表示你定義的模型device_ids
表示你訓練時用到的gpu deviceoutput_device
這個參數表示輸出結果的device,默認就是在第一塊卡上,因此第一塊卡的顯存會占用的比其他卡要更多一些。
當調用nn.DataParallel
的時候,input
數據是并行的,但是output loss
卻不是這樣的,每次都會在output_device
上相加計算
===> 這就造成了第一塊GPU的負載遠遠大于剩余其他的顯卡。
DP的優(yōu)勢是實現簡單,不涉及多進程,核心在于使用nn.DataParallel
將模型wrap一下,代碼其他地方不需要做任何更改。
例子:
5 其他:多GPU并行
加個判斷:
if torch.cuda.device_count() > 1: model = torch.nn.DataParallel(model)
model = Model(input_size, output_size) # 實例化模型對象 if torch.cuda.device_count() > 1: # 檢查電腦是否有多塊GPU print(f"Let's use {torch.cuda.device_count()} GPUs!") model = nn.DataParallel(model) # 將模型對象轉變?yōu)槎郍PU并行運算的模型 model.to(device) # 把并行的模型移動到GPU上
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
PyCharm運行Python代碼時出現"未找到模塊"錯誤解決步驟
在使用python的過程中經常會遇到一個問題,就是叫什么名字的模塊未發(fā)現,下面這篇文章主要給大家介紹了關于PyCharm運行Python代碼時出現"未找到模塊"錯誤的解決步驟,需要的朋友可以參考下2023-11-11TensorFlow的reshape操作 tf.reshape的實現
這篇文章主要介紹了TensorFlow的reshape操作 tf.reshape的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04Python.append()與Python.expand()用法詳解
今天小編就為大家分享一篇Python.append()與Python.expand()用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12