首页 >行情 > > 正文

使用PyTorch 2.0 加速Hugging Face和TIMM库的模型

2022-12-24 09:38:17

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

设为星标,干货直达!

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/

上一篇: 下一篇:
x
推荐阅读

使用PyTorch 2.0 加速Hugging Face和TIMM库的模型

2022-12-24

世界滚动:贵州比较好的精神病医院

2022-12-23

直播间“带岗”不“带货”让互联网惠及更多求职人

2022-12-23

风云榜·现场丨“不确定性”笼罩,企业创新真的能驱动增长吗?

2022-12-23

天天观察:超五成私募满仓,新备案基金数量猛增,啥信号?

2022-12-22

黔江区2018工伤认定的基本规定?

2022-12-22

天天微头条丨中国女足公布最新集训名单 海外球员未入选

2022-12-22

【手慢无】5G双频650M!39元神器让你的主机摆脱网线束缚

2022-12-21

全球新资讯:英媒:中国建造大洋超深水钻探船

2022-12-21

在这碧波荡漾的地方(逐梦)

2022-12-21

每日热文:常润股份: 常熟通润汽车零部件股份有限公司关于使用部分暂时闲置募集资金进行现金管理到期赎回的公告

2022-12-20

中央财办:充分认识房地产业重要性 住房消费潜力要予以释放

2022-12-20

即时:发布变更又快又稳?腾讯运维工程师经验首发

2022-12-19

12月19日中航光电现3952.9万元大宗交易 天天动态

2022-12-19

天天热点评!缺哪儿补哪儿,90后为老楼加出“左膀右臂”

2022-12-19

当前热点-鹿邑县:推进“五星”支部创建 激发基层治理活力

2022-12-19

高位买百亿私募产品,反弹了,居然还亏好多?

2022-12-18

《三体》动画热播 B站受益几何?_环球速读

2022-12-17

天天微速讯:12月16日基金净值:广发恒信一年持有期混合A最新净值1.0111,跌0.13%

2022-12-17

胃食道逆流怎么办 质子泵抑制剂风险高

2022-12-16

全球热门:信德新材董秘回复:公司根据发展经营状况和市场情况制定发展战略,未来公司经营发展规划

2022-12-16

天天热资讯!科达利: 关于控股股东部分股份质押及解除部分股份质押的公告

2022-12-15

每日讯息!华光环能(600475):无锡华光环保能源集团股份有限公司子公司项目中标

2022-12-15

QQ邮箱推实用新功能:英文文档一键即可翻译 天天报资讯

2022-12-15

*ST宜康: 关于聘任会计师事务所的公告-时讯

2022-12-14

精彩看点:洛龙区率先完成农村126家村级卫生室医保专线全覆盖

2022-12-14

联合光电:公司目前的产品不涉及军用-环球看热讯

2022-12-14

受伤的赔偿标准是什么?

2022-12-13

广东打房屋合同官司律师如何收费 当前观察

2022-12-13

全球快资讯:三只松鼠: 独立董事制度

2022-12-12

智莱科技(300771)12月12日主力资金净买入1375.51万元

2022-12-12

多地发放消费券,助力城市烟火气回归

2022-12-12

异动快报:ST太安(002433)12月9日10点51分触及涨停板-当前快报

2022-12-09

热头条丨西方石油(OXY.US)CEO:加州计划对石油公司进行处罚是“荒谬的”

2022-12-08

12月6日基金净值:东方红信用债债券A最新净值1.1759,跌0.12%

2022-12-07

大米等库存充足!宁波生活必需品市场供应总体平稳有序

2022-09-15

276家企业入选!深圳第四批入选国家级“小巨人”名单公布

2022-08-18

全国新能源汽车下乡活动在昆山启动 将发放500万元“红包”

2022-06-20

安阳本土确诊病例上升至26例

2022-01-10

3次推迟婚期 满洲里抗疫民警兑现承诺:“我回来娶你了!”

2022-01-10

上海公安民警在岗位上迎接2022年“中国人民警察节”

2022-01-10

郑州核酸检测为中小学生开辟“绿色通道”

2022-01-10

反扒便衣警察“小曹”:藏在人海中的隐形“守护者”

2022-01-10

哥哥移植肾脏给病重弟弟 已在上海顺利康复

2022-01-10

网友与人裸聊被敲诈10万余元 被告人获刑5年

2022-01-10

1月10日起天津市暂停开展旅行社旅游业务活动

2022-01-10

“3·28”特大跨境电信网络诈骗案公开审理

2022-01-10

忠诚履职 守护万家灯火

2022-01-10

奥密克戎病例已涉天津、安阳 “动态清零”必须坚持!

2022-01-10

专家协作成功完成亲体肾移植 同“肾”兄弟顺利康复

2022-01-10

著名指挥陈燮阳携苏州交响乐团“相约北京”

2022-01-10

中国热科院选育出4个木薯新品种

2022-01-10

北京疾控:12月9日以来途经或旅居天津市人员请立即报备

2022-01-10

河南安阳本轮疫情累计报告确诊病例26例

2022-01-10

许勤批示黑土地保护不力问题:加快形成黑土地保护长效机制

2022-01-10

【挑战365天正能量速写画】第041期:当警娃难,当双警家庭的警娃更难

2022-01-10

重庆姐弟坠亡案两被告人5个月间聊天记录曝光

2022-01-10

因疫情防控措施落实不力 江苏金湖一超市被红牌警告

2022-01-10

江歌案一审判决刘鑫赔偿近70万元 有何依据?专家解读

2022-01-10

广东肇庆“毒驾连撞5车致1死”肇事司机被批捕

2022-01-10

一线工作近22年的缉毒警:我知道坏的是毒品不是人性

2022-01-10

青海保障门源地震后生活必需品应急物资

2022-01-10

江西最大文物倒卖案宣判:倒卖国家二级文物 9人获刑

2022-01-10

呼和浩特:寒假期间有条件的学校要开展校内托管服务

2022-01-10

广西东兴口岸恢复通关 入境需网上预约

2022-01-10

天津米面油存量由20天提高至30天 超市菜市场进货量翻倍

2022-01-10

天津市委市政府致全市父老乡亲的慰问信:我们一定能够打赢

2022-01-10

北京市十五届人大五次会议胜利闭幕

2022-01-10

“中国最后一个原始部落”翁丁老寨火灾原因公布

2022-01-10

天津:划定封控区 全市开展全员核酸检测

2022-01-10

重庆姐弟被生父扔下坠亡案上诉期结束 一审法院暂未收到两被告人上诉状

2022-01-10

子夜直击,天津寒天战“疫”

2022-01-10

兰州名师话“美育”:“尚乐立人”分层培优 以“美”润教

2022-01-10

中国边疆“北方第一所”:9名民警守护“生命禁区”

2022-01-10

江歌母亲江秋莲:尊重法院判决,法律认定在我意料之中

2022-01-10

河南安阳9日12时至24时新增11例本土确诊病例

2022-01-10

辟谣!网传“封控区管控区相继解封”通知并非西安

2022-01-10

铁路公安以110幅优秀书画作品庆祝人民警察节

2022-01-10

“中国最后一个原始部落”翁丁老寨火灾原因公布

2022-01-10

天津:划定封控区 全市开展全员核酸检测

2022-01-10

重庆姐弟被生父扔下坠亡案上诉期结束 一审法院暂未收到两被告人上诉状

2022-01-10

子夜直击,天津寒天战“疫”

2022-01-10

兰州名师话“美育”:“尚乐立人”分层培优 以“美”润教

2022-01-10

中国边疆“北方第一所”:9名民警守护“生命禁区”

2022-01-10

江歌母亲江秋莲:尊重法院判决,法律认定在我意料之中

2022-01-10

河南安阳9日12时至24时新增11例本土确诊病例

2022-01-10

辟谣!网传“封控区管控区相继解封”通知并非西安

2022-01-10

铁路公安以110幅优秀书画作品庆祝人民警察节

2022-01-10

老人5折环卫工8折生活困难免费 这家面馆背后有个暖心事

2022-01-10

亲手制作“城砖” 这群小学生期末测评“砌了一面明城墙”

2022-01-10

河南安阳本土确诊病例与奥密克戎变异株有关

2022-01-10

浙江北仑调整封控区后首轮核酸检测12528人 结果均为阴性

2022-01-10

广东加强春运期间重点交通场所疫情防控

2022-01-10

浙江永康第五轮“三区”核酸检测结果均为阴性

2022-01-10

天津奥密克戎小学生病例传播链上已有15人 14人为儿童

2022-01-10

天津市商务部门快速应对疫情 米面油存量提至30天

2022-01-10

天津:抓紧开展全员筛查 全力筑牢疫情防控网

2022-01-10

江歌母亲代理律师:江秋莲核心诉求在判决中体现,将考虑是否上诉

2022-01-10

广州鹤洞大桥正式恢复桥面通车

2022-01-10

法院:刘鑫为自保阻挡江歌于门外有明显过错 事后言论有违伦常

2022-01-10