使用PyTorch 2.0 加速Hugging Face和TIMM库的模型
点蓝色字关注“机器学习算法工程师”
设为星标,干货直达!
(相关资料图)
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库的模型
点蓝色字关注“机器学习算法工程师”设为星标,干货直达!PyTorch2 0引入了**torch compile()**来加速模型,这篇文章我们将介绍如何使用
多步式利润表的优点是什么
多步式利润表的优点是:多步式利润表对项目进行了详细分类,分步骤地反映了利润总额的形成情况,层次清楚,便于企业前后各期报表及不同企业间
4999元,摩托罗拉moto razr 2022调价,手机卷王又来了|天天视讯
12月28日消息motorazr2022调价直降1000元。联想中国区手机业务部总经理陈劲宣布,motorazr2022要成为首款定价在5000元以内的骁龙8+折叠屏产品
2023春节会被恋人带回家见家长的星座
一段感情到了稳定的阶段,总会商讨下一步的发展,而在这个过程当中一定不可避免的其实就是带自己心爱的另一半回家见家长。这个过程既表明了这
世界速递!中触媒(688267)12月27日主力资金净买入33.39万元
截至2022年12月27日收盘,中触媒(688267)报收于38 12元,上涨2 75%,换手率1 76%,成交量6767 27手,成交额2556 19万元。
【热闻】央行调查:未来三个月16%的居民打算购房 比例大幅下降
证券时报e公司讯,央行公布的《2022年第四季度城镇储户问卷调查报告》显示,未来三个月,16 0%的居民打算购房,这一比例大幅低于三季度的17 1%
当前快报:长春高新: 关于2022年限制性股票与股票期权激励计划部分股票期权注销完成的公告
证券代码:000661 证券简称:长春高新 公告编号:2022-086 长春高新技术产业(集团
盛视科技董秘回复:疫情期间,我国大部分口岸被关停,旅客出入境业务大多处于停滞状态,客户的采购需求延缓 全球球精选
盛视科技(002990)12月27日在投资者关系平台上答复了投资者关心的问题。
皮蛋放在冰箱里会不会坏?
皮蛋可以放冰箱里,但只能冷藏,不能冷冻,原因如下:皮蛋属腌制食物,保存比较重要。一般情况下,未剥开的皮蛋应放在温度相对较低的通风避光
环球即时看!售价为进价3倍 医疗公司高价销售抗原被罚
天眼查App显示,近日,北京康复之家医疗用品有限公司朝阳第一分店因违反价格法,被北京市朝阳区市场监督管理局警告并罚款20万元。处罚事由显示
平安小橙花逾期29年会上征信系统吗_每日头条
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
诈骗罪三万判多少年
【三年以上十年以下有期徒刑法定基准刑参照点】诈骗4万元的,为有期徒刑三年,每增加2000元,刑期增加一个月。【十年以上有期徒刑法定基准刑参
【手慢无】老电脑升级神器!63元抢购128GB高速固态硬盘|天天微头条
移速金钱豹系列SATA3 0固态硬盘128GB当前售价79元,粉丝价63元,售价低至白菜价,老电脑升级神器,有需要的小伙伴儿可以买起来了。移速(MOVES
小麻袋借贷贷款逾期15个月征信有什么影响
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
人民银行参事室主任纪敏:货币、财政政策传导效果有望增强 我国货币政策以我为主的空间将进一步增大-当前简讯
人民银行参事室主任纪敏23日在中国财富管理50人论坛2022年会上表示,展望明年,一方面外部环境更趋复杂严峻,海外通胀高位运行,全球经济下行
本周盘点(12.19-12.23):物产中大周跌6.19%,主力资金合计净流出9765.27万元_世界最资讯
截至2022年12月23日收盘,物产中大(600704)报收于4 7元,较上周的5 01元下跌6 19%。本周,物产中大12月19日盘中最高价报5 02元。12
每日速看!港股异动 | 新东方在线(01797.HK)涨超5%再破顶 机构预计明年短视频平台电商成交仍将维持高增长
新东方在线(01797 HK)早盘再涨超5%,高见56 95港元创历史新高,截至发稿,涨4 9%,报56 7港元,成交额1 95亿港元。
全球看热讯:组图 | 三乐铁路有序推进雏形初现 建设进度超七成
新海南客户端、南海网、南国都市报12月22日消息(记者汪承贤)日前,记者航拍三亚至乐东公交化旅游化列车改造项目(以下简称“三乐铁路项目...
引资规模稳定增长、引资结构不断优化 外资加速深耕中国市场
前三季度吸收外资破万亿元,前10个月引资规模已接近去年全年水平……今年以来,我国吸收外资规模稳定增长、引资结构持续优化。不断开放的中...
12月LPR继续“按兵不动” 5年期以上LPR为4.3%与上月持平
12月20日,全国银行间同业拆借中心公布新一期贷款市场报价利率(LPR),1年期LPR为3 65%,5年期以上LPR为4 3%,均与上月持平。业内人士认为,
沪江材料(870204)12月22日游资资金净买入7.02万元
截至2022年12月22日收盘,沪江材料(870204)报收于8 84元,下跌0 79%,换手率0 69%,成交量1126 15手,成交额99 18万元。12月
双环科技董秘回复:公司当前没有房地产开发、销售业务
双环科技(000707)12月22日在投资者关系平台上答复了投资者关心的问题。投资者:请问公司的有房地产业务吗?双环科技董秘:你好,公司当前没有
全球球精选!台前县气象局发布大风蓝色预警「IV级/一般」「2022-12-21」
【来源:台前县气象局】台前县气象台2022年12月21日19时48分发布大风蓝色预警信号:预计未来24小时内,台前县县区及所辖乡镇、街道将出现4-5级
贵研铂业(600459.SH)子公司投资3000万元设立贵研循环公司 世界今亮点
智通财经APP讯,贵研铂业发布公告,根据公司贵金属二次资源循环利用板块规划布局和业务可持续发展的需要,公司全资子公司贵研资源公司投资设立
环球焦点!金圆股份董秘回复:公司将积极推进精制碳酸锂的加工提纯进度,力争早日形成销售
金圆股份(000546)12月06日在投资者关系平台上答复了投资者关心的问题。投资者:现在全国疫情防控都放松了,公司采取什么措施没有保证运输提纯
欧度携手清华大学色彩研究所 探索男性服装消费需求
中国服装业从生产时代到渠道时代,再到如今已进入品牌时代。随着中国经济的飞速发展,消费者的需求正日益个性化、多元化,服装业不仅要抓住
同比下降8%!新疆高院发布2021年消费者权益纠纷典型案例
3月15日,新疆维吾尔自治区高级人民法院紧密配合消费者权益保护日宣传,通报全区法院2021年消费者权益纠纷案件审理情况,同时发布两个典型
衣着暴露的女主播搔首弄姿 低俗短视频为何大量出现?
今年全国两会期间,有全国政协委员提出,当前,很多直播和短视频内容具有正能量价值,但也有很多是各种低俗、媚俗、庸俗的短视频和直播。建
安徽2021年对229起消费类公益诉讼案件提出惩罚性赔偿
日前,在安徽省政府新闻办召开的新闻发布会上,安徽省检察院副检察长李卫东介绍了该省检察机关服务保障消费者权益有关履职情况。据介绍,20
铜陵市启动对根治欠薪冬季专项行动“回头看”督查
为扎实做好铜陵市保障农民工工资支付的标准化管理和信息化监管工作,将保障农民工工资支付各项制度落实落地,日前,铜陵市启动对2021年根治