首页 > 资讯 > > 正文

世界百事通!使用PyTorch 2.0 加速Hugging Face和TIMM库的模型

2022-12-24 06:23: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库的模型

点蓝色字关注“机器学习算法工程师”设为星标,干货直达!​PyTorch2 0引入了**torch compile()**来加...

2022-12-24 06:23:58

马斯克今年卖400亿美元特斯拉,称两年内不再沽货

Tesla行政总裁马斯克表示,两年内不会再沽售Tesla股份。他又预期,美国经济明年将陷入严重衰退,消费需...

2022-12-23 17:16:53

安鑫花网贷逾期多久可以查到-环球微速讯

网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天...

2022-12-23 11:48:08

速读:南京楼市放大招!这些外地人购房不需社保,卖房1年内再买可退个税

南京楼市放大招!这些外地人购房不需社保,卖房1年内再买可退个税

2022-12-23 06:13:51

坚持“木桶思维” 补足发展短板,广东省政府发展研究中心携手广发证券助力云浮镇安全面振兴

南方财经全媒体见习记者丁莉广州报道自2020年脱贫攻坚取得决定性胜利后,我国“三农”工作重心正转向“...

2022-12-22 17:30:21

天天热推荐:澳政府计划出台新规,降低支付系统费用!

澳政府计划出台新规,降低支付系统费用!

2022-12-22 11:32:13

世界快播:德债收益率周三上涨不到2.0个基点

210年期德债收益率利差下跌0111个基点,报-22498个基点,欧股开盘前曾跳水至日低-25132个基点

2022-12-22 02:20:42

华通热力(002893.SZ)股东中山通用投资减持148.8万股 减持期限已满

智通财经APP讯,华通热力发布公告,近日,公司董事会收到股东中山通用投资出具的《关于股份减持计划实施...

2022-12-21 16:04:03

世界观点:感染获得的抗体比疫苗接种更好?转阴后能否打疫苗,多久能打?癌症患者是接种疫苗的优先人群?【科学防疫小贴士】(41)

感染获得的抗体比疫苗接种更好?转阴后能否接种新冠疫苗?多久能接种?癌症患者是否是接种疫苗的优先人...

2022-12-21 09:56:20

环球快资讯:大成慧心优选一年持有混合A(014859)基金份额发售日期公布

大成慧心优选一年持有混合A(014859):大成慧心优选一年持有期混合型证券投资基金自2023年1月3日起到2023...

2022-12-20 22:40:22

嘉澳环保(603822)12月20日主力资金净买入204.33万元|动态焦点

截至2022年12月20日收盘,嘉澳环保(603822)报收于37 66元,上涨2 56%,换手率1 04%,成交量0 8万手...

2022-12-20 15:06:33

恒光股份(301118)12月19日主力资金净买入921.89万元|焦点速读

截至2022年12月19日收盘,恒光股份(301118)报收于33 09元,上涨1 53%,换手率6 73%,成交量3 54万手...

2022-12-20 08:41:23

每日速递:冠豪高新: 冠豪高新监事会关于向激励对象授予预留部分限制性股票事项的核查意见

冠豪高新:冠豪高新监事会关于向激励对象授予预留部分限制性股票事项的核查意见

2022-12-19 20:13:03

世界微动态丨尼日利亚南部多个村庄爆发霍乱至少20人死亡

尼日利亚卫生官员18日说,尼南部克罗斯河州多个村庄日前爆发霍乱疫情,已造成至少20人死亡、30多人住院...

2022-12-19 14:57:46

女人在孕期哪些蔬菜不能吃 这4种蔬菜不适合孕期女性别吃|天天速读

我们经常都听说,孕妇应多吃蔬菜和水果,对自身和胎儿都有好处,但其实并不是所有的蔬菜孕妇都能吃的,还是...

2022-12-19 09:00:30

息县路口乡以党建为引领 不断优化营商环境|全球报资讯

今年以来,息县路口乡紧紧围绕上级部署要求,以党建为引领,以服务企业为主线,积极创新工作机制、激发...

2022-12-18 23:28:26

醉酒驾驶醉驾会不会拘留?-当前要闻

酒驾之后被拘留属于行政强制措施,不属于刑事案件的,除非你是因为酒驾造成了严重后果(1死或3重伤)。...

2022-12-18 08:45:58

“人民主播·国货赋能计划开幕式”活动在穗举行 当前热点

主办方供图中新网广东新闻6月13日电(方伟彬刘军唐文娟)“人民主播联盟广东筹备委员会启动仪式”暨“人民...

2022-12-17 12:24:53

各快递企业新增用工陆续到位 快递加速恢复 全球滚动

央视网消息:近期,北京地区邮政快递业务量激增、从业人员减少,国家邮政局表示,目前最关键是要解决阶...

2022-12-16 20:23:52

下月14日郎朗来温献演音乐盛宴 视焦点讯

本文转自:温州都市报下月14日郎朗来温献演音乐盛宴除了表演经典曲目还将和100名琴童同台演奏温都讯2023...

2022-12-16 15:00:50

中信证券:抓住老龄化时代特征 挖掘内需新空间

证券时报e公司讯,中信证券研报认为,应对老龄化政策带来的消费潜力料将成为扩大内需的重要推动力量。《...

2022-12-16 08:30:16

商丘市民权县供电公司开展“安全日”专题活动 今日热讯

5月23日,商丘市民权县供电公司开展“安全日”专题活动,通过培训、座谈、剖析、考试等方式全面落实520...

2022-12-15 19:30:12

河南郏县:举办首届班主任基本功展示活动

为落实立德树人根本任务,展示班主任队伍的综合素质、专业水平和育人能力,2022年11月19日晚,郏县一高...

2022-12-15 14:18:23

违约金退定金需要多少钱

订金”的效力取决于双方当事人的约定。双方当事人如果没有约定,“订金”的性质主要是预付款,卖方违约...

2022-12-15 08:22:01

当前简讯:宁波远洋: 宁波远洋运输股份有限公司独立董事关于第一届董事会第十次会议相关事项的独立意见

宁波远洋:宁波远洋运输股份有限公司独立董事关于第一届董事会第十次会议相关事项的独立意见

2022-12-14 17:52:40

省人大常委会调研组莅济调研

热推荐:股份改制是什么

全球要闻:如何查询2022年中级经济师成绩?一篇全!

世界热门:微软大动作!入股伦敦证券交易所,拿下重要云订单!

致远互联: 北京致远互联软件股份有限公司关于第三届监事会第一次会议决议公告_天天热闻

热推荐:建设机械:建设机械、建设银行、建设集团分属不同系统,公司主营业务为工程机械制造及租赁

海信视像(600060)12月9日主力资金净买入1336.36万元 天天速讯

圣诺生物(688117):董事会、监事会换届选举

单日换手近77%!“2倍牛”上演天地板,各路游资齐聚混战,股民:真是刀尖舔血

北京市产业高质量发展指数从2005年至2020年增长2.1倍

好消息!西部地区唯一一只重庆渝遂高速REITs成功上市

1762万份!重庆市推进电子健康档案向居民个人开放

15分钟完成充电!重庆将新建500余个超级充电桩

京东发布一季度财报 快递小哥平均月薪过万引发热议

北京朝阳区发现1例新冠核酸检测初筛阳性

外籍志愿者“老罗”:战“疫”让我感受到“长征精神”

广东新增本土确诊病例5例 新增本土无症状感染者1例

31省份新增本土确诊病例2119例 新增本土无症状感染者16383例

广东专家团队:限时饮食干预与常规能量限制同样有效

“反诈警官老陈”:面对网络争议,我驾驭不住流量了

上海六人因伪造、买卖通行证被采取刑事强制措施

医保基金是“救命钱”,需人人捍卫

上海这个大型社区探索防控新路:划一块 清一块 解封一块

为何要高频度核酸检测?上海相关部门回应

黑龙江新增本土确诊34例、本土无症状感染者56例

x 广告
x 广告

Copyright @  2015-2022 海峡家电网版权所有  备案号: 皖ICP备2022009963号-10   联系邮箱:396 029 142 @qq.com