品牌 资讯 搭配 材料 时尚 热点 行业 首饰 玉石 行情

使用PyTorch 2.0 加速Hugging Face和TIMM库的模型|全球聚焦

2022-12-22 19:06:13 来源:

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

设为星标,干货直达!


(相关资料图)

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-22 19:06:13

ST三圣:截至2022年12月20日,邓涵尹持股比例为4.24%

​(原标题:ST三圣:截至2022年12月20日,邓涵尹持股比例为4 24%)同花顺(300033)金融研究中心12月22日讯,有投资者向ST三圣(002742)

2022-12-22 13:37:24

文灿股份(603348)12月21日主力资金净买入389.79万元

​截至2022年12月21日收盘,文灿股份(603348)报收于59 88元,下跌5 95%,换手率2 03%,成交量5 3万手,成交额3 21亿元。12月21日

2022-12-22 07:37:40

基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口-天天即时看

​1前言最近电脑坏了,开源项目的进度也受到一些影响这篇酝酿很久了,作为本系列第二部分(API接口开发)的第一篇,得想一个好的开头,想着想着

2022-12-21 17:28:05

石狮一企业上榜省工业龙头培育企业

​石狮一企业上榜省工业龙头培育企业

2022-12-21 11:31:59

11月中国品牌乘用车市场份额过半

​本报讯(实习记者 夏骅)昨日,中汽协发布2022年11月中国品牌乘用车

2022-12-21 04:38:14

环球看热讯:报告:中国19家钢铁企业达到或接近世界一流水平

​中国网是国务院新闻办公室领导,中国外文出版发行事业局管理的国家重点新闻网站。本网通过10个语种11个文版,24小时对外发布信息,是中国进行

2022-12-20 16:50:46

Dance in the moment:全球要闻

​今天和同事聊天,聊到了《明朝那些事儿》,聊到了朱元璋,他小时候被元朝官兵欺负,恨透了官僚,后来竟扭转乾坤,换了天地。做了皇帝,仍然勤

2022-12-20 10:47:02

未来是你的!姆巴佩决赛后首发声:我们会回来的

​北京时间12月19日讯,卡塔尔世界杯决赛法国点球大战不敌阿根廷无缘冠军。

2022-12-19 23:06:17

英军方承认向乌派兵参与秘密行动

​据《泰晤士报》13日报导,英国皇家海军陆战队中将罗伯特·马高恩在军方刊物中写道,英国皇家海军陆战队第45突击队成员,今年1月在协助将英...

2022-12-19 16:16:00

“一张网”兜起百姓大小事 世界热头条

​近日,梅州市五华县水寨镇西河社区因为一张手绘图“火”了。这是一幅长1 5米、宽1米,由数十张小图合成的西河社区手绘网格图,连日来吸引...

2022-12-19 10:34:02

国网太康县供电公司实现“零证预约”“一证受理”

​2021年以来,太康县供电公司全面深化“放管服”改革,持续优化电力营商环境,全面落实针用电报装的“三减四零”举措,做到“零证预约”、“...

2022-12-19 01:06:55

《上流战争3》恶女硕京又坏又会穿!校服藏巧思、衣服跟着黑化?:当前头条

​去年开播的狗血剧《上流战争》目前已播至第三季,剧情也渐渐变得「不科学」,动不动就赐死要角,然后再满血归来,让观众看到后来都直呼「不能

2022-12-18 12:20:18

深圳机场恢复8条国际客运航线

​近日,“深圳-特拉维夫”航线恢复运营,该航线是2020年以来中国内地第一条复航的以色列直达航线。截至目前,深圳机场共运行至洛杉矶、温哥...

2022-12-17 15:24:58

全球热点!雪莲子怎么泡发 雪莲子泡发的教程

​1、浸泡雪莲子时也可以用温水浸泡,可以利用50度摆布的温水直接浸泡雪莲子,并且每隔两小时换水一次如许过,五六个小时之后雪莲子就能泡发,但

2022-12-17 01:08:09

山河药辅主力资金持续净流入,3日共净流入1041.94万元

​山河药辅12月16日DDE大单资金(主力资金)净流入752 21万元,两市排名347 4898。近3日山河药辅主力资金持续流入,3日共净流入1041 94万元。【投

2022-12-16 16:02:21

爱奇艺(IQ.US)将启用新价格:12月16日正式执行,涨价后追平腾讯、优酷

​(原标题:爱奇艺(IQ US)将启用新价格:12月16日正式执行,涨价后追平腾讯、优酷)12月12日,从爱奇艺(IQ US)向用户发布的站内信获知,爱奇艺将于2

2022-12-16 09:53:19

腾盛博药-B(02137.HK)拟授出149.7万份购股权及39.65万份受限制股份单位

​格隆汇12月15日丨腾盛博药-B宣布,于2022年12月15日,公司根据首次公开发售后购股权计划条款向10名购股权受让人授出合共149 7万份购股权,惟须

2022-12-15 21:48:27

经营困难拖欠工资应该怎样追回?你了解吗?_快资讯

​根据原劳动部《对〈工资支付暂行规定〉有关问题的补充规定》(劳部发〔1995〕226号)第四条的规定,“无故拖欠”系指用人单位无正当理由超...

2022-12-15 15:30:43

信用社贷款倒单怎么办-速递

​天数不同,等额本息法,中国公民18-65岁;它是正当的、稳定的,包括冻结该信贷的使用者的银行存款,并根据抵押支付贷款。如果有必要,我们可以

2022-12-15 09:47:19

美亚柏科: 关于召开2022年第四次临时股东大会的通知 新视野

​美亚柏科:关于召开2022年第四次临时股东大会的通知

2022-12-14 20:43:50

世界快资讯丨偃师区检察院“检爱同行·法治进乡村”巡讲活动走进教师进修学校

​大河网讯为提高教师进修学校学生自觉守法和自我保护意识,9月23日,偃师区人民检察院“检爱同行·法治进乡村”巡讲活动在区教师进修学校举...

2022-12-14 15:07:08

山东全省医疗机构今日起不再查验核酸

​山东省各市领导小组(指挥部):为方便群众看病就医,经研究确定,自2022年12月14日零时起,对进入全省各级各类医疗机构的人员,不再查验核酸

2022-12-14 08:31:43

天天观热点:泰恩康(301263.SZ)副总经理张震收到广东证监局警示函

​智通财经APP讯,泰恩康发布公告,公司副总经理张震于近日收到广东证监局下发的《关于对张震采取出具警示函措施的决定》(行政监管措施决定书〔2

2022-12-13 17:35:11

异动快报:ST曙光(600303)12月13日9点25分触及跌停板

​12月13日盘中消息,9点25分ST曙光(600303)触及跌停板。目前价格6 47,下跌4 99%。其所属行业商用车目前上涨。该股为汽车零部件,新能源整车

2022-12-13 10:50:49

山外山: 山外山首次公开发行股票并在科创板上市网上路演公告|今日报

​重庆山外山血液净化技术股份有限公司         首次公开发行股票并在科创板上市                 网上路演公告  

2022-12-12 21:57:24

环球快看点丨工业互联网“百城千园行”伙伴计划正式启动

​在11月15日举行的2022(第二十一届)中国互联网大会开幕论坛上,工业互联网“百城千园行”伙伴计划正式启动,该计划旨在聚力汇智协同推进工...

2022-12-12 15:15:25

南岭民爆: 湖南南岭民用爆破器材股份有限公司关于发行股份购买资产并募集配套资金暨关联交易报告书修订说明公告|世界即时

​证券代码:002096        股票简称:南岭民爆        编号:2022-095      湖南南岭民用爆破器材股份有限公司 关于发

2022-12-11 17:24:57

益盛药业董秘回复:公司库存的原材料里主要为人参,未有红景天的储备

​益盛药业(002566)12月09日在投资者关系平台上答复了投资者关心的问题。投资者:请问公司这么多库存中药材会不会贬值,红景天的原材料储备多不

2022-12-09 09:53:44

焦点速看:以绿色金融助力高质量发展

​前不久,人民银行、银保监会等6部门印发《重庆市建设绿色金融改革创新试验区总体方案》(以下简称《方案》)。《方案》提出,用5年左右时间,在

2022-12-08 08:48:21