精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

PyTorch 并行訓練 DistributedDataParallel 完整代碼示例

人工智能 深度學習
使用大型數據集訓練大型深度神經網絡 (DNN) 的問題是深度學習領域的主要挑戰。 隨著 DNN 和數據集規模的增加,訓練這些模型的計算和內存需求也會增加。 這使得在計算資源有限的單臺機器上訓練這些模型變得困難甚至不可能。

使用大型數據集訓練大型深度神經網絡 (DNN) 的問題是深度學習領域的主要挑戰。 隨著 DNN 和數據集規模的增加,訓練這些模型的計算和內存需求也會增加。 這使得在計算資源有限的單臺機器上訓練這些模型變得困難甚至不可能。 使用大型數據集訓練大型 DNN 的一些主要挑戰包括:

  • 訓練時間長:訓練過程可能需要數周甚至數月才能完成,具體取決于模型的復雜性和數據集的大小。
  • 內存限制:大型 DNN 可能需要大量內存來存儲訓練期間的所有模型參數、梯度和中間激活。 這可能會導致內存不足錯誤并限制可在單臺機器上訓練的模型的大小。

為了應對這些挑戰,已經開發了各種技術來擴大具有大型數據集的大型 DNN 的訓練,包括模型并行性、數據并行性和混合并行性,以及硬件、軟件和算法的優化。

在本文中我們將演示使用 PyTorch 的數據并行性和模型并行性。

圖片

我們所說的并行性一般是指在多個gpu,或多臺機器上訓練深度神經網絡(dnn),以實現更少的訓練時間。數據并行背后的基本思想是將訓練數據分成更小的塊,讓每個GPU或機器處理一個單獨的數據塊。然后將每個節點的結果組合起來,用于更新模型參數。在數據并行中,模型體系結構在每個節點上是相同的,但模型參數在節點之間進行了分區。每個節點使用分配的數據塊訓練自己的本地模型,在每次訓練迭代結束時,模型參數在所有節點之間同步。這個過程不斷重復,直到模型收斂到一個令人滿意的結果。

下面我們用用ResNet50和CIFAR10數據集來進行完整的代碼示例:

在數據并行中,模型架構在每個節點上保持相同,但模型參數在節點之間進行了分區,每個節點使用分配的數據塊訓練自己的本地模型。

PyTorch的DistributedDataParallel 庫可以進行跨節點的梯度和模型參數的高效通信和同步,實現分布式訓練。本文提供了如何使用ResNet50和CIFAR10數據集使用PyTorch實現數據并行的示例,其中代碼在多個gpu或機器上運行,每臺機器處理訓練數據的一個子集。訓練過程使用PyTorch的DistributedDataParallel 庫進行并行化。

導入必須要的庫

import os
from datetime import datetime
from time import time
import argparse
import torchvision
import torchvision.transforms as transforms
import torch
import torch.nn as nn
import torch.distributed as dist
from torch.nn.parallel import DistributedDataParallel

接下來,我們將檢查GPU。

import subprocess
result = subprocess.run(['nvidia-smi'], stdout=subprocess.PIPE)
print(result.stdout.decode())

因為我們需要在多個服務器上運行,所以手動一個一個執行并不現實,所以需要有一個調度程序。這里我們使用SLURM文件來運行代碼(slurm面向Linux和Unix類似內核的免費和開源工作調度程序),

def main():

# get distributed configuration from Slurm environment

parser = argparse.ArgumentParser()
parser.add_argument('-b', '--batch-size', default=128, type =int,
help='batch size. it will be divided in mini-batch for each worker')
parser.add_argument('-e','--epochs', default=2, type=int, metavar='N',
help='number of total epochs to run')
parser.add_argument('-c','--checkpoint', default=None, type=str,
help='path to checkpoint to load')
args = parser.parse_args()

rank = int(os.environ['SLURM_PROCID'])
local_rank = int(os.environ['SLURM_LOCALID'])
size = int(os.environ['SLURM_NTASKS'])
master_addr = os.environ["SLURM_SRUN_COMM_HOST"]
port = "29500"
node_id = os.environ['SLURM_NODEID']
ddp_arg = [rank, local_rank, size, master_addr, port, node_id]
train(args, ddp_arg)

然后,我們使用DistributedDataParallel 庫來執行分布式訓練。

def train(args, ddp_arg):

rank, local_rank, size, MASTER_ADDR, port, NODE_ID = ddp_arg

# display info
if rank == 0:
#print(">>> Training on ", len(hostnames), " nodes and ", size, " processes, master node is ", MASTER_ADDR)
print(">>> Training on ", size, " GPUs, master node is ", MASTER_ADDR)
#print("- Process {} corresponds to GPU {} of node {}".format(rank, local_rank, NODE_ID))

print("- Process {} corresponds to GPU {} of node {}".format(rank, local_rank, NODE_ID))


# configure distribution method: define address and port of the master node and initialise communication backend (NCCL)
#dist.init_process_group(backend='nccl', init_method='env://', world_size=size, rank=rank)
dist.init_process_group(
backend='nccl',
init_method='tcp://{}:{}'.format(MASTER_ADDR, port),
world_size=size,
rank=rank
)

# distribute model
torch.cuda.set_device(local_rank)
gpu = torch.device("cuda")
#model = ResNet18(classes=10).to(gpu)
model = torchvision.models.resnet50(pretrained=False).to(gpu)
ddp_model = DistributedDataParallel(model, device_ids=[local_rank])
if args.checkpoint is not None:
map_location = {'cuda:%d' % 0: 'cuda:%d' % local_rank}
ddp_model.load_state_dict(torch.load(args.checkpoint, map_location=map_location))

# distribute batch size (mini-batch)
batch_size = args.batch_size
batch_size_per_gpu = batch_size // size

# define loss function (criterion) and optimizer
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(ddp_model.parameters(), 1e-4)


transform_train = transforms.Compose([
transforms.RandomCrop(32, padding=4),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
])

# load data with distributed sampler
#train_dataset = torchvision.datasets.CIFAR10(root='./data',
# train=True,
# transform=transform_train,
# download=False)

# load data with distributed sampler
train_dataset = torchvision.datasets.CIFAR10(root='./data',
train=True,
transform=transform_train,
download=False)

train_sampler = torch.utils.data.distributed.DistributedSampler(train_dataset,
num_replicas=size,
rank=rank)

train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
batch_size=batch_size_per_gpu,
shuffle=False,
num_workers=0,
pin_memory=True,
sampler=train_sampler)

# training (timers and display handled by process 0)
if rank == 0: start = datetime.now()
total_step = len(train_loader)

for epoch in range(args.epochs):
if rank == 0: start_dataload = time()

for i, (images, labels) in enumerate(train_loader):

# distribution of images and labels to all GPUs
images = images.to(gpu, non_blocking=True)
labels = labels.to(gpu, non_blocking=True)

if rank == 0: stop_dataload = time()

if rank == 0: start_training = time()

# forward pass
outputs = ddp_model(images)
loss = criterion(outputs, labels)

# backward and optimize
optimizer.zero_grad()
loss.backward()
optimizer.step()

if rank == 0: stop_training = time()
if (i + 1) % 10 == 0 and rank == 0:
print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}, Time data load: {:.3f}ms, Time training: {:.3f}ms'.format(epoch + 1, args.epochs,
i + 1, total_step, loss.item(), (stop_dataload - start_dataload)*1000,
(stop_training - start_training)*1000))
if rank == 0: start_dataload = time()

#Save checkpoint at every end of epoch
if rank == 0:
torch.save(ddp_model.state_dict(), './checkpoint/{}GPU_{}epoch.checkpoint'.format(size, epoch+1))

if rank == 0:
print(">>> Training complete in: " + str(datetime.now() - start))


if __name__ == '__main__':

main()

代碼將數據和模型分割到多個gpu上,并以分布式的方式更新模型。下面是代碼的一些解釋:

train(args, ddp_arg)有兩個參數,args和ddp_arg,其中args是傳遞給腳本的命令行參數,ddp_arg包含分布式訓練相關參數。

rank, local_rank, size, MASTER_ADDR, port, NODE_ID = ddp_arg:解包ddp_arg中分布式訓練相關參數。

如果rank為0,則打印當前使用的gpu數量和主節點IP地址信息。

dist.init_process_group(backend='nccl', init_method='tcp://{}:{}'.format(MASTER_ADDR, port), world_size=size, rank=rank) :使用NCCL后端初始化分布式進程組。

torch.cuda.set_device(local_rank):為這個進程選擇指定的GPU。

model = torchvision.models. ResNet50 (pretrained=False).to(gpu):從torchvision模型中加載ResNet50模型,并將其移動到指定的gpu。

ddp_model = DistributedDataParallel(model, device_ids=[local_rank]):將模型包裝在DistributedDataParallel模塊中,也就是說這樣我們就可以進行分布式訓練了

加載CIFAR-10數據集并應用數據增強轉換。

train_sampler=torch.utils.data.distributed.DistributedSampler(train_dataset,num_replicas=size,rank=rank):創建一個DistributedSampler對象,將數據集分割到多個gpu上。

train_loader =torch.utils.data.DataLoader(dataset=train_dataset,batch_size=batch_size_per_gpu,shuffle=False,num_workers=0,pin_memory=True,sampler=train_sampler):創建一個DataLoader對象,數據將批量加載到模型中,這與我們平常訓練的步驟是一致的只不過是增加了一個分布式的數據采樣DistributedSampler。

為指定的epoch數訓練模型,以分布式的方式使用optimizer.step()更新權重。

rank0在每個輪次結束時保存一個檢查點。

rank0每10個批次顯示損失和訓練時間。

結束訓練時打印訓練模型所花費的總時間也是在rank0上。

代碼測試

在使用1個節點1/2/3/4個gpu, 2個節點6/8個gpu,每個節點3/4個gpu上進行了訓練Cifar10上的Resnet50的測試如下圖所示,每次測試的批處理大小保持不變。完成每項測試所花費的時間以秒為單位記錄。隨著使用的gpu數量的增加,完成測試所需的時間會減少。當使用8個gpu時,需要320秒才能完成,這是記錄中最快的時間。這是肯定的,但是我們可以看到訓練的速度并沒有像GPU數量增長呈現線性的增長,這可能是因為Resnet50算是一個比較小的模型了,并不需要進行并行化訓練。

圖片

在多個gpu上使用數據并行可以顯著減少在給定數據集上訓練深度神經網絡(DNN)所需的時間。隨著gpu數量的增加,完成訓練過程所需的時間減少,這表明DNN可以更有效地并行訓練。

這種方法在處理大型數據集或復雜的DNN架構時特別有用。通過利用多個gpu,可以加快訓練過程,實現更快的模型迭代和實驗。但是需要注意的是,通過Data Parallelism實現的性能提升可能會受到通信開銷和GPU內存限制等因素的限制,需要仔細調優才能獲得最佳結果。

責任編輯:華軒 來源: DeepHub IMBA
相關推薦

2024-11-04 14:42:12

2020-07-13 09:40:11

PyTorch框架機器學習

2022-12-19 15:16:46

機器學習模型

2023-10-20 16:14:43

2022-08-11 16:29:32

Tekton流水線遷移工作流

2025-09-03 14:01:41

谷歌AI模型

2023-05-05 00:16:08

深度學習圖像分割Pytorch

2020-07-13 14:30:35

人工智能機器學習技術

2024-09-09 06:20:00

PyTorch代碼

2024-01-30 01:12:37

自然語言時間序列預測Pytorch

2020-08-31 14:55:48

代碼開發AI

2019-08-19 00:31:16

Pytorch神經網絡深度學習

2021-07-19 11:56:56

分布式訓練框架

2021-03-25 15:19:33

深度學習Pytorch技巧

2023-11-08 10:25:00

模型技術

2009-10-27 16:18:58

VB.NET復制刪除文

2021-07-27 11:20:10

模型人工智能深度學習

2022-05-05 09:00:00

AI模型數據

2022-04-09 09:11:33

Python

2014-02-12 13:43:50

代碼并行任務
點贊
收藏

51CTO技術棧公眾號

从欧美一区二区三区| 影院欧美亚洲| 欧美一级高清大全免费观看| www.av蜜桃| 青青草视频在线免费观看| 日本欧美一区二区三区乱码| 精品综合久久久久久97| 色欲av无码一区二区三区| 女性女同性aⅴ免费观女性恋| 中文字幕xxx| 国产精品原创视频| 亚洲一区二区精品3399| 日韩精品一区二区三区四区五区 | 最新精品国偷自产在线| 欧美日韩你懂得| 亚洲 欧美 日韩 国产综合 在线 | 欧美激情成人网| gogogogo高清视频在线| 久久久久国产精品人| 国产精品v欧美精品∨日韩| 国产99久久久久久免费看| 国色天香一区二区| 色偷偷噜噜噜亚洲男人| 黄色性生活一级片| 婷婷综合国产| 欧美绝品在线观看成人午夜影视| 那种视频在线观看| 视频在线这里都是精品| 中文字幕人成不卡一区| 色大师av一区二区三区| 肉丝一区二区| 波多野结衣91| 国产伦精品一区二区三区视频黑人 | 日韩精品系列| 盗摄精品av一区二区三区| 成人免费在线视频网址| 中文字幕在线一| 日韩av在线播放中文字幕| 91成人在线播放| 国产在线免费视频| 欧美网站在线| 欧美黑人巨大xxx极品| sm捆绑调教视频| 日韩在线不卡| 一区二区三区国产视频| 免费看黄色的视频| 欧美精美视频| 亚洲视频免费一区| 久久久久久久久久久久| 国产亚洲电影| 在线电影中文日韩| 美国美女黄色片| 日韩欧美视频专区| 久久精品一偷一偷国产| 大地资源高清在线视频观看| 91嫩草亚洲精品| 日韩在线激情视频| 国产一二三四区| 欧美日韩国产高清| 欧美日韩第一页| 日干夜干天天干| 国产精品久久777777毛茸茸 | 韩国黄色一级大片| 中国av在线播放| 亚洲一区在线观看视频| 野外做受又硬又粗又大视频√| 女人黄色免费在线观看| 亚洲超碰97人人做人人爱| 黄网站欧美内射| 英国三级经典在线观看| 色妞www精品视频| 天堂网在线免费观看| 香蕉久久久久久| 日韩欧美国产一区二区在线播放| 一级少妇精品久久久久久久| 亚洲免费成人av在线| 一本色道久久综合狠狠躁篇怎么玩 | 国产亚洲视频一区| 日韩精品一区二区三区中文字幕 | 四虎永久免费在线观看| 欧美少妇xxxx| 欧美国产精品va在线观看| 99热国产在线观看| 波多野结衣久久精品| 欧美性猛交xxxx免费看久久久| 奇米精品一区二区三区| 亚洲人免费短视频| 欧美一级专区免费大片| 在线精品一区二区三区| 久久高清精品| 久久免费视频在线观看| www.日韩一区| 国产成人精品综合在线观看| 欧美亚洲丝袜| 中日韩高清电影网| 欧美综合一区二区| 曰本三级日本三级日本三级| 九九视频免费观看视频精品| 久久久精品欧美| 国产成人一级片| 国产精品亚洲а∨天堂免在线| 久久久久久久久久久久久久一区| 日本中文字幕在线观看| 午夜精品免费在线| 欧美午夜精品理论片| 婷婷精品在线| 欧美成人免费在线观看| 中文字幕在线天堂| av激情亚洲男人天堂| 亚洲欧美日韩精品综合在线观看| 成av人片在线观看www| 欧美久久一二区| 法国伦理少妇愉情| 黄色日韩在线| 亚洲精品日韩激情在线电影| 日本视频www色| 国产成人自拍在线| 亚洲一区二区在线看| 欧美aa免费在线| 日韩精品一区二区三区中文不卡| 日本美女黄色一级片| 亚欧成人精品| 久久久久久一区| bl在线肉h视频大尺度| 538在线一区二区精品国产| 亚洲成人黄色av| 免费在线播放第一区高清av| 国产精品一国产精品最新章节| 黄色在线观看网站| 欧美日韩国产首页| 成人性视频免费看| 日韩和欧美一区二区三区| 国产一区二区黄色| h片精品在线观看| 日韩欧美一二三区| 青青草偷拍视频| 国产美女久久久久| 欧美一级黄色录像片| av一级久久| 久久久精品电影| 国产女主播福利| 日韩码欧中文字| 奇米视频7777| 91日韩在线| 成人午夜在线观看| 看黄网站在线观看| 欧美一区二区三区喷汁尤物| 极品魔鬼身材女神啪啪精品| 国产综合色在线| 狠狠干视频网站| 日韩视频一二区| 久久久影视精品| 性感美女福利视频| 色综合视频在线观看| 欧美成人国产精品一区二区| 日韩av网站免费在线| 椎名由奈jux491在线播放| 亚洲欧美专区| 欧美老女人性生活| 免费观看国产视频| 欧美性猛交xxxxx免费看| a级大片在线观看| 日韩精品亚洲专区| 亚洲一区二区精品在线观看| 国产精品麻豆| 韩国福利视频一区| 蜜芽tv福利在线视频| 欧美日韩中文国产| 欧美日韩亚洲国产另类| 成人av在线网站| 青青草av网站| 国产精品欧美一区二区三区不卡 | 欧美一区二区三区在线免费观看| 国产超碰精品| 精品国产依人香蕉在线精品| 99精品在线视频观看| 五月激情综合网| 永久免费av无码网站性色av| 国产在线国偷精品免费看| www.成年人视频| 国产精品一区二区三区av麻| 91精品久久久久久久久久另类 | 亚洲靠逼com| 在线观看国产免费视频| 蜜臀久久久久久久| 国产一级做a爰片久久毛片男| 神马香蕉久久| 成人黄色av播放免费| 国产不卡123| 最近2019中文字幕mv免费看 | 中文一区在线播放| 亚洲美女精品视频| 日精品一区二区| 黄色一级大片免费| 欧美丝袜丝交足nylons172| 96久久精品| 69堂精品视频在线播放| 欧美黑人巨大xxx极品| 成黄免费在线| 亚洲国产精品专区久久| 91在线你懂的| 色老汉av一区二区三区| 久久香蕉精品视频| 国产精品不卡一区| 日本黄色网址大全| 国产成人亚洲综合a∨婷婷图片 | 国产成人av资源| 久久久精品麻豆| 亚洲作爱视频| 麻豆一区二区三区在线观看| 欧美精选视频在线观看| 精品国产乱码久久久久软件| 亚洲我射av| 国产精品久久久久久亚洲影视| av蜜臀在线| 欧美大尺度激情区在线播放| av在线1区2区| 亚洲欧美日韩天堂| 香蕉视频黄色片| 欧美精品一区二区三区在线播放 | 亚洲精品成人网| 国产黄色片免费观看| 精品视频一区二区不卡| 免费看日批视频| 偷窥国产亚洲免费视频| 黄色成人91| 国产一区二中文字幕在线看| 亚洲校园激情春色| 欧美激情在线观看| av免费在线免费观看| 色婷婷综合成人av| 天天影视久久综合| 中文字幕亚洲第一| 二区在线观看| 一区二区在线免费视频| 久久久资源网| 亚洲桃花岛网站| 久久经典视频| 亚洲夜晚福利在线观看| 美国一级片在线免费观看视频 | 亚洲一区二区三区美女| 校园春色 亚洲| 亚洲精品成a人| 欧美日韩在线国产| 亚洲影视在线播放| 国产一级视频在线播放| 亚洲一区二区黄色| 97免费在线观看视频| 天天影视涩香欲综合网| 国产情侣自拍av| 欧美视频在线观看免费| 无码人妻av免费一区二区三区| 色悠悠亚洲一区二区| 高潮无码精品色欲av午夜福利| 欧美三级电影网| 一级黄色大片免费| 91精品国产综合久久精品性色| 国产成人av免费看| 精品国产伦一区二区三区观看体验| 午夜久久久久久噜噜噜噜| 亚洲成人精品视频在线观看| 亚洲欧美一区二区三| 亚洲四色影视在线观看| 黄色网页网址在线免费| 欧美精品在线极品| 成入视频在线观看| 国产成人精品网站| 996久久国产精品线观看| av资源一区二区| 日韩电影不卡一区| 亚洲精品日韩精品| 午夜精品电影| 日韩av在线第一页| 免费视频一区二区| 女同性αv亚洲女同志| 91麻豆精品一区二区三区| 超碰97av在线| 有坂深雪av一区二区精品| 中文字幕亚洲高清| 欧美日韩卡一卡二| 高潮毛片7777777毛片| 亚洲欧美激情精品一区二区| 麻豆tv入口在线看| 91精品国产91久久久久久不卡| 日韩制服一区| 国产精品免费在线 | 深夜福利一区二区| av3级在线| 国产精品永久免费| 好吊妞视频这里有精品| 一道本无吗dⅴd在线播放一区| 日本黄色片在线观看| 国内精品免费午夜毛片| 成人精品高清在线视频| 国产日韩亚洲精品| 亚洲欧洲美洲一区二区三区| 男人天堂网视频| 国产福利一区二区三区视频在线| 无码 人妻 在线 视频| 一区二区三区四区精品在线视频 | 尤物视频在线看| 国产成人精品视频| 久久精品论坛| 久久久无码中文字幕久...| 日日夜夜免费精品| 日本少妇xxxx| 亚洲三级在线看| 羞羞色院91蜜桃| 精品亚洲一区二区| 91超碰在线免费| 成人在线看片| sdde在线播放一区二区| 国产美女无遮挡网站| 国产高清在线精品| av最新在线观看| 欧美在线短视频| 青青免费在线视频| 午夜精品免费视频| 91精品短视频| 欧美做暖暖视频| 国产综合久久久久久鬼色| 亚洲精品成人无码熟妇在线| 亚洲a一区二区| 精品国产亚洲av麻豆| xxxxx成人.com| 久久精品 人人爱| 日本亚洲导航| 久久综合亚州| 性欧美13一14内谢| 色哟哟一区二区三区| 四虎精品成人影院观看地址| 午夜精品久久久99热福利| 在线综合色站| 国产在线视频在线| 国产乱人伦偷精品视频免下载| 99久久久无码国产精品不卡| 欧美日韩在线精品一区二区三区激情| 黄色国产在线| 国产成人a亚洲精品| 国内精品久久久久久久久电影网| 六月丁香激情网| 26uuu久久综合| 激情视频网站在线观看| 亚洲欧美中文另类| 欧美最新精品| 亚洲欧美久久234| 韩日欧美一区二区三区| 日本黄色录像视频| 日韩欧美不卡一区| sqte在线播放| 麻豆精品蜜桃一区二区三区| 久久成人国产| 国产美女免费网站| 在线成人av影院| 日韩影视在线| 精品久久精品久久| 久久亚洲视频| 在线视频这里只有精品| 日韩一区二区电影在线| 欧美xxx黑人xxx水蜜桃| 精品在线视频一区二区| 久久人人超碰| 99re6热在线精品视频| 日韩精品一区二区三区在线| 91超碰在线免费| 色播亚洲婷婷| 国产乱码精品一区二区三区五月婷| 国产在线拍揄自揄拍| 亚洲欧美日韩精品久久亚洲区 | 精品人体无码一区二区三区| 欧美喷水一区二区| 婷婷丁香在线| 欧美激情第一页在线观看| 美美哒免费高清在线观看视频一区二区 | 色婷婷综合久久久久中文字幕| 欧美国产丝袜视频| 精品国产av鲁一鲁一区| 欧美一区二粉嫩精品国产一线天| 日韩精品2区| 欧美xxxx日本和非洲| 色婷婷国产精品久久包臀| 在线视频婷婷| 国产精品一 二 三| 捆绑调教美女网站视频一区| 久久久久久欧美精品se一二三四| 亚洲老司机av| 香蕉成人app| 午夜欧美福利视频| 亚洲午夜羞羞片| 亚洲成人影院麻豆| 久久riav| 精品午夜久久福利影院| 国产情侣自拍av| 欧美成人免费全部| 欧美自拍偷拍| 亚洲av人人澡人人爽人人夜夜| 欧美日本乱大交xxxxx| 大桥未久在线视频| 国产一二三四五| 国产欧美精品一区|