深度學習Windows單機多GPU並行

2021-10-11 13:22:49 字數 2373 閱讀 9182

pytorch1.7  win10  兩張titan x pascal

一、torch.nn.parallel.distributeddataparallel

1、接收並行呼叫傳入的引數

parser = argparse.argumentparser()

parser.add_argument("--local_rank", type=int)

args = parser.parse_args()

2、設定當前程序gpu

torch.cuda.set_device(args.local_rank)

3、通訊初始化,windows pytorch 1.7所用版本不支援nccl,所以用gloo,world_size代表程序數量

torch.distributed.init_process_group(backend.gloo, init_method='file:///sharefile', rank=args.local_rank, world_size=2)

4、dataset

train_dataset = datasets.cifar100('./data/cifar100', train=true, download=true, transform=transforms.compose([

transforms.totensor(), transforms.normalize((0.1307,), (0.3081,))]))

test_dataset = datasets.cifar100('./data/cifar100', train=false, transform=transforms.compose([

transforms.totensor(), transforms.normalize((0.1307,), (0.3081,))]))

5、sampler

train_sampler = torch.utils.data.distributed.distributedsampler(train_dataset)

test_sampler = torch.utils.data.distributed.distributedsampler(test_dataset)

6、loader

train_loader = torch.utils.data.dataloader(train_dataset, batch_size=500, shuffle=false, num_workers=2, sampler=train_sampler)

test_loader = torch.utils.data.dataloader(test_dataset, 500, shuffle=false, num_workers=2, sampler=test_sampler)

7、device   

device = torch.device("cuda", args.local_rank)

8、model

model = digitalnet().to(device)

model = torch.nn.parallel.distributeddataparallel(model, device_ids=[args.local_rank], output_device=args.local_rank)

9、呼叫,nproc_per_node程序數量,nnodes機子數量

python -m torch.distributed.launch --nproc_per_node=2 --nnodes=1  digitalnetparallel.py

10、結果

cifar100資料集

雙卡,batch=500 num_workers=2時,相當於batch=1000,10個epoch用時123.25秒

單卡,batch=1000 num_workers=0時,10個epoch用時174.05秒

雙卡,gpu1占用視訊記憶體6939mb,gpu2占用視訊記憶體5006mb。

單卡,gpu占用視訊記憶體8703mb。

雙卡速度比單卡快速了41%。

二、torch.nn.dataparallel

cifar100資料集

在使用更簡單資料並行torch.nn.dataparallel,速度沒有提公升,小批量還會慢幾秒。

if torch.cuda.device_count() > 1:

model = torch.nn.dataparallel(model, device_ids=[0, 1])

ubuntu 18.4同樣硬體條件

通訊使用nccl

雙卡,batch=500 num_workers=2時,相當於batch=1000,10個epoch用時63.33秒

單卡,batch=1000 num_workers=0時,10個epoch用時136.43秒

linux下速度更快。

書單 機器學習 深度學習

機器學習實踐 有原始碼 統計學習 李航 機器學習 周志華 白面機器學習 深度學習 goodfellow等 凸優化 pattern recognition and machine learning the elements of statistical learning 台大機器學習基石 cs231,...

深度學習多模態融合 深度學習用於多模態語義學習簡述

由於深度學習具有通過逐層抽象來形成良好特徵的能力,因此可利用該方法來形成不同型別資料的聯合特徵表示。具體方法有深度典範相關分析 deep caconical correlation analysis,deep cca 多模態深度學習以及多模態玻爾茲曼機等。這些方法的基本思路是通過不同的深層模型 如c...

windows深度學習環境搭建

1.安裝anaconda 國內映象源 正常雙擊安裝,自己更換安裝目錄。安裝後 遇到的問題如下 1 在安裝後測試安裝終端輸入 conda version 得到的結果 conda 不是內部或外部命令,也不是可執行的程式或批處理檔案。這是因為環境變數導致的這個問題。anaconda scripts 目錄到...