首页 >>  正文

pytorch教材

来源:baiyundou.net   日期:2024-09-22

西风 发自 凹非寺

量子位 | 公众号 QbitAI

PyTorch团队让大模型推理速度加快了10倍

且只用了不到1000行的纯原生PyTorch代码

项目名为GPT-fast,加速效果观感是这样婶儿的:

通畅,属实通畅!

重点是,团队直接放出了代码以及详细“教程”。还是简笔画版的那种,特别好理解。

开发团队成员@Horace He表示:

我们不把它看作是库或者框架,更希望大家能把它当成个例子,根据自己的需求“复制粘贴”。

网友直接炸开锅,英伟达AI科学家Jim Fan评价道:

这是自Andrej Karpathy发布的minGPT以来最棒的教程式repo之一!

开源世界需要更多minGPT、GPT-Fast这样的项目!

那么GPT-fast究竟是如何给大模型提速的?

开盒大模型“加速包”

总的来说,用到这几种方法:

  • Torch.compile:一个专门为PyTorch模型设计的编译器,可以提升模型运行效率。
  • GPU量化:通过减少计算的精度来加速模型的运算速度。
  • 推测性解码:使用一个较小的模型来预测较大模型的输出,以此加快大语言模型的运算。
  • 张量并行性:通过在多个硬件设备上分布模型的运算来加速处理速度。

下面我们来一一展开。

开发团队一开始使用简单的PyTorch来实现,但效果不佳(25.5 tok/s):

他们查看跟踪后发现,一个原因是推理性能由于CPU过多占用而受限。

那么如何解决呢?

可以想象这样一个场景,GPU是一个庞大的工厂(拥有大量可用的算力),而CPU则是一个小推车,来回为工厂“供货”。

在很多情况下,CPU无法足够快地“喂”GPU。

因此,开发团队建议给GPU更多的工作量,或者说一次性给它更大“块”的任务来处理。

在推理过程中要做到这一点,可以引入torch.compile

torch.compile能够捕获模型中更大的区域,并将其编译成单一的编译区域。特别是当以“reduce-overhead”模式运行时,它非常有效地减少了CPU的开销。

效果立竿见影,性能直接提升了4倍,从25 tok/s提高到107 tok/s:

接下来,开发团队想进一步提升速度,但遇到了内存带宽瓶颈。

开发团队计算了模型的带宽利用率,结果已经达到了72%:

也就是说进一步提高速度的空间可能有限。

重新审视上面的方程式,团队发现虽然实际上不能改变模型参数量,也不能改变GPU的内存带宽(至少在不花更多钱的情况下),但可以改变存储每个参数所用的字节数

这意味着,虽然无法改变模型的大小或者升级硬件来提高性能,但可以通过减少存储模型参数所需的数据量来提高效率。

通常可以通过量化技术来实现,即减少表示每个参数所需的位数。

由此,开发团队引入了下一个技术——int8量化

采用int8权重量化减少了内存负载,进一步提升了性能(157.4 tok/s):

使用量化后还有0-一个问题:要生成100个token,必须加载(或调用)模型权重100次。频繁加载模型权重也会导致效率低下。

乍一看,好像没有什么解决的法子,因为在自回归生成模式中存在着严格的序列依赖关系。

但开发团队指出,通过利用推测性解码可以打破这种严格的序列依赖关系。

再来打个比方,想象有一个资深工程师Verity,他在技术决策上总是正确,但编写代码的速度相对较慢。

同时,还有一个初级工程师Drake,和Verity相反,不擅长技术决策,但编写代码的速度更快、成本也更低。

那么如何利用不同人的优势来提高整体效率?

方法很简单,先让Drake编写代码,并在此过程中做出技术决策。接下来,将代码交给Verity进行审查,不对的地方就让Drake重做。

在Transformer模型推理中,大型的验证模型即为Verity角色,Drake则是一个更小的、能更快生成文本的草稿模型。

开发团队使用草稿模型生成8个token,然后使用验证模型并行处理,丢弃不匹配的部分。

由此一来,打破了串行依赖,再次提高速度。

值得一提的是,推测性解码不会改变输出的质量。只要使用草稿模型生成token+验证这些token所需的时间少于单独生成这些token所需的时间,这种方法就是有效的。

而且使用原生PyTorch实现这种技术实际上非常简单,整个实现过程只需要大约50行原生PyTorch代码。

由于AMD也支持Triton和torch.compile后端,因此之前在Nvidia GPU上应用的所有优化也可以在AMD GPU上重新应用。

开发团队观察到int8量化的加速从22 tok/s达到102 tok/s:

之后开发团队又用了int4量化,进一步提升速度,但模型准确性有所下降。

因此使用了分组量化和GPTQ降低权重大小。

最后在保证准确性的前提下,速度提升至202.1 tok/s:

将以上技术结合使用,达到更高速度244.7 tok/s:

到目前为止,研发团队一直都是在单个GPU上提速。但其实很多情况下是可以使用多个GPU的。

而使用多个GPU可以增加内存带宽,从而提高模型的整体性能。

在选择并行处理策略时,需要在多个设备上分割一个token的处理过程,所以需要使用张量并行性。

而PyTorch也提供了用于张量并行性的底层工具,可以与torch.compile结合使用。

开发团队还透露也正在开发用于表达张量并行性的更高级别的API。

然而,即使没有更高级别的API,添加张量并行性也很容易,150行代码即可实现,且不需要对模型进行任何改变。

之前提到的所有优化都可以与张量并行性相结合。将这些优化结合起来,能够以55 tokens/s的速度为Llama-70B提供int8量化。

最后总结成果,忽略量化,仅用766行代码(model.py 244行代码,generate.py 371行代码,tp.py 151行代码),就实现了快速推理、推测性解码和张量并行性。

对于Llama-7B,使用compile+int4量化+推测性解码速度达到241 tok/s。对于Llama-70B,通过加入张量并行性,达到80 tok/s。

这些性能都接近或超越了当前SOTA。

参考链接:

[1]https://pytorch.org/blog/accelerating-generative-ai-2/?utm_content=273712248&utm_medium=social&utm_source=twitter&hss_channel=tw-776585502606721024

[2]https://twitter.com/DrJimFan/status/1730298947376443698

[3]https://twitter.com/cHHillee/status/1730293330213531844

— 完 —

量子位 QbitAI · 头条号签

","gnid":"99b7823cd9ad60935","img_data":[{"flag":2,"img":[{"desc":"","height":306,"s_url":"https://p0.ssl.img.360kuai.com/t01d9e952fe89a989dd_1.gif","title":"","url":"https://p0.ssl.img.360kuai.com/t0152f12c85272f5798.gif","width":800},{"desc":"","height":"300","title":"","url":"https://p0.ssl.img.360kuai.com/t016dbeebc2a6a2bfbf.jpg","width":"952"},{"desc":"","height":1138,"title":"","url":"https://p0.ssl.img.360kuai.com/t01961b714ae4c383d6.jpg","width":948},{"desc":"","height":"782","title":"","url":"https://p0.ssl.img.360kuai.com/t01336847a8b7f1f4f2.jpg","width":"1080"},{"desc":"","height":"190","title":"","url":"https://p0.ssl.img.360kuai.com/t010e9cfdaa3b179c8a.jpg","width":"1080"},{"desc":"","height":"473","title":"","url":"https://p0.ssl.img.360kuai.com/t019be7de21306e2a1b.jpg","width":"1080"},{"desc":"","height":"885","title":"","url":"https://p0.ssl.img.360kuai.com/t0153723bf26bb2c4b9.jpg","width":"1080"},{"desc":"","height":"565","title":"","url":"https://p0.ssl.img.360kuai.com/t018ac8ed208848ea22.jpg","width":"1080"},{"desc":"","height":"256","title":"","url":"https://p0.ssl.img.360kuai.com/t0148b712d37264aaca.jpg","width":"1080"},{"desc":"","height":"320","title":"","url":"https://p0.ssl.img.360kuai.com/t01f06d6738e9a59edc.jpg","width":"1080"},{"desc":"","height":"864","title":"","url":"https://p0.ssl.img.360kuai.com/t01bf59dba3545b2665.jpg","width":"1080"},{"desc":"","height":"220","title":"","url":"https://p0.ssl.img.360kuai.com/t01fa80cebb54f17726.jpg","width":"1080"},{"desc":"","height":"672","title":"","url":"https://p0.ssl.img.360kuai.com/t012479b875b2ab174c.jpg","width":"1080"},{"desc":"","height":"571","title":"","url":"https://p0.ssl.img.360kuai.com/t01374eb6f6bc9b3012.jpg","width":"1080"},{"desc":"","height":"583","title":"","url":"https://p0.ssl.img.360kuai.com/t01b0655b3b7bdf1641.jpg","width":"1080"},{"desc":"","height":"436","title":"","url":"https://p0.ssl.img.360kuai.com/t01ccaafc45448dbdbe.jpg","width":"1080"},{"desc":"","height":"709","title":"","url":"https://p0.ssl.img.360kuai.com/t01a2e7e4333d3a8398.jpg","width":"1080"},{"desc":"","height":"332","title":"","url":"https://p0.ssl.img.360kuai.com/t01a35d2ba6f3790de1.jpg","width":"1080"},{"desc":"","height":"953","title":"","url":"https://p0.ssl.img.360kuai.com/t01dda9f2147e189f32.jpg","width":"1080"},{"desc":"","height":"946","title":"","url":"https://p0.ssl.img.360kuai.com/t01a42fb69e4b6e0f76.jpg","width":"1080"},{"desc":"","height":"196","title":"","url":"https://p0.ssl.img.360kuai.com/t019bb0173c15070886.jpg","width":"1080"},{"desc":"","height":"162","title":"","url":"https://p0.ssl.img.360kuai.com/t019c5745579a0013e6.jpg","width":"1080"},{"desc":"","height":"639","title":"","url":"https://p0.ssl.img.360kuai.com/t0198aaf8963f0e81ab.jpg","width":"1080"}]}],"original":0,"pat":"art_src_3,fts0,sts0","powerby":"pika","pub_time":1701496080000,"pure":"","rawurl":"http://zm.news.so.com/d25e2e6d31fdad2778ac199df83b7fbe","redirect":0,"rptid":"098a93b9c5b6ea9a","rss_ext":[],"s":"t","src":"量子位","tag":[{"clk":"ktechnology_1:gpu","k":"gpu","u":""},{"clk":"ktechnology_1:cpu","k":"cpu","u":""}],"title":"PyTorch造大模型“加速包”,不到1000行代码提速10倍!

寿腾荔1834孕期为什么要做TORCH化验?
蓟放俩18816623623 ______ 专家建议,饲养宠物的女性在怀孕前,要做一项叫作TORCH的化验,这 将查出有没有感染弓形虫.如果TORCH检验显示已经感染过弓形虫,可以不 用担心,因为女主人体内已经产生了抗体.如果显示从未感染过,则表明没 有免疫力,那就要在整个怀孕期间,注意喂养宠物的方式和自己的饮食卫生. 如果化验结果显示正在感染,则暂时不能怀孕.如果在怀孕3个月内,女主 人的TORCH检验显示感染了弓形虫,应立即终止妊娠,因为感染了弓形虫, 对胎儿的发育影响较为严重,可导致胎儿畸形.

寿腾荔1834TORCH检测IgM与IgG两种抗体代表什么?
蓟放俩18816623623 ______ TORCH检测包括IgM与IgG两种抗体,前者表示新近1~2月的感染,后者表示既往感染,表示具有一定的免疫力,尤其是风疹病毒IgG阳性,认为有终身的免疫力.孕前TORCH的检测就是要了解妇女对这几种病毒的免疫状况,是否需接种风疹疫苗或是否对其他病毒具有一定的免疫力,从而指导孕前妇女怀孕的时间及注意事项,达到优生的目的.

寿腾荔1834建筑工程施工中的材料检验包括了哪些内容?
蓟放俩18816623623 ______ 根据有关技术标准和检验规程对材料的质量进 行的检验工作.是确保工程质量的重要措施之一. 包括:①生产供应单位进行的检验.检验合格后出 具质量合格证或检验合格证.②施工单位在使用前 对材料按材料检验规程及有关规定进行的检验.经 检验合格后方可使用.③对无合格证或出厂证明的 材料以及虽有合格证但对其有怀疑的材料也必须进 行检验.

寿腾荔1834针对青少年的教育机构哪个较好?有人知道吗?
蓟放俩18816623623 ______ 你好,我家孩子出现了沉迷手机的问题,当时我找了两家机构都不行,没有效果,后来我给他报名的雅方教育还是不错的,他们专家很负责任,而且效果也很好,报名了一个星期,孩子改变就很大.

寿腾荔1834有宠物的女性怀孕前为什么要检查呢?
蓟放俩18816623623 ______ 为此,有关专家建议,饲养宠物的女性在怀孕前,要做一项叫做TORCH的化验,这将查出有没有感染弓形虫.TORCH一词是由几种病原体英文名称的第一个字母组合而成,其中字母T就代表弓形虫.如果TORCH检验显示已经感染过弓形虫,可以不用担心,因为女主人体内已经产生了抗体.如果显示从未感染过,则表明没有免疫力,那就要在整个怀孕期间,注意喂养宠物的方式和自己的饮食卫生.如果化验结果显示正在感染,暂时不能怀孕.如果在怀孕3个月内,女主人的TORCH检验显示感染了弓形虫,应立即中止妊娠,因为感染了弓形虫,对胎儿的发育影响较为严重.

寿腾荔1834为什么孕前不宜养宠物?
蓟放俩18816623623 ______ 近年来,宠物词养已经成为时尚.但在词养同时也要注意宠物自身带 有的各种病菌,... 另外,饲养宠物的女性在怀孕前,应到医院做一项叫TORCH的化验, 它能查出身体...

寿腾荔1834海宁正规的函授教育机构哪家好?
蓟放俩18816623623 ______ 杭州有一家叫华博特教育的公司,我上学的时候一直听室友提起,是一家十几年的老企业了,无论是从资质还是评价等方面都是相对比较好的,大机构才有保障,现在好多上班族都是在华博特去提升自己的学历.建议去咨询一下.

寿腾荔1834惠州大亚湾子女投靠父母入户需要哪些材料?
蓟放俩18816623623 ______ [1]未成年子女或在校学生投靠入户的提供以下材料: ①入户申请书; ②《出生医学证明》; ③父母的《结婚证》; ④父(母)的《户口簿》、《居民身份证》及子女的《户口簿》和迁出地派出所出具的户籍证明; ⑤属在校学生的由所在学校出具的在校证明. [2]成年子女照顾父母入户的提供以下材料: ①入户申请书; ②父(母)的《户口簿》、《居民身份证》,申请人的《户口簿》、《居民身份证》和迁出地派出所出具的户籍证明; ③配偶随迁的提供《结婚证》、《居民身份证》,未成年子女随迁的提供《出生医学证明》; ④迁出地县级或乡(镇、街道)人口计生行政主管部门出具的婚育证明.

寿腾荔18342012年没有年检和继续教育什么的?6月在北京取得的会计从业资格
蓟放俩18816623623 ______ 1、2013年还可以补,不会作废.2、你需要在2013年6月30日前完成年检,然后再6月1日—12月31日期间完成2013、2012两个年度的继续教育.3、年检是免费的,直接去区县财政局办理.4、继续教育可以直接找 中华会计.网校 办理.

寿腾荔1834梦想成真书里主要内容是什么?
蓟放俩18816623623 ______ 书名:梦想成真:2010年国家医师资格考试——临床执业医师应试指南(上、下册)

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024