使用PyTorch 2.0 加速Hugging Face和TIMM库的模型|天天快看
2022-12-25 23:10:22 来源:

点蓝色字关注“机器学习算法工程师”


(资料图)

设为星标,干货直达!

PyTorch 2.0引入了**torch.compile()**来加速模型,这篇文章我们将介绍如何使用**torch.compile()**来加速Hugging Face和TIMM库的模型。

torch.compile() 使得尝试不同的编译器后端变得容易,从而使用单行装饰器 torch.compile() 使 PyTorch 代码更快。它可以直接在 nn.Module 上工作,作为 torch.jit.script() 的直接替代品,但不需要您进行任何源代码更改。我们希望这一行代码更改能够为您已经运行的绝大多数模型提供 30%-2 倍的训练时间加速。

opt_module=torch.compile(module)

torch.compile 支持任意 PyTorch 代码、控制流、变异,并带有对动态形状的实验性支持。我们对这一发展感到非常兴奋,我们将其称为 PyTorch 2.0。

这个版本对我们来说不同的是,我们已经对一些最流行的开源 PyTorch 模型进行了基准测试,并获得了 30% 到 2 倍的大幅加速(见https://github.com/pytorch/torchdynamo/issues/681) 。

这里没有技巧,我们已经 pip 安装了流行的库,比如https://github.com/huggingface/transformers, https://github.com/huggingface/accelerate 和 https://github.com/rwightman/pytorch-image-models等流行的库,然后对它们运行 torch.compile() 就可以了。

很难同时获得性能和便利性,但这就是核心团队发现 PyTorch 2.0 如此令人兴奋的原因。Hugging Face 团队也很兴奋,用他们的话说:

TIMM 的主要维护者 Ross Wightman:“PT 2.0 开箱即用,适用于推理和训练工作负载的大多数 timm 模型,无需更改代码。”

Sylvain Gugger 是 transformers 和 accelerate 的主要维护者:“只需添加一行代码,PyTorch 2.0 就可以在训练 Transformers 模型时提供 1.5 到 2.x 的加速。这是引入混合精度训练以来最激动人心的事情!”

本教程将向您展示如何使用这些加速,这样您就可以像我们一样对 PyTorch 2.0 感到兴奋。

安装教程

对于 GPU(新一代 GPU 的性能会大大提高):

pip3installnumpy--pretorch--force-reinstall--extra-index-urlhttps://download.pytorch.org/whl/nightly/cu117

对于CPU:

pip3install--pretorch--extra-index-urlhttps://download.pytorch.org/whl/nightly/cpu

当安装好后,你可以通过以下方式来进行验证:

gitclonehttps://github.com/pytorch/pytorchcdtools/dynamopythonverify_dynamo.py

另外一种安装方式是采用docker,我们还在 PyTorch nightly 二进制文件中提供了所有必需的依赖项,您可以使用它们下载:

dockerpullghcr.io/pytorch/pytorch-nightly

对于临时实验,只需确保您的容器可以访问所有 GPU:

dockerrun--gpusall-itghcr.io/pytorch/pytorch-nightly:latest/bin/bash

使用教程

让我们从一个简单的例子开始,一步步把事情复杂化。请注意,您的 GPU 越新,您可能会看到更显着的加速。

importtorchdeffn(x,y):a=torch.sin(x).cuda()b=torch.sin(y).cuda()returna+bnew_fn=torch.compile(fn,backend="inductor")input_tensor=torch.randn(10000).to(device="cuda:0")a=new_fn()

这个例子实际上不会运行得更快,但它具有教育意义。

以 torch.cos() 和 torch.sin() 为特色的示例,它们是逐点操作的示例,因为它们在向量上逐个元素地进行操作。你可能真正想要使用的一个更著名的逐点运算是类似 torch.relu() 的东西。eager模式下的逐点操作不是最优的,因为每个操作都需要从内存中读取一个张量,进行一些更改,然后写回这些更改。

PyTorch 2.0 为您所做的最重要的优化是融合。

回到我们的示例,我们可以将 2 次读取和 2 次写入变成 1 次读取和 1 次写入,这对于较新的 GPU 来说尤其重要,因为瓶颈是内存带宽(您可以多快地向 GPU 发送数据)而不是计算(您的速度有多快) GPU 可以处理浮点运算)。

PyTorch 2.0 为您做的第二个最重要的优化是 CUDA graphs。CUDA graphs有助于消除从 python 程序启动单个内核的开销。

torch.compile() 支持许多不同的后端,但我们特别兴奋的一个是生成 Triton 内核(https://github.com/openai/triton,用 Python 编写的,但性能优于绝大多数手写的 CUDA 内核)的 Inductor。假设我们上面的示例名为 trig.py,我们实际上可以通过运行来检查代码生成的 triton 内核:

TORCHINDUCTOR_TRACE=1pythontrig.py

@pointwise(size_hints=[16384],filename=__file__,meta={"signature":{0:"*fp32",1:"*fp32",2:"i32"},"device":0,"constants":{},"configs":[instance_descriptor(divisible_by_16=(0,1,2),equal_to_1=())]})@triton.jitdefkernel(in_ptr0,out_ptr0,xnumel,XBLOCK:tl.constexpr):xnumel=10000xoffset=tl.program_id(0)*XBLOCKxindex=xoffset+tl.reshape(tl.arange(0,XBLOCK),[XBLOCK])xmask=xindex

你可以验证融合这两个 sins 确实发生了,因为这两个 sin 操作发生在一个单一的 Triton 内核中,并且临时变量保存在寄存器中,可以非常快速地访问。

下一步,让我们尝试一个真实的模型,比如来自 PyTorch hub 的 resnet50。

importtorchmodel=torch.hub.load("pytorch/vision:v0.10.0","resnet18",pretrained=True)opt_model=torch.compile(model,backend="inductor")model(torch.randn(1,3,64,64))

如果您实际运行,您可能会惊讶于第一次运行很慢,那是因为正在编译模型。后续运行会更快,因此在开始对模型进行基准测试之前预热模型是常见的做法。

您可能已经注意到我们如何在此处使用“inductor”显式传递编译器的名称,但它不是唯一可用的后端,您可以在 torch._dynamo.list_backends() 中运行以查看可用后端的完整列表。为了好玩,您应该尝试 aot_cudagraphs 或 nvfuser。

现在让我们做一些更有趣的事情,我们的社区经常使用来自 transformers (https://github.com/huggingface/transformers) 或 TIMM (https://github.com/rwightman/pytorch-image-models)的预训练模型和我们的设计之一PyTorch 2.0 的目标是任何新的编译器堆栈都需要开箱即用,可以与人们实际运行的绝大多数模型一起工作。因此,我们将直接从 Hugging Face hub 下载预训练模型并对其进行优化。

importtorchfromtransformersimportBertTokenizer,BertModel#Copypastedfromherehttps://huggingface.co/bert-base-uncasedtokenizer=BertTokenizer.from_pretrained("bert-base-uncased")model=BertModel.from_pretrained("bert-base-uncased").to(device="cuda:0")model=torch.compile(model)#Thisistheonlylineofcodethatwechangedtext="Replacemebyanytextyou"dlike."encoded_input=tokenizer(text,return_tensors="pt").to(device="cuda:0")output=model(**encoded_input)

如果您从模型和 encoded_input 中删除 to(device="cuda:0") ,那么 PyTorch 2.0 将生成 C++ 内核,这些内核将针对在您的 CPU 上运行进行优化。你可以检查 Triton 或 C++ 内核的 BERT,它们显然比我们上面的三角函数示例更复杂,但如果你了解 PyTorch,你也可以类似地浏览它并理解。

相同的代码也可以https://github.com/huggingface/accelerate 和 DDP 一起使用。

同样让我们尝试一个 TIMM 示例:

importtimmimporttorchmodel=timm.create_model("resnext101_32x8d",pretrained=True,num_classes=2)opt_model=torch.compile(model,backend="inductor")opt_model(torch.randn(64,3,7,7))

我们使用 PyTorch 的目标是构建一个广度优先的编译器,该编译器将加速人们在开源中运行的绝大多数实际模型。Hugging Face Hub 最终成为我们非常有价值的基准测试工具,确保我们所做的任何优化实际上都有助于加速人们想要运行的模型。

本文翻译自https://pytorch.org/blog/Accelerating-Hugging-Face-and-TIMM-models/

使用PyTorch 2.0 加速Hugging Face和TIMM库的模型|天天快看

2022-12-25

龙芯中科(688047)158.6万股限售股将于12月26日解禁上市,占总股本0.4%

2022-12-25

初级会计的报名费用 热闻

2022-12-24

码刻|源码荣获清科“2022中国股权投资年度排名”多项大奖

2022-12-23

日媒:乘扶梯如何防病毒传播?站位大有讲究_当前视讯

2022-12-23

全球百事通!国光电器(002045)12月22日主力资金净卖出96.94万元

2022-12-23

提钱花贷款逾期4天延迟还款会上征信系统吗

2022-12-22

融资丨「安天圣施」完成2000万元pre-A轮融资,和瑞创投独家投资

2022-12-22

敏芯股份(688286)12月21日主力资金净卖出2182.48万元 当前滚动

2022-12-22

中航科工(02357):中航电子换股吸收合并中航机电获并购重组委无条件通过 天天聚看点

2022-12-21

马斯克:一旦找到继任者就将辞任推特CEO

2022-12-21

复盘中欧低波策略:以策略为导向研究+纪律化资配流程 全球观焦点

2022-12-21

天天播报:民富国际(08511.HK)完成配售8000万股 净筹约529.92万港元

2022-12-20

环球速讯:农业农村部:国家审定优质水稻品种占比达六成

2022-12-20

复旦微电(688385)215.45万股限售股将于12月21日解禁上市,占总股本0.26%

2022-12-20

同力日升: 同力日升关于使用部分闲置募集资金进行现金管理到期收回的进展公告

2022-12-19

港股异动 | 君实生物(01877)跌超13%领跌板块 机构指新冠主题投资机会性价比在下降

2022-12-19

项城市:志愿者团队冲锋在疫情防控一线_全球新要闻

2022-12-19

北京:今起6个新冠药品临时纳入医保范围|焦点报道

2022-12-18

知识课堂丨常用退烧药如何选择?布洛芬和对乙酰氨基酚有什么区别? 天天热资讯

2022-12-17

买的新鲜基围虾怎么保鲜 新鲜基围虾如何保鲜

2022-12-17

中南路桃叶·度伊专业减肥塑形管理中心减肥有效果吗 减肥多久才不会反弹

2022-12-16

每日精选:涨停雷达:教育个股异动 高乐股份触及涨停

2022-12-16

焦点速读:山外山: 山外山首次公开发行股票并在科创板上市网上发行申购情况及中签率公告

2022-12-15

国家统计局:前11月 全国商品房销售额11万亿 降了两成

2022-12-15

全球速递!福莱新材尝试布局锂电池及新能源汽车领域 且于2022年下半年已交付小批量订单

2022-12-15

环球快报:水发燃气: 关于发行股份购买资产并募集配套资金暨关联交易之非公开发行股票募集配套资金发行情况报告书披露的提示性公告

2022-12-14

商城县双椿铺镇高质量完成春季征兵任务_环球速看料

2022-12-14

天天微资讯!联合光电:公司与国内知名AR/VR企业乐相、小派、亮亮视野、纳德等已达成了友好的战略合作关系

2022-12-14

书到用时方恨少事非经过不知难的意思 书到用时方恨少事非经过不知难怎么解释

2022-12-13

公积金贷款合同遗失怎么办?

2022-12-13

新坐标: 新坐标独立董事关于第四届董事会第十五次会议相关事项的独立意见

2022-12-12

【环球聚看点】炬光科技涨6.98%,开源证券四周前给出“买入”评级

2022-12-12

【机构调研记录】南华基金调研京山轻机、普洛药业等3只个股(附名单)

2022-12-12

财信发展:我公司与湖南天雁无业务合作|全球热点

2022-12-09

观焦点:天宇股份董秘回复:公司山东昌邑天宇生产基地经过上半年的调试后,三季度开始已进入正常生产状态

2022-12-08

12月6日基金净值:华商甄选回报混合A最新净值1.3002,跌0.25%-天天通讯

2022-12-07

银川市第八届黄金珠宝节在8月20日盛大启动

2022-08-22

前苹果工程师解释为什么第一代iPhone没有复制和粘贴功能

2022-06-21

苏州疫情防控再升级:通过铁路离开苏州旅客须提供48小时内核酸检测阴性证明

2022-02-16

“江歌案”二审开庭 江秋莲因身体原因未出庭

2022-02-16

江歌母亲江秋莲诉刘鑫案二审正在开庭

2022-02-16

从收受500元开始 他走向深渊

2022-02-16

春季学期即将开学 海南要求校园常态化开展师生核酸检测

2022-02-16

辽宁葫芦岛:派出124名渔业执法人员进驻22座渔港 设立检测点

2022-02-16

葫芦岛昨日采集核酸样本105.5万人 新出现病例的封控小区每人每日单检

2022-02-16

辽宁葫芦岛:截至15日农村地区共居家隔离4029人

2022-02-16

辽宁葫芦岛2月15日新增15例确诊病例 均为绥中县报告

2022-02-16

内蒙古新增本土确诊病例7例

2022-02-16

辽宁葫芦岛新增15例本土确诊病例行程轨迹公布

2022-02-16

江苏新增本土确诊病例19例 其中苏州市18例、南通市1例

2022-02-16

广东新增本土确诊病例3例 均为深圳报告

2022-02-16

广西新增本土确诊病例2例 百色市报告

2022-02-16

上海浦东一厂区生产设备倒塌6人被困 搜救工作正在进行

2022-02-16

辽宁省新增15例本土新冠肺炎确诊病例 为葫芦岛市报告

2022-02-16

我国中东部地区将有一次明显雨雪天气过程

2022-02-16

北京今日晴冷继续“控场” 最高气温仍不足0℃

2022-02-16

云南新增1例本土无症状感染者

2022-02-16

内蒙古呼和浩特发现3例核酸检测阳性人员

2022-02-16

撸猫狗追大象 这届年轻人为什么那么喜欢动物

2022-02-16

喊父母回家上班:一道超越亲情的复杂考题

2022-02-16

医护人员追求“事业蒸蒸日上”哪里做错了

2022-02-16

男子饭局后猝死家属索赔 法院判决同桌人承担责任

2022-02-16

女子推倒性骚扰男子致其死亡不担责 认定属于正当防卫

2022-02-16

江西瑞昌警方打掉一境外“杀猪盘”电诈团伙

2022-02-16

“杀熟”猖獗,为何还有人不断入局?

2022-02-16

规范医生直播行为需要多管齐下

2022-02-16

不到3天,被拖欠21年的社保费有着落了

2022-02-16

学历障碍破除后,职校生如何跻身更好赛道

2022-02-16

桑树有两套染色体基数? 西南大学十年研究首次揭秘

2022-02-16

苏州7地调整为中风险地区

2022-02-16

小伙被多次转卖到柬埔寨 拒绝做电诈全身几乎被抽干血

2022-02-16

彩灯万盏造幻境自贡灯会火出圈

2022-02-16

冬奥会赛程过半 “长尾效应”将如何体现?

2022-02-16

北京全市中小学将实现“互联网+明厨亮灶”全覆盖

2022-02-16

反家庭暴力要打上反经济控制“补丁”

2022-02-16

北京冬奥会全部场馆实现绿色供电

2022-02-16

战“疫”下的一碗热汤圆

2022-02-16

返岗潮叠加节庆潮,苏州疫情防控这么办

2022-02-16

内蒙古满洲里市1例确诊病例行程公布

2022-02-16

深圳新增3例新冠肺炎确诊病例

2022-02-16

2月16日零时起 苏州新增关闭18个高速公路入口

2022-02-16

广州通报两名外地来穗人员确诊病例 具传播风险

2022-02-16

穿越古今“闹”元宵:一朝入“画”梦回宋韵杭州

2022-02-16

元宵节里的“洋面孔”:在学做灯笼中感受“团圆”

2022-02-16

黄河上的“调音师”

2022-02-16

河北唐县北洪城村:元宵节流行挂“吊挂”

2022-02-16

广州元宵佳节办理婚姻登记709对 倡导婚事新办简办

2022-02-16

世遗之城泉州“闹”元宵:赏万盏华灯 送八方全福

2022-02-16

元宵佳节“情暖家乡年” 广东汕头全球潮汕人云联欢

2022-02-16

大山深处一个人的元宵节

2022-02-16

万里铁道线上的深夜“约会”

2022-02-16

“世界客都”广东梅州博揽英才 最高补贴75万元

2022-02-16

越剧春晚首次亮相团圆之夜 20多位名家线上线下闹元宵

2022-02-16

天津一地调整为低风险

2022-02-16

他是上海首例心肾移植患者,术后生存期已近5年还开了公司

2022-02-16

浙江嘉兴通报一例确诊病例密切接触者轨迹

2022-02-16

在华海外网红“嘉游赣” 在江西寻觅“特色年味”

2022-02-16

共富路上不掉队 浙江绍兴民企捐资百万帮扶千名残疾人

2022-02-16

中国最后的狩猎民族:森林里的幸福生活 小康梦

2022-02-16