使用PyTorch 2.0 加速Hugging Face和TIMM库的模型 每日速递
2022-12-25 18:07:00 来源:

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

设为星标,干货直达!

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/

“旺季”来临!煤炭板块走高 云煤能源、陕西黑猫涨停

2023-09-09

北极冰川中出现巨大冰窟窿 面积大小相当于韩国面积的70%

2023-09-09

皇马球员罗德里戈,巴尔韦德和楚阿梅尼在国际比赛日...

2023-09-09

他是村民健康“守门人”

2023-09-09

中信博:融资净买入9327元,融资余额1.24亿元(09-08)

2023-09-09

若昂保罗二世机场(关于若昂保罗二世机场简述)

2023-09-09

常州举办“专精特新”企业股改上市培训活动 积极支持北交所“扩容”

2023-09-08

借款人可否提前偿还住房公积金贷款

2023-09-08

深圳特大暴雨 :营救疏散逾600位被困人员 转移民众超1600人

2023-09-08

花样年位于成都的4宗地块将被拍卖,总起拍价约5.57亿元

2023-09-08

“中国数坝”张家口大数据产业对接会举行 8个项目签约总投资80.15亿元

2023-09-08

中油工程:签订30.33亿元施工总承包合同

2023-09-08

粉蒸羊肉的做法最正宗的做法视频教程(粉蒸羊肉的做法最正宗的做法)

2023-09-08

梅西赛后与厄瓜多尔门将交换球衣,两人儿时是邻居曾经常交手

2023-09-08

限时抢购Redmi 红米 Note11T Pro 5G 1699元

2023-09-08

广西省造老银元价格(2023年09月08日)

2023-09-08

打破信息壁垒,皮小度让专业美肤方案触手可及

2023-09-08

旷达科技(002516):MACD指标DIF线上穿0轴-技术指标上后市看多(09-08)

2023-09-08

存款利率一降再降,大行存款规模却大幅增加!钱从哪里来的?

2023-09-08

人民银行开展1010亿元逆回购操作 公开市场实现净回笼1200亿元

2023-09-01

如何做好出厂后组件的隐裂控制?

2023-09-01

圆通速递(600233)8月31日主力资金净买入731.34万元

2023-09-01

文明海南 | 七旬老人为孤残侄女筑起幸福港湾

2023-09-01

药品包装机(关于药品包装机简述)

2023-09-01

突发!一栋五层建筑失火,已致73人遇难

2023-08-31

武铁暑运火爆收官:发送旅客3808万人次,装运货物1662万吨,双双创新高

2023-08-31

税务专管员回应宋祖儿被举报上热搜,税务系统内部人士:分局专员无举报受理权限,不知情很正常

2023-08-31

ST小桥2023年上半年净利-98.14万 由盈转亏

2023-08-31

中毛自贸区联委会首次会议在路易港举行

2023-08-31

A0级小型车,几何E萤火虫、海鸥、缤果怎么选?

2023-08-31

芯途异构宣布完成千万级天使轮融资

2023-08-31

“五经普”动态丨湖南:全面构建第五次经济普查工作宣传格局

2023-08-31

造梦西游3号和密码大全真的(造梦西游3号和密码90级)

2023-08-31

格力电器:上半年实现营业收入992.37亿元

2023-08-31

长株潭获批综合型流通支点城市

2023-08-31

假面骑士Gotchard:三骑雷杰多未有追加情报放出,难道小明哥回归只是一个噱头

2023-08-31

儿童棒棒糖,来自日本核辐射地区!已立案调查

2023-08-31

南方航空上半年营收同比增长约76%,厦门航空扭亏为盈

2023-08-31

今日公告透露利好:6只个股有潜力

2023-08-31

深市分红三大新趋势彰显公司回报意识攀升 主板去年现金分红超过股权融资金额

2023-08-30

股票行情快报:方大炭素(600516)8月30日主力资金净卖出1042.68万元

2023-08-30

关羽的“智多星”,计谋不输诸葛亮,关羽若听他的话,荆州不会丢

2023-08-30

同方知网与华为云签约,共建华知大模型

2023-08-30

这国局势突变!中国使馆紧急提醒中国公民不外出

2023-08-30

习近平对四川凉山州金阳县山洪灾害作出重要指示

2023-08-30

上座率达九成,中杂《双奥密境》成为暑期旅游演出热门项目

2023-08-30

江苏金租增资获批 注册资本将增至约42.45亿元

2023-08-30

德必集团:8月29日融资买入840.21万元,融资融券余额4064.32万元

2023-08-30

债主变股东!碧桂园拟发行3.51亿股新股,建滔集团旗下企业认购

2023-08-30

太行山水 漳河画廊

2023-08-30

品牌建设引领产业振兴——哈尔滨县域经济发展一线观察

2023-08-30

第九套广播体操 mp3音乐(第九套广播体操 mp3)

2023-08-30

男篮世界杯:16强已出10席 亚洲5队已出局

2023-08-30

留一半清醒,留一半醉

2023-08-29

公职人员被举报酒后辱骂殴打村民 单位回应:公安和纪委正在调查

2023-08-29

江苏雷利:接受海南恒立私募等机构调研

2023-08-29

全新配色不简单!Nike Vaporfly 3 又有新配色!

2023-08-29

2023蜀里安逸四川消费券领取步骤(图解)

2023-08-29

8月29日国内萤石产业链部分价格上涨

2023-08-29

区位码和国标码之间的转换(区位码与国标码的转换)

2023-08-29

春秋战国时期变法(春秋战国时期)

2023-08-29

迈信林:8月28日融资买入362.18万元,融资融券余额3594.67万元

2023-08-29

中铁工业上半年实现净利润10亿元 同比增长8.04%

2023-08-29

美国人普遍认为拜登年龄太大,不宜连任美国总统

2023-08-29

康普顿上半年净利3711万 同比增21%;小鹏58亿收购滴滴汽车业务丨AC早报

2023-08-29

每体:费尔明将与巴萨续约至2028年,解约金4亿欧

2023-08-29

仁和药业董事长杨潇合计增持183万股公司股份 耗资1204.14万元

2023-08-28

云天化:上半年实现净利润26.78亿元

2023-08-28

[c/洛/猫/红/卡]照进末地的光.4

2023-08-28

真我GT5销量公布:打破今年所有手机新品尝鲜购销量纪录

2023-08-28

dnf自动刷图脚本哪个比较好_dnf自动刷图脚本

2023-08-28

东方米兰国际城户型图(东方米兰国际城)

2023-08-28

satellite tool kit下载

2023-08-28

永胜医疗(01612)将于9月29日派中期股息每股0.0125港元

2023-08-28

高居中乙榜首,重庆铜梁龙主帅:足协杯踢申花,我们抱着学习态度

2023-08-28

龙佰集团8月28日开盘涨幅达5%

2023-08-28

安徽决定:在全省范围内排查

2023-08-28

周一机构一致最看好的10金股

2023-08-28

受洗的意义和目的讲章(受洗)

2023-08-28

蔚来能源与雅诗阁签订绿色能源合作协议

2023-08-27

同屏器干啥用的_同屏器是什么

2023-08-27

不够的组词(不够组词)

2023-08-27

水蒸荷包蛋怎么蒸最好吃

2023-08-27

国家统计局:1-7月全国规上工业企业利润下降15.5%

2023-08-27

送孩子上学的经典语句

2023-08-27

关于悟道

2023-08-27

【小里帮忙】煜城阳光花邸小区30号楼频繁停水,物业:一加压就爆管

2023-08-27

安徽幼师高等专科学校排名 安徽幼师学校有哪些

2023-08-27

惨败塞尔维亚!事实证明,赵继伟、王哲林、李凯尔打不了国际大赛

2023-08-26

什么情况构成敲诈勒索行为

2023-08-26

桂林记录者:苗医廖德银,传承千年苗医 弘扬仁心医术

2023-08-26

成都车展直击:电动车狂奔,燃油车末路?

2023-08-26

四川省威远县发布大风蓝色预警

2023-08-26

违规开展学科类校外培训,武汉这些机构(个人)被查处!

2023-08-26

恐怖游戏《逃生:试炼》推迟至明年登陆 PS5、Xbox 主机平台

2023-08-26

副院长微信号被盗 晒“副处长礼物”博主发文:被盗号 基本情况讲解

2023-08-26

西安——亿科江山悦丨楼盘测评

2023-08-26

竞业达(003005):8月25日北向资金增持35.58万股

2023-08-26

肚包鸡的做法大全窍门(肚包鸡的做法)

2023-08-25

中国再次逮捕了一名美国间谍。法媒报道称,在华的11万名间谍

2023-08-25