使用PyTorch 2.0 加速Hugging Face和TIMM库的模型:视讯
2022-12-29 10:28:58 来源:
点蓝色字关注“机器学习算法工程师”
(资料图)
设为星标,干货直达!
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库的模型:视讯
-
韩国男神宋仲基新恋情曝光!美貌英国女友疑似怀孕,网友:双宋真的变成过去式了……
-
两部门:到2025年绿色技术创新对绿色低碳发展的支撑能力持续强化
-
湘西横坡县交通违章处理要带什么东西-每日资讯
-
中再资环(600217)12月27日主力资金净卖出991.11万元
-
天源环保:占公司总股本33.93%的限售股将于12月30日上市流通|当前播报
-
能链智电荣获“2022年度新能源创新服务奖”:环球新消息
-
韩国前总统李明博获特赦 15年刑期被免除 当前热闻
-
2023年全国硕士研究生招生考试结束 全国大规模异地借考如何实现?|信息
-
全球热资讯!江铃汽车最新公告:8月销量23297辆 同比增长0.47%
-
湖南保利物业高管变动:蔡得强接替董事长职位 万恺出任董事:每日播报
-
宜昌交通违章去处理要提前带什么
-
星二代老爸PUA?王鹤棣换掉蔡徐坤?古力娜扎被嫌弃?徐璐掉咖了?姨太问答 每日精选
-
西南证券:给予欧普康视买入评级,目标价位43.7元
-
皓元医药: 北京德恒律师事务所关于上海皓元医药股份有限公司发行股份及支付现金购买资产并募集配套资金暨关联交易实施情况的法律意见
-
助力企业“走出去” 商务部将研究符合条件的展会适时重启线下展 全球要闻
-
美联新材:公司目前投资项目较多,投资资金需求较大,因此无回购计划:每日速讯
-
新华视点|多地发放新一轮消费券,重点扶持受疫情影响严重行业:世界球精选
-
今日热讯:12月22日远航精密发生1笔大宗交易 成交金额840.75万元
-
当前焦点!新华全媒+|记者直击:上海药品物流配送24小时不停歇
推荐内容
- 使用PyTorch 2.0 加速Hugging Face和TIMM库的模型:视讯
- 韩国男神宋仲基新恋情曝光!美貌英国女友疑似怀孕
- 两部门:到2025年绿色技术创新对绿色低碳发展的支
- 湘西横坡县交通违章处理要带什么东西-每日资讯
- 中再资环(600217)12月27日主力资金净卖出991.11万元
- 天源环保:占公司总股本33.93%的限售股将于12月30
- 能链智电荣获“2022年度新能源创新服务奖”:环球
- 韩国前总统李明博获特赦 15年刑期被免除 当前热闻
- 2023年全国硕士研究生招生考试结束 全国大规模异
- 全球热资讯!江铃汽车最新公告:8月销量23297辆
- 湖南保利物业高管变动:蔡得强接替董事长职位 万
- 宜昌交通违章去处理要提前带什么
- 星二代老爸PUA?王鹤棣换掉蔡徐坤?古力娜扎被嫌
- 西南证券:给予欧普康视买入评级,目标价位43.7元
- 皓元医药: 北京德恒律师事务所关于上海皓元医药
- 助力企业“走出去” 商务部将研究符合条件的展会
- 美联新材:公司目前投资项目较多,投资资金需求较
- 新华视点|多地发放新一轮消费券,重点扶持受疫情
- 今日热讯:12月22日远航精密发生1笔大宗交易 成
- 当前焦点!新华全媒+|记者直击:上海药品物流配送
- 专利显示索尼工作室或用无人机群为游戏取景
- 焦点报道:前11个月上海海关空运渠道验放阿拉伯国
- 泛亚微透:宁德时代是公司的重要客户
- 国家邮政局:重点保障医疗物资寄递服务
- 全球快资讯丨39分钟点赞一千万次,梅西ins动态创
- 焦点日报:沃顿科技获1家机构调研:未来公司将聚
- 今日热搜:“财政直通车”这样抵达田间地头(一线
- 战开门红or战收官?11月保费暴露险企差异策略,有
- 东材科技:12月16日融券卖出金额47.19万元,占当
- 可以2个月内做下遗嘱吗-天天消息
- 张文宏:如何应对新冠的新常态?:每日消息
- 航宇科技(688239)12月16日主力资金净买入439.87
- 春兴精工: 苏州春兴精工股份有限公司独立董事关
- 世界速递!发电机组烧机油的原因是什么?
- 当前简讯:微软将从1月1日起为欧盟客户推出"数据边
- 贵研铂业: 贵研铂业股份有限公司配股提示性公告:
- 快报:男子高烧近40度睡觉掀被子直冒烟!跟蒸桑拿
- 世界播报:签合同需要交哪些税呢?
- 【独家】晶赛科技(871981)12月14日游资资金净买
- 新媒股份董秘回复:截止至2022年12月9日,公司股
油气
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
经济
-
中新网通辽10月18日电 (记者 张林虎)18日,记者从内蒙古自治区通辽市奈曼旗公安局获悉,国家一级保护动物--梅花鹿误入当地村民羊群,
-
中新网杭州10月18日电 (王题题 胡燕婕)云天收夏色,浅秋正渐浓。10月18日,浙江杭州市西湖游船有限公司推出的惠民多站点“西湖环湖游
-
中新网福州10月18日电 (记者 龙敏 王东明)福州市晋安区官方18日晚间通报,18日14时47分,晋安区岳峰镇化工路爱摩轮商业广场项目摩天
-
中新网兰州10月18日电 (闫姣 艾庆龙 吉翔)“红山白土头,黄河向西流。”不少人疑问,天下黄河向东流,为何甘肃永靖县这段黄河却向西
-
中新网北京10月18日电 《清华城市健康设施指数》18日在北京发布。报告成果显示,城市健康设施指数领先城市以中心城市和东部沿海城市