来源:量子位

一听到训练大模型,是不是第一感觉就是烧钱玩不起

但我说,一台4000多块钱的游戏电脑,谁都能训练上亿参数的大模型呢?

别不信,这是真的。

而这就归功于微信AI团队,最近推出的一款利器——派大星

但不是你印象中的那个派大星昂~

微信AI的派大星(PatricStar),其实是一个超大预训练模型训练系统

要知道,在这个领域中,以往都是微软DeepSeed独占鳌头。

此次微信一出手,可以说是直接秒杀了微软:

在 8xV100 和 240GB CPU 内存节点上,训练了一个120 亿参数的 GPT 模型,是当前最佳方案DeepSpeed模型规模上限的1.5 倍

但毕竟针对的是大模型,“烧钱”是出了名的难题。

而微信AI的派大星就显得相当的亲民了。

即使在700美元的个人游戏电脑上,它也可以训练一个7亿参数的 GPT 模型!

现在,人人都可以在家训练大模型了!

划重点:已开源!

为什么要搞派大星?

大规模预训练模型,已然成为技术发展中的新潮流。

以BERT、GPT为代表的预训练模型的出现,可以说是自然语言处理(NLP)领域的里程碑事件。

NLP,正在进入了预训练时代

那么像派大星这样的训练系统,真的有必要吗?

答案是肯定的。

技术角度来看,预训练模型(PTM)通常使用一个堆叠了多个Transformer结构神经网络,在大量文本上预训练通用语言特征表示。

然后,通过微调将学到的知识转移到不同的下游任务。

预训练模型使用大量来自互联网的文本数据,可以捕获自然语言的细微特征,并在下游任务上获得非常惊艳的表现效果。

于是,AI社区的共识是采用预训练模型,作为特定NLP任务的主干,而不是在与任务相关的数据集上从头开始训练模型。

预训练模型的力量源泉,是它拥有的数以亿计的参数规模,这对运行它的计算和内存资源都提出了巨大的要求。

因此,预训练模型训练仍是一小部分人的游戏

所有发表百亿级模型训练成果的团队,所采用的的设备都是如DGX型号的AI超级计算机。

它的一个节点就配置了8张GPU,1.5TB内存,3.84TB SSDs,还使用NVLink作为高速通信网络。

目前最大的预训练模型Megatron-Turing,包含5300亿参数,其预训练过程就是在560个DGX A100节点的集群上完成的。

这种配置在大多数工业界数据中心都是遥不可及的。

而通过像派大星这样的训练系统,便可以让这种“遥不可及”变得“唾手可得”,让大模型可以普惠到更多的开发人员,实现PTM的“共同富裕”。

再从绿色AI角度来看,预训练模型的预训练的过程是极其烧钱和有害环境的。

比如,从头训练型一次万亿级别的预训练模型要烧掉154万人民币,耗电所产生的碳排放相当于数十辆小汽车从出厂到报废的碳排放总和。

出于社会利益最大化考虑,预训练技术未来的产业形态,应该是中心化的:

少部分财力雄厚的机构,用超大规模集群承担预训练阶段的计算和环境开销;大多数从业人员在小规模、相对简陋的硬件上针对自身业务进行微调。

前者只需要相对少量的计算和碳排放,而后者的诉求却被当前的预训练软件所严重忽略。

现如今,派大星的到来,让大规模预训练模型的训练变得“多快好省”了起来。

而且不仅是对于机构,更是有益于个人开发者。

……

那么派大星的效果,具体又怎样呢?

不是魔改,是从头搭建,性能达SOTA

值得一提的是,派大星并不是基于DeepSpeed的魔改,代码是团队从头开始搭建起来的。

派大星框架非常直观的一个特点,便是简单易用,而且还是可以兼容其他并行方案的那种。

例如,开发者可以使用几行代码端到端的加速PyTorch的训练过程。

from patrickstar.runtime import initialize_engineconfig = {"optimizer": {"type": "Adam","params": {"lr": 0.001,"betas": (0.9, 0.999),"eps": 1e-6,"weight_decay": 0,"use_hybrid_adam": True,},},"fp16": {  # loss scaler params"enabled": True,"loss_scale": 0,"initial_scale_power": 2 ** 3,"loss_scale_window": 1000,"hysteresis": 2,"min_loss_scale": 1,},"default_chunk_size": 64 * 1024 * 1024,"release_after_init": True,"use_cpu_embedding": False,
}def model_func():# MyModel is a derived class for torch.nn.Modulereturn MyModel(...)model, optimizer = initialize_engine(model_func=model_func, local_rank=0, config=config)...for data in dataloader:optimizer.zero_grad()loss = model(data)model.backward(loss)optimizer.step()

接下来,我们一起看一下派大星的性能效果。

上图便展示了DeepSpeed stage3,PyTorch系统在 1、2、4、8 个 GPU 上的性能(y轴通过对数方式重新缩放)。

这些点代表在一个 GPU 上使用 4、8、16、32 和 64 批大小测试的最佳结果。

(注:圆点周围的值表示派大星在吞吐量及其对DeepSpeed的加速;deeps是DeepSpeed仅使用数据并行的效果,我们接下来称之为DeepSpeed-DP,deeps-mpX 是 DeepSpeed使用X路的模型并行结果;模型的计量单位是B表示十亿Billon。)*

PyTorch 仅适用于 1B 模型大小的情况,派大星在8个GPU上比PyTorch快1.37倍,在 1、2、4 个 GPU 情况下与 PyTorch 相似。

使用相同的零冗余优化器来实现数据并行,派大星在大多数情况下(14 个中有 12 个)优于 DeepSpeed-DP,并且数据并行方式训练8B和12B之间模型大小的唯一解决方案。

不难看出,尤其是针对小模型,改进是非常明显了(0.90x-1.49x)。

而在增加模型大小时,派大星不会显着降低计算效率。

此外,派大星在增加 GPU 数量时显示出超线性可扩展性。

若是将派大星与模型并行解决方案进行了比较,又会是怎样的结果?

例如在上图中,还比较了DeepSpeed在8个GPU卡上使用Zero-DP方案叠加2路模型并行和4路模型并行的性能。

派大星在所有测试用例上实现了最大的模型规模120亿参数,以及最佳的性能效率。

在模型并行的帮助下,DeepSpeed将模型规模扩展到了80亿参数。

但是,MP引入了更多的通信开销;性能明显低于派大星和 DeepSpeed-DP。

……

效果是有够惊艳的了,但接下来的一个问题便是:

关键技术是什么?

破局者:异构训练

或许你会说了,让数据并行不就完事了吗?

事实却并非如此。

对于预训练模型来说,最常用的数据并行技术不适用,这是因为模型数据无法再容纳在单个 GPU 的内存中。

GPU硬件的存储规模上限,像一堵墙一样限制住了PTM的可训练规模,因此从业人员通常称之为”GPU内存墙”现象。

近两年来,通过利用并行训练在多个 GPU 内存之间分配模型数据,例ZeRO-DP、模型并行、流水线并行尝试使 PTM 大小突破内存墙。

但是,使用这些技术又需要不断扩大GPU规模,也意味着更高设备的投入,那么此局怎么破?

异构训练技术,了解一下。

它不仅可以显著提升单GPU训练模型的规模,而且可以和并行训练技术正交使用。

异构训练通过在CPU和GPU中,容纳模型数据并仅在必要时将数据移动到当前设备来利用 GPU 内存、CPU 内存(由 DRAM 或 NVMe 内存组成)。

其他方案如数据并行、模型并行、流水线并行,都在异构训练基础上进一步扩展GPU规模。

预训练模型在训练期间,存在必须管理的两种类型训练数据:

  • 模型数据由参数、梯度和优化器状态组成,其规模与模型结构定义相关;

  • 非模型数据主要由算子生成的中间张量组成,根据训练任务的配置动态变化,例如批量大小。

模型数据和非模型数据相互竞争GPU内存。

然而,目前最佳的异构训练方案DeepSpeed的Zero-Offload/Infinity,仍存在很大优化空间。

在不考虑非模型数据的情况下,DeepSpeed在CPU和GPU内存之间静态划分模型数据,并且它们的内存布局对于不同的训练配置是恒定的。

这种静态分区策略会导致几个问题。

首先,当GPU内存或CPU内存不足以满足其相应的模型数据要求时,即使当时其他设备上仍有可用内存,系统也会崩溃。

其次,当数据以张量为粒度的不同内存空间之间传输时通信效率低下,并且当你可以预先将模型数据放置在目标计算设备上时,一些CPU-GPU通信量是不必要的。

因此DeepSpeed在微信的数据中心单GPU只能运行60亿参数的模型,而且效率十分低下,远不如在DGX上的报告结果130亿参数。

派大星则通过以细粒度的方式管理模型数据,以更有效地使用异构内存来克服这些缺点。

它将模型数据张量组织成块,即相同大小的连续内存块。

块在异构内存空间中的分布在训练期间根据它们的张量状态动态编排。

通过重用不共存的块,派大星还比DeepSpeed的方案进一步降低了模型数据的内存占用。

派大星使用预热迭代来收集运行时模型数据可用 GPU 内存的统计数据。

基于收集到的统计数据的有效块驱逐策略和设备感知算子放置策略,为的就是减少 CPU-GPU 数据移动量。

最后,使用零冗余优化器(ZeroReduencyOptimizer)的Zero-DP数据并行方法,通过块的集合GPU 通信来使用扩展到多个GPU。

团队介绍

这项研究主要由腾讯微信AI团队新加坡国立大学团队共同完成。

论文一作是来自微信AI的高级工程师Jiarui Fang,清华大学博士毕业。

其主要工作是通过创新并行计算技术提升在线和离线NLP任务的运算效率。

他曾经还曾开源过一款Tranformer模型推理加速工具TurboTransformer。

……

那么最后,你是否也想训练一个专属的大模型呢?戳下方链接试试吧~

派大星开源地址:
https://github.com/Tencent/PatrickStar

论文地址:
https://arxiv.org/abs/2108.05818

推荐阅读

  • 【重磅】斯坦福李飞飞《注意力与Transformer》总结,84页ppt开放下载!

  • 一文总结微软研究院Transformer霸榜模型三部曲!

  • Swin Transformer为主干,清华等提出MoBY自监督学习方法,代码已开源

  • 加性注意力机制!清华和MSRA提出Fastformer:又快又好的Transformer新变体!

  • MLP进军下游视觉任务!目标检测与分割领域最新MLP架构研究进展!

  • 周志华教授:如何做研究与写论文?(附完整的PPT全文)

  • 都2021 年了,AI大牛纷纷离职!各家大厂的 AI Lab 现状如何?

  • 常用 Normalization 方法的总结与思考:BN、LN、IN、GN

  • 注意力可以使MLP完全替代CNN吗? 未来有哪些研究方向?

欢迎大家加入DLer-计算机视觉&Transformer群!

大家好,这是计算机视觉&Transformer论文分享群里,群里会第一时间发布最新的Transformer前沿论文解读及交流分享会,主要设计方向有:图像分类、Transformer、目标检测、目标跟踪、点云与语义分割、GAN、超分辨率、视频超分、人脸检测与识别、动作行为与时空运动、模型压缩和量化剪枝、迁移学习、人体姿态估计等内容。

进群请备注:研究方向+学校/公司+昵称(如Transformer+上交+小明)

微信开源「派大星」:4000元游戏电脑能带动7亿参数GPT!相关推荐

  1. 阿里 P8 员工招聘私人助理被辞退;微信上线「拍一拍」功能;FreeBSD 11.4 释出 | 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...

  2. 重磅推荐:火爆全网的「合成大西瓜」源码来了

    文章首发于微信公众号「GitHub精选」,欢迎大家关注. 大家好,我是章鱼猫. 就在今天,「合成大西瓜」再度上了微博热搜. 今天推荐的这个项目就和「合成大西瓜」有关,它是「bigwatermelon」 ...

  3. 撸了一个「合成大西瓜」

    最近「合成大西瓜」这个游戏也很火热,玩了一阵还挺有意思的.研究了一下原理,发现目前流传的版本都是魔改编译后的版本,代码经过压缩不具备可读性,因此决定自己照着实现一个.这个游戏已经开源,获取项目可以关注 ...

  4. 国产开源「文本-视频生成」模型!免费在线体验,一键实现视频生成自由

    原文链接:全球首发,国产开源「文本-视频生成」模型!免费在线体验,一键实现视频生成自由 去年4月,OpenAI发布的DALL-E 2用更高的分辨率.更真实的图像生成以及更准确地理解自然描述,横扫整个A ...

  5. 这款AI语音模型让派大星承认自己是钢铁侠,造假小扎对口型,火到挤爆服务器|在线可玩...

    行早 发自 凹非寺 量子位 报道 | 公众号 QbitAI 你敢信,派大星当众宣称自己是钢铁侠,漫威宇宙和比基尼海滩梦幻联动: I am Iron Man! 这深沉憨厚又有点喜感的嗓音,是派大星本星没 ...

  6. python绘制派大星_彩色派大星简笔画步骤

    派大星是海绵宝宝的好朋友,一只粉红色的卡通海星.很多小伙伴都非常羡慕派大星和海绵宝宝的友谊,也非常喜欢派大星.下面露西学画画网给大家分享彩色派大星简笔画步骤,我们来按照步骤画一只派大星吧. 派大星是一 ...

  7. python画树叶-Python_Turtle库画一只派大星

    一.网上找的一个喜欢又不难画的派大星图片 画出好看的图形的方法就是找到画各种基础形状的代码,将他们拼凑起来,整体图形的布局是否合适就需要一遍一遍的试出来. 我绘制的图形中,左上方的四个心形可以跳动. ...

  8. 用python画派大星_派大星的烦恼MISC

    挺有意思的杂项,python将二进制转图片的时候出现的图片不像二维码,想看题解的时候发现网上的大部分题解都是直接转发,更有意思了. 题目是派大星的烦恼,给了我们一张粉红图片,放进010editor里面 ...

  9. 有一天,派大星走了。海绵宝宝说:我没哭,

    有一块海绵,他叫做海绵宝宝. 他很好,每天脸上都挂着大大的微笑_ 他很好,他的世界里从没有悲伤_ 他很好,能做出好吃的蟹黄堡_ 他很好,不会委屈,不会嘲笑_ 他很好,永远有一个朋友陪他笑陪他玩_ 有一 ...

最新文章

  1. java清空栈_java - 如何使用Intent.FLAG_ACTIVITY_CLEAR_TOP清除活动堆栈?
  2. Kinect for Windows V2 SDK+ VS2012 环境搭建
  3. 在Docker应用场景下 如何使用新技术快速实现DevOps
  4. 格灵深瞳开盘破发,市值73亿,创始人曾是谷歌眼镜创始成员
  5. 2进程之间的关系:进程组,会话,守护进程
  6. 我眼中的计算机,我眼中的计算机-计算机开机背后的故事
  7. 有哪些非关系型数据库
  8. linux主机中util啥意思,Util-linux
  9. python ctypes 指针_Python Ctypes传递.h文件中定义的结构指针。
  10. 【电路补习笔记】3、电感的参数与选型
  11. 前端学习(2886):如何短时间内实现v-for 组件化设计方案
  12. [爬虫][python][入门][网页源码][百度图片][豆瓣TOP250]
  13. linux下c标准库位置,C 标准库 IO 使用详解
  14. JAVA异常和基础类库
  15. Spark源码系列(一)spark-submit提交作业过程
  16. 计算机硬件只能通过软件使用,日常软件分享 篇四:还在用鲁大师?查看电脑硬件信息可以用这些免费的软件!...
  17. Xshell安装教程及Xshell安装程序集组件时出错的解决方法
  18. 新操作系统有哪些新功能?一起来看看吧!
  19. JAVA基础---集合(一)--集合框架概述
  20. banner生成图像的网站有哪些?

热门文章

  1. MFC中设备描述表dc的使用
  2. [泰然翻译] cocos2d programming guide翻译(10)
  3. 用C语言解“龟兔赛跑”题
  4. np.random.choice()用法
  5. python 中shape 1,n 与1的区别
  6. 修改完 字符串单词首字母大写
  7. Docker系列 六. Docker 安装 Redis
  8. GPT-3等三篇论文获NeurIPS2020最佳论文奖 | AI日报
  9. 斯坦福SAIL负责人Christopher Manning:语言理解是人机灵魂的桥梁
  10. JSON 之父新作,JavaScript “葵花宝典”参悟 JS 之道