每日速读!使用PyTorch 2.0 加速Hugging Face和TIMM库的模型
2022-12-29 21:08:32 来源:

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


(相关资料图)

设为星标,干货直达!

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库的模型

2022-12-29

国家药监局已批准49个新冠病毒抗原检测试剂

2022-12-29

泉州:多渠道全方位打造工艺美术大师品牌

2022-12-29

别因为寂寞而错爱句子精选146句

2022-12-29

中航电子董秘回复:公司严格按照增值税政策改革要求,履行税款缴纳义务;整体上

2022-12-29

洛阳发布最新一批人事任免

2022-12-29

环球微资讯!江苏卫视2023跨年晚会邓紫棋会来吗?几点开始表演?

2022-12-28

银行理财产品排行榜一览

2022-12-28

前11月全国社会物流总额301.9万亿元,同比增3.4%

2022-12-28

报道:金鹰重工:连续3日融资净偿还累计298.96万元(12-27)

2022-12-28

中国长城: 关于拟变更会计师事务所的公告

2022-12-27

土巴兔重磅发布“背靠背创新计划” 重点扶持口碑装企整装突破

2022-12-27

微动态丨杭州第五批集中推出5宗涉宅用地,起始总价80.77亿元

2022-12-27

先惠技术(688155)12月26日主力资金净卖出147.51万元

2022-12-27

专家提醒:新冠疫情下警惕小儿急性喉炎及热性惊厥|观焦点

2022-12-26

想拿泰拳冠军,还想跨界MMA!“将军”哈格蒂:我喜欢挑战自己_世界资讯

2022-12-26

新华全媒+|各地因地制宜 保障农村地区群众就医用药需求 世界聚焦

2022-12-26

全球即时:韩国票房:《阿凡达2》观影人数破500万

2022-12-25

微粒贷借款逾期50年延迟还款影响征信吗

2022-12-24

满易贷网贷4千逾期暂时还不起会被对方起诉吗|今日讯

2022-12-24

香港特区政府公布创新科技发展蓝图

2022-12-23

世界快资讯:鸭肉最佳搭配炖汤 鸭肉和哪些东西炖汤是最佳搭配

2022-12-23

社论丨加大宏观政策调控力度 形成共促高质量发展的合力 环球最资讯

2022-12-23

全球热点!华贵人寿拟增资10亿元 茅台集团将成第一大股东 酒业龙头为何布局众多金融机构?

2022-12-22

【环球聚看点】让优质医疗资源“沉”到家门口

2022-12-22

这个波卡钱包可以让你玩转 NFT、XCM、Staking 和 Crowdloan|SubWallet 钱包体验报告

2022-12-21

建邦科技(837242)12月21日散户资金净卖出4.69万元

2022-12-21

精彩看点:国金证券:光储板块预期、估值双低创造布局良机

2022-12-21

国际SOS发布2023年度全球风险展望:企业机构将面对“持续性危机” 天天时讯

2022-12-20

鹏辉能源1亿元设锂电能源子公司 含集成电路制造业务 今日要闻

2022-12-20

【机构调研记录】弘毅远方基金调研埃斯顿-世界独家

2022-12-20

热议:直击北京酒店恢复承接会议首日:部分咨询量上涨 员工返岗筹备年底促销

2022-12-19

ST冠福董秘回复:目前公司的第一大股东荆州城发资本运营有限公司持有公司10.63%股权

2022-12-19

视焦点讯!贵广网络:公司目前不存在数字确权相关业务

2022-12-19

20句话速览中央经济工作会议:明年经济工作这么干

2022-12-18

干牦牛肉怎么做好吃 牦牛肉怎么做才好吃_世界速递

2022-12-18

如何使用 Vivado IP集成器打包自定义 IP

2022-12-17

【全球速看料】教育部公布名单!福建这些学校上榜!

2022-12-16

打造生物医药领域的细分冠军,“银星模式”获权威机构认可

2022-12-16

振华新材(688707)12月15日主力资金净卖出1467.69万元

2022-12-16

市工商局华龙分局开展打击传销宣传活动 每日播报

2022-12-15

世界观察:济南电力设备企业抱团“出海”淘金热(图)

2022-12-15

世界最资讯丨欧普照明(603515)12月14日主力资金净买入4.12万元

2022-12-15

康欣新材: 康欣新材第十届董事会第四十二次会议决议公告

2022-12-14

海南违章处理需要带的材料一般是哪些? 环球速读

2022-12-14

迪阿股份(301177)354.57万股限售股将于12月15日解禁上市,占总股本0.89%

2022-12-14

华厦眼科:有信心到2024年实现所有医院扭亏为盈 滚动

2022-12-13

【机构调研记录】鹏扬基金调研拓荆科技、中国黄金

2022-12-13

环球热讯:南京师范大学与海康威视达成校企战略合作

2022-12-12

科恒股份:珠海智能装备项目尚处于基建阶段

2022-12-12

环球时讯:兴业科技(002674):收购宏兴皮革少数股权 增厚公司利润水平

2022-12-09

息县召开优化法治化营商环境工作座谈会

2022-12-08

传音控股: 传音控股2022年第二次临时股东大会会议资料|每日信息

2022-12-07

【全球时快讯】花旗下调小牛电动(NIU.US)销售预期 仍维持“买入”评级

2022-12-06

百度网盘人工审核风波持续发酵 这件事不是辟谣就能完全解决的

2022-08-25

消费电子的尽头是不是都是“造车”? 消费电子面临成长的天花板

2022-08-17

印度黄金进口量上升至10年来的最高水平 销售几乎翻了一番

2022-03-21

卡地亚母公司历峰集团收入大涨35%至56.6亿欧元

2022-03-21

世界钻石巨头Alrosa 2021年全年收入同比上涨49%

2022-03-21

2021年戴比尔斯四季度毛坯钻产量同比上升15%

2022-03-21

2021年彩钻均价上涨1.7% 其中蓝钻表现最佳

2022-03-21

博茨瓦纳银行2021年毛坯钻销售额同比上涨63.5%

2022-03-21

2021年全年金银珠宝零售总额3041亿元同比上涨29.8%

2022-03-21

黄金消费饰品化、年轻化是本轮黄金首饰消费的支撑力所在

2022-03-21

西班牙轻奢珠宝品牌TOUS 2021财年营收同比上涨37%

2022-03-21

培育钻石上游不存在产能限制更适合细分功能赛道

2022-03-21

因钻石价格稳步上涨 钻石珠宝制造商面临史无前例的艰难时期

2022-03-20

我国珠宝行业产业链毛利率呈现“微笑曲线”

2022-03-20

黄金类产品毛利率与金价具有一定正相关性

2022-03-20

股价一跌再跌!迪阿股份股价创上市以来新低

2022-03-20

婚庆钻饰存量和时尚饰品市场双击下 培育钻石前景广阔

2022-03-20

成品钻价格大幅上涨 1克拉RAPI飙升6.9%

2022-03-20

门店密度测算:一线城市门店密度上限与城市GDP成正比

2022-03-20

澳大利亚阿盖尔矿关闭!世界第四大钻石矿寿命即将到期

2022-03-20

终端需求强劲 大克拉裸钻整体提价明显

2022-03-20

2022年钻石及其制品将持续涨价且有价有市

2022-03-20

钻石价格已上调0% 现在是购买钻石的最佳时机

2022-03-20

钻石价格突然飚涨 创下2011年以来最大单月涨幅纪录

2022-03-20

珠宝行业有望受益于黄金工艺改善带来的高景气度

2022-03-20

四季度印度零售商铂金饰品销售额同比上涨40%

2022-03-20

2021年彩钻均价上涨1.7%黄钻平均上涨0.9% 蓝钻表现最佳

2022-03-20

博茨瓦纳2021年毛坯钻销售额同比上涨63.5%

2022-03-20

颜值时代下 美妆珠宝饰品需求旺盛 行业高景气度持续

2022-03-20

2月份黄金珠宝GMV同比上涨49%港资品牌表现亮眼

2022-03-20

珠宝首饰板块指数报398.71点 涨幅达0.16%

2022-03-20

再贵的蜜蜡 你戴上照样是丑 把蜜蜡戴出时尚范的秘诀

2022-03-20

设计界的天才!德国纪念钻石品牌Ode将亮相中国展区

2022-03-20

女生戒指的戴法和意义是什么呢?

2022-03-20

男士戒指的佩戴法和意义是什么?

2022-03-20

商务部:今年以来我国消费市场呈现稳步恢复态势

2022-03-20

苏州疫情防控再升级:通过铁路离开苏州旅客须提供48小时内核酸检测阴性证明

2022-02-16

“江歌案”二审开庭 江秋莲因身体原因未出庭

2022-02-16

从收受500元开始 他走向深渊

2022-02-16

春季学期即将开学 海南要求校园常态化开展师生核酸检测

2022-02-16

辽宁葫芦岛:派出124名渔业执法人员进驻22座渔港 设立检测点

2022-02-16

葫芦岛昨日采集核酸样本105.5万人 新出现病例的封控小区每人每日单检

2022-02-16

辽宁葫芦岛:截至15日农村地区共居家隔离4029人

2022-02-16

辽宁葫芦岛2月15日新增15例确诊病例 均为绥中县报告

2022-02-16

内蒙古新增本土确诊病例7例

2022-02-16

辽宁葫芦岛新增15例本土确诊病例行程轨迹公布

2022-02-16