pytorch 多GPU訓練(單機多卡 多機多卡)

2021-10-21 22:49:05 字數 2498 閱讀 3560

首先是資料集的分布處理

需要用到的包:

torch.utils.data.distributed.distributedsampler

torch.utils.data.dataloader

torch.utils.data.dataset

distributedsampler這個包我們用來確保dataloader只會load到整個資料集的乙個特定子集,為每乙個子程序劃分出一部分資料集,以避免不同程序之間資料重複

而我們構造的sampler是在構造dataloader時的乙個引數

先構建乙個自己的torch.utils.data.dataset類的dataset類:

import torch.utils.data as data

class

mydataset

(data.dataset)

:def

__init__

(self, x_train, x_label, y_train, y_label)

:super

(mydataset, self)

.__init__(

) self.x_train = x_train

self.x_label = x_label

self.y_train = y_train

self.y_label = y_label

def__len__

(self)

:return self.x_train.shape[0]

def__getitem__

(self, idx)

:return self.x_train[idx]

, self.x_label[idx]

, self.y_train[idx]

, self.y_label[idx]

初始化dataset:

這裡的x_train, x_label, y_train, y_label是資料集載入進來的變數,根據自己的資料集情況設定變數和數量

train_data = mydataset(x_train, x_label, y_train, y_label)
然後根據構造的dataset物件構造乙個distributedsampler:

train_sampler = torch.utils.data.distributed.distributedsampler(train_data, shuffle=

true

)

然後使用torch.utils.data.dataloader構造自己的dataloader

mydataloader = data.dataloader(mydataset(x_train, x_label, \

y_train, y_label)

, batch_size=

2, sampler = train_sampler)

然後是模型的分布處理

需要用到的包:

torch.nn.parallel.distributeddataparallel

在初始化model之後,進行一步:

model = torch.nn.parallel.distributeddataparallel(model)

# device_ids will include all gpu devices by default

多機多卡需要配置多機間通訊,進行多程序的初始化:

需要用到的包:

torch.distributed

在初始化model之後,進行一步:

torch.distributed.init_process_group(init_method=

'tcp://{}:{}'

.format

(args.ip, args.port)

,backend=

"gloo"

,

引數解析:

backend: 多個機器之間交換資料的協議

init_method: 機器之間交換資料, 需要指定乙個主節點,這代表主節點

world_size: 程序個數,實際上就是機器的個數, 比如四台臺機器一起訓練的話, world_size就為4

rank: 區分主節點和從節點的, 主節點為0

, 剩餘的為了1

-(n-1)

, n為要使用的機器的數量, 也就是world_size

Pytorch中多GPU訓練

參考 在資料越來越多的時代,隨著模型規模引數的增多,以及資料量的不斷提公升,使用多gpu去訓練是不可避免的事情。pytorch在0.4.0及以後的版本中已經提供了多gpu訓練的方式,本文簡單講解下使用pytorch多gpu訓練的方式以及一些注意的地方。這裡我們談論的是單主機多gpus訓練,與分布式訓...

pytorch 多GPU訓練注意事項

1.多gpu訓練記得dataloader dataset dataset train,batch size config train batch shuffle config train shuffle num workers config train workers drop last true ...

Pytorch多GPU訓練踩坑記錄2

使用nn.dataparallel進行多gpu訓練時,對模型進行傳參,有時會出現報錯 runtimeerror chunk expects at least a 1 dimensional tensor nn.dataparallel的作用是將模型和資料分配到各個gpu上,讓其在各自的gpu上訓練,...