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

訓練大模型也不怕,輕量級TorchShard庫減少GPU內存消耗,API與PyTorch相同

新聞 人工智能
訓練大模型時,如何優雅地減少 GPU 內存消耗?你不妨試試這個 TorchShard 庫,兼具模型并行與數據并行等特點,還具有與 PyTorch 相同的 API 設計。

[[413467]]

模型并行性能夠促進視覺任務的性能。但是目前,還沒有一個標準庫可以讓我們像采用混合精度等其他 SOTA 技術那樣輕松地采用模型并行性。

最近,馬里蘭大學帕克分校計算機科學系的研究者 Kaiyu Yue 開源了一個工具TorchShard,這是一個輕量級的引擎,用于將 PyTorch 張量切片成并行的 shard。當模型擁有大量的線性層(例如 BERT、GPT)或者很多類(數百萬)時,TorchShard 可以減少 GPU 內存并擴展訓練規模,它具有與 PyTorch 相同的 API 設計。

項目地址:https://github.com/KaiyuYue/torchshard

BERT 和 GPT 等超大模型正在成為 NLP 領域應用中的趨勢。然而訓練這種大模型面臨內存限制的問題,為了解決這個難題,研究者使用 Megatron-LM 和 PyTorch-Lightning 模型并行性擴大訓練。其中,Megatron-LM 只專注于大規模訓練語言模型,而 PyTorch-Lightning 僅基于 sharded 優化器狀態和梯度,如 DeepSpeed。

在計算機視覺任務中,我們會在訓練基于 Transformer、MLP 模型或在數百萬個類中訓練模型時遇到同樣的問題。TorchShard 的目標是:

  • 建立一個標準的 PyTorch 擴展庫,用于使用模型并行性進行擴展訓練;
  • 以一種簡單、自然的方式使用 PyTorch。

TorchShard 是對模型并行單元(mpu)的徹底重寫,是 Megatron-LM 核心。最重要的是,TorchShard 具有與 PyTorch 相同的 API 設計,這意味著所有的子類和子函數都保持與 PyTorch 相同。例如,如果你想讓原來的線性層 torch.nn. linear 是并行的,只需將 torch 變成 ts,并調用帶有 dim 參數的子類 nn.ParallelLinear,如下所示:

  1. import torchshard as ts 
  2.  
  3. ts.init_process_group(group_size=2) # init parallel groups 
  4.  
  5. m = torch.nn.Sequential( 
  6.  
  7. torch.nn.Linear(2030, bias=True), 
  8.  
  9. ts.nn.ParallelLinear(3030, bias=True, dim=None), # equal to nn.Linear() 
  10.  
  11. ts.nn.ParallelLinear(3030, bias=True, dim=0), # parallel in row dimension 
  12.  
  13. ts.nn.ParallelLinear(3030, bias=True, dim=1), # parallel in column dimension 
  14.  
  15. ).cuda() 
  16.  
  17. x = m(x) # forward 
  18.  
  19. loss = ts.nn.functional.parallel_cross_entropy(x, y) # parallel loss function 
  20.  
  21. loss.backward() # backward 
  22.  
  23. torch.save( 
  24.  
  25. ts.collect_state_dict(m, m.state_dict()), 'm.pt') # save model state 

除此之外,TorchShard 還支持與 DDP 一起使用時的各種特性,保存和加載 shard checkpoints,初始化 shard 參數,以及跨多臺機器和 GPU 處理張量。具體如下:

  • torchshard 包含必要的功能和操作,如 torch 包;
  • torchshard.nn 包含圖形的基本構建塊,如 torch.nn 包;
  • torchshard.nn.functional 包含 torchshard.nn 的相應功能操作,如 torch.nn.functional 包;
  • torchshard.distributed 包含處理分布式張量和組的基本功能,如 torch.distributed 包更容易使用。

如何開始 TorchShard?

安裝要求:Python 版本 3.6 以上(含)以及 PyTorch 版本 1.9.0 以上(含)。通過 pip 安裝 TorchShard 庫:

  1. pip install torchshard 

這里以 ImageNet 上訓練 ResNet-50 為例,展示僅需幾行代碼就能在項目中使用 TorchShard。通常 ResNet-50 設計范式包含兩部分:卷積塊和全連接層,如下圖 1 所示。一般來說,由于大量的類依賴于數據集,最后的線性層比卷積塊有更多的參數。所以我們切片最后一個線性層來檢查其最大尺寸。

圖 1:DDP 以及 DDP + TorchShard 前向訓練流。

在上圖 1 中,左邊展示了傳統的 DDP 訓練范式。假設我們有兩個等級,DDP 將強制每個等級有重復的模型參數。然而,TorchShard 會將層級參數切片到不同的等級,從而減少整個 GPU 內存。現在向 ImageNet 官方訓練腳本添加一些代碼,修改后的版本已經成為 TorchShard 項目的一部分。

首先將 torchshard import 進來:

  1. import torchshard as ts 

然后需要初始化模型并行的進程組,就像初始化 DDP 進程組的方法一樣。只需要設置一個功能參數來告訴 torchshard 應該從目標層中切片出多少個 shard。

  1. ts.distributed.init_process_group(group_size=args.world_size) 

接下來將模型轉換為并行版本,其中可以直接將整個模型輸入到轉換輔助函數中,無需特殊處理。

  1. import resnet 
  2.  
  3. model = resnet.__dict__[args.arch](pretrained=args.pretrained) 
  4.  
  5. ts.nn.ParallelLinear.convert_parallel_linear( 
  6.  
  7. model, dim=args.model_parallel_dim 
  8.  
  9.  
  10. print("=> paralleling model'{}'".format(args.arch)) 

此外,不要忘記損失函數 torchshard.nn.ParallelCrossEntropy ,該損失函數可以根據輸入張量在原始 PyTorch 版本和并行版本之間切換運行模式。例如,如果輸入張量是由 torchshard 并行層產生的,torchshard.nn.ParallelCrossEntropy 將以并行方式計算損失值。

  1. criterion = ts.nn.ParallelCrossEntropyLoss().cuda(args.gpu) 

當模型并行模式(TorchShard)和數據并行模式(DDP)一起工作時,我們需要處理并行層的輸入。每個等級中的參數和訓練數據都不同。因此,我們在 ResNet forward 中的并行線性層之前收集輸入張量。

  1. x = ts.distributed.gather(x, dim=0) # gather input along the dim of batch size 
  2.  
  3. x = self.fc(x) 

同樣地,我們在計算損失值之前收集目標張量。

  1. output = model(images) 
  2.  
  3. if args.enable_model_parallel: 
  4.  
  5. target = ts.distributed.gather(target, dim=0
  6.  
  7. loss = criterion(output, target) 

最后,使用 TorchShard 函數保存和加載 checkpoints 非常簡單。TorchShard 提供了名為 torchshard.collect_state_dict 基本函數用于保存 checkpoints,torchshard.relocate_state_dict 用于加載 checkpoints。

保存檢查點:

  1. state_dict = model.state_dict() 
  2.  
  3. # collect states across all ranks 
  4.  
  5. state_dict = ts.collect_state_dict(model, state_dict) 
  6.  
  7. if ts.distributed.get_rank() == 0
  8.  
  9. torch.save(state_dict, 'resnet50.pt') # save as before 

加載檢查點:

  1. if ts.distributed.get_rank() == 0
  2.  
  3. state_dict = torch.load('resnet50.pt'
  4.  
  5. # relocate state_dict() for all ranks 
  6.  
  7. state_dict = ts.relocate_state_dict(model, state_dict) 
  8.  
  9. model.load_state_dict(state_dict) # load as before 

現在我們已經完成了在 ImageNet 上為 shard 訓練添加代碼, 然后可以通過增加類的數量來擴展它,即最后一個線性層的輸出特征維度。訓練腳本可以在 torchshard/project/imagenet 中找到。下圖展示了在 8 個 NVIDIA TITAN-XP (12196 MiB) GPU 、類數 ≤ 1000000 上和 16 個 GPU 、類數為 2000000 上訓練 ResNet-50 擴展能力。

圖 2:在不同并行策略下使用標準 ResNet 訓練設置(即輸入大小 224 和批量大小 256)的 GPU 內存成本。

使用 AMP 與 ZeRO

TorchShard 以簡單自然的 PyTorch 方式與其他技術(例如自動混合精度 AMP 以及 ZeRO)一起混合使用。

  1. # gradscaler 
  2.  
  3. scaler = torch.cuda.amp.GradScaler(enabled=args.enable_amp_mode) 
  4.  
  5.  
  6.  
  7. with torch.cuda.amp.autocast(enabled=args.enable_amp_mode): # compute output 
  8.  
  9. output = model(images) 
  10.  
  11.  
  12.  
  13. if args.enable_model_parallel: 
  14.  
  15. target = ts.distributed.gather(target, dim=0
  16.  
  17. loss = criterion(output, target) 
  18.  
  19.  
  20.  
  21. # compute gradient and do SGD step 
  22.  
  23. scaler.scale(loss).backward() 
  24.  
  25. scaler.step(optimizer) 
  26.  
  27. scaler.update() 
  28.  
  29. optimizer.zero_grad() 

圖 3:在不同并行策略以及 AMP 下,使用標準的 ResNet 訓練設置時(輸入尺寸 224,batch 大小 256),使用 GPU 內存的成本。

ZeRO 是 DeepSpeed 的核心,與 PyTorch >= 1.9.0 一起使用。如果你想測試一個函數,請安裝最新版本的腳本來運行,代碼如下:

  1. from torch.distributed.optim import ZeroRedundancyOptimizer 
  2.  
  3.  
  4.  
  5. if args.enable_zero_optim: 
  6.  
  7. print('=> using ZeroRedundancyOptimizer'
  8.  
  9. optimizer = torch.distributed.optim.ZeroRedundancyOptimizer( 
  10.  
  11. model.parameters(), 
  12.  
  13. optimizer_class=torch.optim.SGD, 
  14.  
  15. lr=args.lr, 
  16.  
  17. momentum=args.momentum, 
  18.  
  19. weight_decay=args.weight_decay) 
  20.  
  21. else
  22.  
  23. optimizer = torch.optim.SGD(model.parameters(), args.lr, 
  24.  
  25. momentum=args.momentum, 
  26.  
  27. weight_decay=args.weight_decay) 

圖 4:在不同的并行策略和 ZeRO 優化器下,在標準 ResNet 訓練設置(輸入大小 224 和批大小 256)的 GPU 內存成本。

此外,TorchShard 還提供了基本的 Python API 以及和相應的模板文件,以簡化自定義并行層的實現。

研究者將持續開發 TorchShard,如 TorchShard 下一個特性是新的數據采樣器 torchshard.utils.data.DistributedGroupSampler,它的命名遵循 torch.utils.data.DistributedSampler。該采樣器旨在幫助用戶構建 M-way 數據并行、N-way 模型并行,使得其就像 DDP 中的 DistributedSampler 一樣簡單。用戶唯一要做的就是設置模型并行組號,然后 DistributedGroupSampler 來確保同一模型并行組中的模塊具有相同的訓練數據。

 

責任編輯:張燕妮 來源: 機器之心Pro
相關推薦

2023-07-12 10:04:20

模型訓練

2011-07-06 09:11:40

MozillaFirefox

2013-05-15 10:20:16

Paas虛擬化

2025-01-09 08:01:10

2024-08-05 13:30:00

2022-08-10 12:21:07

PythonWebBottle

2024-01-08 13:38:00

AI模型

2024-08-16 16:37:50

2023-11-24 11:11:08

Python數據庫

2010-11-10 10:57:43

T-SQL代碼

2025-05-09 01:00:00

大語言模型LLMGPU內存

2012-07-18 10:09:55

輕量級移動客戶端開發類庫

2025-05-30 08:45:00

數據模型訓練

2022-05-19 14:43:58

PyTorch訓練

2024-06-12 09:52:49

2009-07-17 14:38:51

輕量級Swing組件

2009-07-14 18:05:28

輕量級Swing組件

2023-11-16 16:37:02

2010-01-11 10:48:15

2011-12-22 11:02:04

輕量級Linux
點贊
收藏

51CTO技術棧公眾號

国产精品久久久久久久天堂| 亚洲丁香久久久| 好色先生视频污| 亚洲免费一级片| 爽爽淫人综合网网站| 在线视频国产日韩| 99久久久无码国产精品性波多 | 国产黄色免费在线观看| 狠狠色综合播放一区二区| 97超级碰碰人国产在线观看| 蜜桃视频最新网址| 亚洲精品**不卡在线播he| 欧美一级专区免费大片| 中文字幕欧美人妻精品一区| 欧美人与牲禽动交com| 欧美国产日韩精品免费观看| 国产一区免费视频| 国产视频第一页| 日韩精品欧美精品| 97视频网站入口| 国产美女福利视频| 不卡日本视频| 亚洲女在线观看| 国产ts在线观看| 四虎精品一区二区免费| 色综合视频一区二区三区高清| 国产一区精品在线| 亚洲第一黄色片| 九九九久久久精品| 国产999在线观看| 国产69精品久久久久久久久久| 一本精品一区二区三区| 中文字幕亚洲激情| 亚洲v国产v欧美v久久久久久| 久久久久97| 精品久久久三级丝袜| 九九热精品国产| 久久69成人| 欧美亚州韩日在线看免费版国语版| 国产男女免费视频| 爱情岛亚洲播放路线| 自拍偷拍亚洲综合| 国产精品av免费| 日本激情在线观看| 国产精品久久久久久久裸模| 日本一区二区视频| 韩日视频在线| 久久精品亚洲一区二区三区浴池| 国内外成人免费视频| 亚洲精品字幕在线观看| 成人综合在线观看| 91久久极品少妇xxxxⅹ软件| 国产普通话bbwbbwbbw| 九一九一国产精品| 亚洲japanese制服美女| 国产伦理一区二区| 国产精品一区二区久久不卡| 超碰在线97av| 天堂av在线7| 国产视频一区在线播放| 杨幂一区欧美专区| 91网在线看| 婷婷亚洲久悠悠色悠在线播放 | a毛片不卡免费看片| 亚洲欧洲日韩综合一区二区| 裸体大乳女做爰69| missav|免费高清av在线看| 午夜精品视频一区| www黄色在线| 久久青草视频| 日韩女优视频免费观看| 性色av蜜臀av浪潮av老女人| 天堂99x99es久久精品免费| 亚洲欧美三级在线| a级黄色免费视频| 欧美精品自拍| 欧美最近摘花xxxx摘花| 这里只有精品国产| 国产电影一区二区三区| 国产一区二区不卡视频在线观看| 黄色在线免费观看大全| 18成人在线视频| 性一交一乱一伧国产女士spa| 欧美大片免费高清观看| 91麻豆精品国产综合久久久久久| 免费不卡的av| 精品久久美女| 久久久久日韩精品久久久男男| 五月天婷婷导航| 国产精品中文字幕一区二区三区| 九九九九九九精品| 免费在线看a| 懂色av影视一区二区三区| 午夜免费看毛片| 国产在线播放精品| 日韩最新在线视频| 日本一区二区三区免费视频| 免费不卡在线观看| 国产精品午夜av在线| av电影在线观看一区二区三区| 一区二区三区四区不卡在线| 手机在线看福利| 国产欧美自拍一区| 色偷偷888欧美精品久久久| 亚洲天堂日韩av| 精品无人区卡一卡二卡三乱码免费卡 | 日韩网红少妇无码视频香港| 九色综合国产一区二区三区| 欧美日韩综合另类| 手机在线免费看av| 欧美军同video69gay| 内射中出日韩无国产剧情| 中文无码久久精品| 国产精品人成电影在线观看| 视频一区二区免费| 亚洲精品午夜久久久| 日本人视频jizz页码69| 欧美巨大xxxx| 欧美夫妻性视频| 一区二区三区免费在线| 久久久午夜精品理论片中文字幕| 青草青青在线视频| 久久九九精品视频| 精品国偷自产在线视频| 日本熟妇一区二区三区| 久久综合av免费| 国产 日韩 亚洲 欧美| 麻豆一区在线| 久久综合久久八八| 91久久精品国产91性色69| 欧美高清在线一区| 精品久久久噜噜噜噜久久图片| 亚洲日产av中文字幕| 97精品一区二区三区| 亚洲精品一区二区口爆| 亚洲午夜久久久久中文字幕久| 天天做天天干天天操| 天天做天天爱天天综合网2021 | 99久久人爽人人添人人澡| 精品国产欧美成人夜夜嗨| 中文字幕一区二区三区人妻四季| 国产婷婷色一区二区三区四区| 亚洲人成无码www久久久| 免费看成人吃奶视频在线| 欧美一区二区色| 三级毛片在线免费看| 一本大道久久a久久综合| 国产精品1000部啪视频| 免费国产自线拍一欧美视频| 久久99精品久久久水蜜桃| 日韩激情电影免费看| 精品一区电影国产| 亚洲天堂一区在线| 久久久不卡网国产精品二区| 男女视频一区二区三区| 成人区精品一区二区婷婷| 国产精品国产三级国产专播精品人| 神马电影在线观看| 在线观看亚洲精品| 女性裸体视频网站| 国产精品一区二区三区四区| 日本精品久久久久久久久久| 美国成人xxx| 国产精品国语对白| 天堂资源在线中文| 日韩一区二区在线观看| 国产精品50页| 久久久久99精品国产片| 亚洲欧美在线精品| 欧美国产日本| 久久综合中文色婷婷| 国产福利亚洲| 欧美激情精品久久久| 毛片在线播放网站| 4438成人网| 日韩xxxxxxxxx| 国产无遮挡一区二区三区毛片日本| 亚洲色图 在线视频| 亚洲视频狠狠| 亚洲成人精品电影在线观看| 视频在线亚洲| 国产成人精品免高潮费视频| 黄色一级大片在线免费看产| 亚洲国产精品一区二区久| 色老头一区二区| 亚洲狼人国产精品| 日本少妇高潮喷水xxxxxxx| 精品一区二区三区免费毛片爱| 蜜臀av色欲a片无码精品一区| 国产乱码精品一区二区三区四区 | 国产高清视频免费| 日韩欧美中文字幕在线观看| 亚洲欧美精品aaaaaa片| 99re这里只有精品6| 三区视频在线观看| 亚洲影音先锋| 喜爱夜蒲2在线| 国产精品亚洲二区| 97视频资源在线观看| 日本h片久久| 97婷婷大伊香蕉精品视频| 欧美13一16娇小xxxx| 日韩精品欧美国产精品忘忧草| 国产精品一区二区黑人巨大| 色狠狠色噜噜噜综合网| 青娱乐国产在线| 亚洲欧美综合色| 91中文字幕永久在线| 成人免费观看av| 污污视频网站在线| 日本vs亚洲vs韩国一区三区二区 | 亚洲精品一区二区三区蜜桃久| 国内精品国产成人国产三级粉色| 91精品综合视频| yw.尤物在线精品视频| 97色在线观看免费视频| 最新黄网在线观看| 日韩在线中文字幕| 大胆av不用播放器在线播放| 日韩精品极品视频| 免费观看a视频| 日韩欧美一级二级三级| 亚洲天堂手机在线| 欧美最猛性xxxxx直播| 日本午夜视频在线观看| 亚洲二区在线观看| 强行糟蹋人妻hd中文| 亚洲视频小说图片| 一级片黄色录像| 国产人成亚洲第一网站在线播放| 日韩 中文字幕| 成人激情黄色小说| 亚洲中文字幕无码一区| 国产高清不卡二三区| 亚洲制服在线观看| 国产精品一卡二卡在线观看| 一级网站在线观看| 国产精品综合二区| 伦伦影院午夜理论片| 国内精品久久久久影院薰衣草 | 国产日产欧产精品推荐色| 日本xxx在线播放| 91麻豆国产福利在线观看| av网站有哪些| 91免费在线播放| 91精品人妻一区二区三区蜜桃欧美 | 日本精品久久久久中文| 亚洲国产精品av| 中文字幕欧美激情极品| 国产精品黄色在线观看| 天天做夜夜爱爱爱| 一区二区三区在线影院| 欧美三级 欧美一级| 亚洲一区二三区| 91香蕉在线视频| 日韩欧美中文字幕在线播放| 探花国产精品一区二区| 欧美视频第二页| 国产欧美日韩成人| 亚洲黄色免费三级| 清纯唯美亚洲色图| 在线视频国产日韩| 黄色在线论坛| 亚洲3p在线观看| 欧美va视频| 成人午夜在线观看| av综合网址| 欧美精品国产精品久久久| 日韩免费视频| 狠狠噜天天噜日日噜| 国产精品久久久久久久久久妞妞| 国产黄色特级片| 国产呦精品一区二区三区网站| 国产精品欧美性爱| 久久看人人爽人人| 中文字幕资源站| 亚洲第一激情av| 无码人妻精品一区二| 69av一区二区三区| 日本高清视频免费看| 亚洲视频在线看| 大片免费在线观看| 欧美重口另类videos人妖| 亚洲网站三级| 久久青青草原| 欧美大黑bbbbbbbbb在线| 日本免费a视频| 首页国产欧美日韩丝袜| 日本女人黄色片| 国产亚洲精品福利| www.色小姐com| 欧美在线视频你懂得| www.蜜臀av| 色综合影院在线| av剧情在线观看| 成人午夜一级二级三级| 男男gay无套免费视频欧美| 中文字幕乱码免费| 日韩二区三区在线观看| 免费看毛片的网站| 日韩一区在线播放| 色老头在线视频| 精品区一区二区| 日本中文字幕在线观看| 欧美在线视频播放| 福利在线一区| 欧美 日韩 国产 在线观看| 国产欧美欧美| 日韩无码精品一区二区| 亚洲欧美日韩成人高清在线一区| 无码人妻丰满熟妇区bbbbxxxx| 亚洲成人a**站| a级影片在线| 国产日产久久高清欧美一区| 欧美猛男同性videos| 国产中文字幕二区| 国产成人精品免费视频网站| 久久嫩草捆绑紧缚| 欧美在线看片a免费观看| 亚洲人妻一区二区三区| 久久久久成人网| 精品一区二区三区亚洲| 爱爱爱视频网站| 美女视频黄a大片欧美| 91成人破解版| 欧美视频在线免费看| 日韩在线视频观看免费| 欧美激情精品久久久久久大尺度| **日韩最新| 中文字幕中文字幕在线中一区高清| 日韩电影免费在线观看网站| 国产艳俗歌舞表演hd| 欧美日韩激情网| 污视频在线免费观看| 91成人精品网站| 另类春色校园亚洲| 人妻少妇精品久久| 99国产欧美另类久久久精品| 国产无遮挡免费视频| 亚洲高清色综合| 蜜桃av在线| 欧美日韩精品一区| 日韩中文欧美在线| 久久视频一区二区三区| 欧美绝品在线观看成人午夜影视| 97超碰人人在线| 国产欧美一区二区三区在线看| 日韩理论电影院| 天天干天天曰天天操| 悠悠色在线精品| www.天堂av.com| 国内偷自视频区视频综合| 欧美18xxxx| 男人透女人免费视频| 日本一区二区三级电影在线观看| 国产偷人爽久久久久久老妇app| 中文字幕在线视频日韩| 成人久久精品| 免费视频爱爱太爽了| 91日韩一区二区三区| 波多野结衣毛片| 久久久精品美女| 福利电影一区| 日韩精品无码一区二区三区免费| 中文一区一区三区高中清不卡| 88av在线视频| 欧美国产日韩xxxxx| 国产成人短视频在线观看| 可以看污的网站| 亚洲国产成人高清精品| 欧美zzoo| 亚洲sss综合天堂久久| 亚洲精品韩国| 亚洲激情图片网| 亚洲国产另类 国产精品国产免费| 在线观看网站免费入口在线观看国内 | 国产日韩av高清| 狠色狠色综合久久| 日韩精品无码一区二区三区久久久| 欧美日韩和欧美的一区二区| av白虎一区| 亚洲综合av一区| 99久久国产综合色|国产精品| 中国一级特黄视频| 欧美激情亚洲国产| 成人嫩草影院| 中国一级特黄录像播放| 欧美日韩国产高清一区二区三区 | 日韩av超清在线观看| 99久re热视频精品98| 久久人人爽爽爽人久久久| 国产精品视频一二区| 欧美性受xxxx白人性爽| 98精品久久久久久久| 给我免费观看片在线电影的| 欧美精品三级在线观看| 欧美aa在线观看| 青青视频免费在线| 国产精品久久综合| 亚州男人的天堂|