当前位置:首页>新闻 > >正文

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

  • 2022-12-29 10:35:45来源:

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

设为星标,干货直达!


【资料图】

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/

标签:

延伸阅读

推荐阅读

新华全媒+丨中风患者防疫需要注意什么?|当前消息

1月9日,中南大学湘雅医院神经内科主任医师夏健在给患者提供诊疗服务。(受访者供图)新华社长沙1月10日电中风患者(脑血管

卡片放大播放效果实现总结,不同元素间的放大过渡效果如何实现?|世界今头条

背景最近一段时间做了几个需求,其中涉及的素材列表展示,需要实现类似下方图片中的动效,暂且称之为【卡片放大播放动效】,具体细节如下:初

来服务网,让家电焕然一新-世界新视野

但是随着长时间使用,家电里的灰尘、细菌、异味都影响了使用感。长久使用后的微波炉,内壁的油渍油垢清理让人烦恼不已。现金陵晚报旗下服务网

2021重庆玛雅海滩水公园端午节游玩攻略(优惠门票、活动)

重庆玛雅海滩水公园开园时间:2021年6月13日地址:重庆市两江新区礼嘉镇金渝大道29号开放时间:10:30~18:30★最新优惠门票1、水乐园早鸟票门票价格:

南农大教授苦心研究不起坨的玉米糊拼多多助力科技美味从实验室走向大市场

玉米或许是粮食中最平平无奇的一种,生活中无处不在。而玉米糊更是很多人儿时的记忆,老少皆宜。如今,因润肠通便、健胃和中、有助降低胆固醇

当前报道:北京中日创新合作示范区累计新增注册主体1973家

(徐婧杜燕)记者5日从北京市大兴区获悉,截至2022年底,北京中日创新合作示范区(简称“中日示范区”)累计新增注册主体1973家,其中外资企业62家

江苏省泰州市市场监管局公示70批次糕点监督抽检合格信息_天天播报

中国质量新闻网讯近日,江苏省泰州市市场监管局公示2022年第十七期食品安全监督抽检结果,涉及70批次糕点监督抽检合格信

聘请律师需要注意的事项有哪些_今日快看

(1)与律师所在的律师事务所签订律师服务合同;(2)根据律师服务合同的约定向律师事务所支付律师费,并由律师事务所出具税务发票;(3)根据

马前炮,第2波抄底成功!涨婷了,坚持就是胜利

上周五空仓说过了,那是因为个股集体跌停和大跌洗盘,根据事不过三的原则,洗盘最多3天,所以今天早上就抄底入场了,因为好股都是早上涨的,最

每日短讯:【早知道】2023年对月销售额10万元以下的增值税小规模纳税人免征增值税;央行上海总部:推动上海房地产市场平稳健康发展

证券时报e公司讯,摘要:两部门:2023年对月销售额10万元以下的增值税小规模纳税人免征增值税。央行上海总部:推动上海房地产市场平稳健康发展

全球热点评!民法典上还贷期间什么时候开始计算诉讼时效

借款诉讼时效:(1)约定了还款期限的借款,诉讼时效从还款期限届满的次日起计算满3年;(2)没有约定还款期的借款:根据相关法律规定,对于借款期

2023年1月9日全国各地最新大米价格行情走势分析 世界观焦点

中商情报网讯:最新数据显示:1月8日,全国粳米当日均价为5 22元 公斤,籼米当日均价为4 88元 公斤。其中,粳米价格

宁夏交通违章处理需要哪些材料 世界观天下

1、车辆行驶证原件或复印件;2、车辆驾驶人驾驶证原件;3、车辆驾驶人身份证原件;4、现金和银行卡。交通违章行为在事故发生中所起作用的大小,主

顺丰押下四个亿,春节放手一搏

春节不打烊,顺丰发四亿元补贴员工。出品|电商行业作者|航叔顺丰快递春节不打烊春节将至,顺丰又有大动作。日前,顺丰宣布今年将持续保障春节

简讯:光伏企业在这里扎下根(经济聚焦)

核心阅读围绕重点产业,青海西宁推行“链长制+包保制”,以精准招商和靠前服务,为企业提供全方位保障,助力企业生产更稳、产业链条更强。...

交易猫怎么发货 交易猫如何发货呢

1、客户下了订单后,客服的后台会有通知,接到通知后,客服会记录下来客户的联系方式及地址,以及客人订购的商品。2、整理好了客人订购的商品

雷柏科技(002577.SZ):控股股东减持完毕 累计减持1%股份_要闻速递

格隆汇1月5日丨雷柏科技公布,公司控股股东香港热键于2022年12月14日至2023年01月04日期间通过集中竞价交易的方式累计减持公司无限售流通股282

一斤牛肉半斤菜要多少面粉? 每日关注

1000克面粉。1 将牛里脊剁成牛肉末,备用,芹菜用开水里焯一下,切成芹菜末备用。将牛肉末、芹菜末、酱油、鸡蛋清和牛肉味浓汤宝放在搅拌盆里

环球热资讯!使用Python批量筛选上千个Excel文件中的某一行数据并另存为新Excel文件(上篇)

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤离离原上草,一岁一枯荣。大家好...

东华能源(002221):第六届董事会第十一次会议决议-天天观焦点

证券代码:002221证券简称:东华能源公告编号:2023-001东华能源股份有限公司第六届董事会第十一次会议决议公

环球百事通!2023年投资建议:坚持看好大金融、制造业,收复3500点,美股反弹

即将和2022年挥手告别,回顾这一年的投资历程,有得有失,还算满意。总体小亏损,正所谓知足常乐,那就展望迎接2023年吧。坚定看好大金融和制

天天最新:南京新冠康复专项体检医院+预约方式

为了帮助市民综合评估身体恢复情况,排查健康隐患,目前已有多家知名医院及连锁品牌体检机构推出新冠康复专项体检服务,对呼吸系统、消化系统

家里的衣柜是定制好,还是自己买板子请木工做好?今天终于明白了 通讯

大家好我是小雷,今天跟大家聊聊家里面的衣柜定制好,还是自己买板材请木工做好,相信这个也是大部分朋友在装修的时候最纠结的一个问题,今天

“最帅中国演员”榜单出炉,杨洋、吴磊上榜前五,肖战拿下首位! 环球速看料

在娱乐圈有各种各样的榜单,不过其中也有很多属于是“野鸡”榜单,没有什么权威性。当然也有一些榜单是大家评选出来的,大家都比较认可。而...

阳光乳业:公司没有婴幼儿乳粉产品|今日热讯

阳光乳业(001318)01月05日在投资者关系平台上答复了投资者关心的问题。

【2023开门红】首个交易日A股超4200家个股上涨 沪指重返3100点

点击蓝字关注南方财经报道导读:1月3日,A股迎来了2023年的首个交易日。在交易日当天,A股走出震荡回升的态势,202

世界观天下!供需整体呈现两弱状态 PTA价格跟随油价波动

来源:宝城期货作者:宝城期货研报正文核心观点:【PTA】今日(1月3日)PTA主力合约PTA2305最终收盘于5530元 吨,较上一交易日收盘价下跌10元 吨,

天天速读:未来一周气温回升 雾霾重森林火险等级升高

未来一周气温回升雾霾重森林火险等级升高

世界热文:2023年以太坊生态5大预测;平台和钱包APP的安全性 | 区块客周刊

你已选中了添加链接的内容2023 1 2第151期本期关键字Bitkeep应用为官方正版资产仍然被盗;全球主要央行在2022年累计加息2700个基点;做慈善远

猜您喜欢

Copyright ©  2015-2022 时代服装网版权所有  备案号:   联系邮箱: 514 676 113@qq.com