范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

轻量级TorchShard库减少GPU内存消耗,API与PyTorch相同

  选自medium
  作者:Kaiyu Yue
  机器之心编译
  编辑:陈
  训练大模型时,如何优雅地减少 GPU 内存消耗?你不妨试试这个 TorchShard 库,兼具模型并行与数据并行等特点,还具有与 PyTorch 相同的 API 设计。
  模型并行性能够促进视觉任务的性能。但是目前,还没有一个标准库可以让我们像采用混合精度等其他 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,如下所示: import torchshard as ts   ts.init_process_group(group_size=2)                       # init parallel groups   m = torch.nn.Sequential(     torch.nn.Linear(20, 30, bias=True),                    ts.nn.ParallelLinear(30, 30, bias=True, dim=None),    # equal to nn.Linear()     ts.nn.ParallelLinear(30, 30, bias=True, dim=0),       # parallel in row dimension     ts.nn.ParallelLinear(30, 30, bias=True, dim=1),       # parallel in column dimension ).cuda()   x = m(x)                                                  # forward loss = ts.nn.functional.parallel_cross_entropy(x, y)      # parallel loss function loss.backward()                                           # backward   torch.save(     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 库: pip install torchshard
  这里以 ImageNet 上训练 ResNet-50 为例,展示仅需几行代码就能在项目中使用 TorchShard。通常 ResNet-50 设计范式包含两部分:卷积块和全连接层,如下图 1 所示。一般来说,由于大量的类依赖于数据集,最后的线性层比卷积块有更多的参数。所以我们切片最后一个线性层来检查其最大尺寸。
  图 1:DDP 以及 DDP + TorchShard 前向训练流。
  在上图 1 中,左边展示了传统的 DDP 训练范式。假设我们有两个等级,DDP 将强制每个等级有重复的模型参数。然而,TorchShard 会将层级参数切片到不同的等级,从而减少整个 GPU 内存。现在向 ImageNet 官方训练脚本添加一些代码,修改后的版本已经成为 TorchShard 项目的一部分。
  首先将 torchshard import 进来: import torchshard as ts
  然后需要初始化模型并行的进程组,就像初始化 DDP 进程组的方法一样。只需要设置一个功能参数来告诉 torchshard 应该从目标层中切片出多少个 shard。 ts.distributed.init_process_group(group_size=args.world_size)
  接下来将模型转换为并行版本,其中可以直接将整个模型输入到转换辅助函数中,无需特殊处理。 import resnet model = resnet.__dict__[args.arch](pretrained=args.pretrained) ts.nn.ParallelLinear.convert_parallel_linear(     model, dim=args.model_parallel_dim ) print("=> paralleling model"{}"".format(args.arch))
  此外,不要忘记损失函数 torchshard.nn.ParallelCrossEntropy ,该损失函数可以根据输入张量在原始 PyTorch 版本和并行版本之间切换运行模式。例如,如果输入张量是由 torchshard 并行层产生的,torchshard.nn.ParallelCrossEntropy 将以并行方式计算损失值。 criterion = ts.nn.ParallelCrossEntropyLoss().cuda(args.gpu)
  当模型并行模式(TorchShard)和数据并行模式(DDP)一起工作时,我们需要处理并行层的输入。每个等级中的参数和训练数据都不同。因此,我们在 ResNet forward 中的并行线性层之前收集输入张量。 x = ts.distributed.gather(x, dim=0) # gather input along the dim of batch size  x = self.fc(x)
  同样地,我们在计算损失值之前收集目标张量。 output = model(images) if args.enable_model_parallel:     target = ts.distributed.gather(target, dim=0) loss = criterion(output, target)
  最后,使用 TorchShard 函数保存和加载 checkpoints 非常简单。TorchShard 提供了名为 torchshard.collect_state_dict 基本函数用于保存 checkpoints,torchshard.relocate_state_dict 用于加载 checkpoints。
  保存检查点: state_dict = model.state_dict() # collect states across all ranks state_dict = ts.collect_state_dict(model, state_dict) if ts.distributed.get_rank() == 0:     torch.save(state_dict, "resnet50.pt") # save as before
  加载检查点: if ts.distributed.get_rank() == 0:      state_dict = torch.load("resnet50.pt") # relocate state_dict() for all ranks state_dict = ts.relocate_state_dict(model, state_dict) 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)一起混合使用。 # gradscaler scaler = torch.cuda.amp.GradScaler(enabled=args.enable_amp_mode)     with torch.cuda.amp.autocast(enabled=args.enable_amp_mode): # compute output     output = model(images)          if args.enable_model_parallel:         target = ts.distributed.gather(target, dim=0)     loss = criterion(output, target)         # compute gradient and do SGD step scaler.scale(loss).backward() scaler.step(optimizer) scaler.update() optimizer.zero_grad()
  图 3:在不同并行策略以及 AMP 下,使用标准的 ResNet 训练设置时(输入尺寸 224,batch 大小 256),使用 GPU 内存的成本。
  ZeRO 是 DeepSpeed 的核心,与 PyTorch >= 1.9.0 一起使用。如果你想测试一个函数,请安装最新版本的脚本来运行,代码如下: from torch.distributed.optim import ZeroRedundancyOptimizer     if args.enable_zero_optim:     print("=> using ZeroRedundancyOptimizer")     optimizer = torch.distributed.optim.ZeroRedundancyOptimizer(         model.parameters(),         optimizer_class=torch.optim.SGD,         lr=args.lr,         momentum=args.momentum,         weight_decay=args.weight_decay) else:     optimizer = torch.optim.SGD(model.parameters(), args.lr,                                 momentum=args.momentum,                                 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 来确保同一模型并行组中的模块具有相同的训练数据。
  原文链接:https://medium.com/pytorch/torchshard-a31fcbfdc354

中国模式启示录(三)西方国家的恐惧当很多中国人自己都还对中国模式心存疑虑的时候,中国模式却给西方的发达国家带来了恐惧。这种恐惧不是源于对中国的强大,而是因为中国模式所具有的普遍适用性。中国对非州国家的援助,广被国人她拍下宠物与主人的合影,画面异想天开,充满魔力相信很多人已经看过最近热映的电影一条狗的使命,电影温情上演了人与动物之间的情感,暖心治愈。你有自己心爱的宠物吗?除了帮宠物拍照,你一定也想过跟它合影,留下你们的美好回忆吧!你曾经想一只狗的最后一次旅程,主人把它带上了山顶在生活中,有时候一个人必须理解并学会何时以及如何放手。今天我们要和大家分享一个特别的扣人心弦的故事。这是一个关于卡洛斯弗雷斯科和他10岁的拉布拉多犬蒙提的故事,他们一起经历了很多,一群狗狗的标准合照,网友这真的不是假狗吗?这家狗狗日托中心通过拍摄完美的狗狗照片来解决不可能的事情。社会不断发展,事物在我们的文化中稳步进步。每年,我们都会为新药物科技成就和科学突破而兴奋不已,有人甚至让一群狗站着不动地拍这届年轻人,拍照都这么野吗?知乎上有一个热门提问为什么所有的艺术作品小说歌曲电影都热衷于歌颂青春?为什么青春被认为如此美好?有人说,因为青春尚未被使用的大量时间。而时间人生的各种可能性。在不断涌现的碎片化时间一只有分离焦虑的狗狗每天守在阳台等主人,一等就是一天养宠物是一种福气。他们总是在你身边,无条件地爱你,他们太可爱了。通常,就像人类一样,狗也会有某些心理问题。分离焦虑。这些狗狗会想要24小时和你在一起,如果你离开了,它们会变得非常悲当名人与年轻时的自己共同出现在一张画面里变老是一件有趣的事情,也是一种很好的平衡器你可能不会注意到在你每天照镜子时发生的小变化。然而,当你后退一步,把现在的自己和以前的照片进行比较时,你就会意识到时间的流逝对我们所有人的2021iPhone摄影大赛公布,17位中国摄影师获奖刚刚,世界顶级手机摄影比赛2021IPPAiPhone摄影大赛公布获奖作品,有17位来自中国的摄影师荣获该殊荣!来自中国成都的刘丹(米拍ID勤奋的刘小朵)更是获得年度摄影大奖第二名那些让人仿佛生活在童话世界中的场景称之为设计的Instagram账户收集了一些现代设计的精彩例子。CallItDesign是一份Instagram杂志,它分享了一些现代设计中令人赏心悦目的例子,并因此赢得了10。5世界各地的博物馆外壳,哪一个让你印象深刻?大多数人去博物馆是为了看里面是什么,并不总是注意他们的外表。从外面看,最简单的建筑可能会掩盖博物馆里面珍藏得令人惊讶的东西,但有时外壳和里面的东西一样令人印象深刻。中国上海天文博物你知道自己来这个世界的使命吗?一你知道自己来这个世界的使命吗?其实,我们都是带着使命来到这个世界的。刚出生的时候,我们哇哇大哭。宝宝心里清楚地知道自己的使命,却无法用爸爸妈妈听得懂的语言表达。一般等个两三年,宝
解读国产光刻机困局(九)哈工大的EUV光刻机光源很多朋友询问哈尔滨工业大学开发的极紫外EUV光刻机光源进展怎么样了?在聊这个事情之前,请朋友们做一个简单的小投票,大家认为哈工大的EUV光源功率是多少?EUV光源的三种主要原理在聊1996年北大离奇的论文造假事件为何石沉大海?编者按我在探究中国何时起开始SCI论文评价体制,当我看到1997年中国纳米院士的时候,当我看到1997年中科院院长发表中国牌晶体之问文章的时候,饶毅先生最近的发文反精英论应该缓行庸关于石墨烯可以提升10倍硬盘存储容量的调研今天和大家聊聊这几天传得沸沸扬扬的石墨烯硬盘的事情,希望能够帮助大家了解事实的真相。2021年5月17日公开的一篇普通的关于石墨烯作为超高密度磁存储介质覆盖层的研究论文(图1),最解读国产光刻机困局(四)长春光机所的EUV光刻机?我们从哪里来?又到哪里去?2003年长春光机所球面Schwarzschild物镜故事再次回到20年前彼时,后来的科技部副部长02专项光刻机工程指挥部总指挥曹健林教授仍是长春光机所研解读EUV光刻机专利(二)台积电的21EUV光源设计一一发明专利,通常带有超前的概念设计思想,却常常用大众化能理解的语言描述。希望这个13。5纳米EUV光刻机专利的系列解读,可以为大家带来或新鲜的或有趣的或深刻的科技知识。今天要讲的解读国产光刻机困局(二)EUV光刻机镜头mirror研究进度很多人认为国产EUV光刻机镜头(下文统称mirror)根本不是事儿,也有人说EVU光刻机的mirror不就是X射线反射镜吗?咱们国家同步辐射装置早就有了!事实真相又如何呢?我们还是石墨烯是什么样子,你见过吗?你想象的石墨烯可能是这样的单层石墨烯概念图物理研究的石墨烯可能是这样的石墨烯的输运特性研究光学显微镜下大约5微米的3层石墨烯片电子工程研究的石墨烯可能是这样的电子工程制造的石墨烯晶解读EUV光刻机专利(一)中芯国际脑洞大开的光源设计一一发明专利,通常带有超前的概念设计思想,却常常用大众化能理解的语言描述。希望这个13。5纳米EUV光刻机专利的系列解读,可以为大家带来或新鲜的或有趣的或深刻的科技知识。今天要讲的解读国产光刻机困局(三)EUV光刻机之激光器研究进度前次和朋友们简单聊了13。5nmEUV光刻机光源系统的研究进度,很多朋友提到光刻机激光器已经被科益虹源攻克了还有更多朋友提到20kW功率激光器不算什么,我们国家早就突破大功率激光器台神秘制度曝光1148人掌握核心机密须通过测谎考验忠诚据台媒报道台湾检察官周士榆将调任国安局政风处长,事前因接受安全查核,意外让此神秘制度曝光。原来公务员在掌握国家机密之前,必须通过忠诚度考核,若未通过,则可能面临调职降职的后果。只要塔利班接管阿富汗首都喀布尔美国务院提出承认新政府条件据半岛电视台当地时间16日报道,美国国务院发言人普莱斯(NedPrice)呼吁阿富汗建立一个尊重人权的包容性新政府(包含妇女权利在内),并表示塔利班的行为将决定华盛顿是否会承认喀布