首页 >热点 > > 正文

使用PyTorch 2.0 加速Hugging Face和TIMM库的模型

2022-12-26 14:04:18

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

设为星标,干货直达!

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/

上一篇: 下一篇:
x
推荐阅读

使用PyTorch 2.0 加速Hugging Face和TIMM库的模型

2022-12-26

环球快资讯丨“捡钱”时刻!就在本周!1天躺赚4天利息 国债逆回购最佳时点来了!来看操作攻略

2022-12-26

家医服务全天候 解山里人“疫”时之忧

2022-12-25

世界新消息丨多地密集出台预制菜利好政策!龙头一度八天七板,产业链受益上市公司梳理

2022-12-24

12月23日基金净值:嘉实浦盈一年持有期混合A最新净值0.9701,涨0.09%

2022-12-24

中国保险行业协会首次发布种植业、养殖业、森林保险承保理赔服务规范

2022-12-23

数据“二十条”出炉,将给支付行业带来怎样的机遇?

2022-12-23

中企造自动驾驶大巴驶上法国街头 全球热门

2022-12-23

全球快报:新华视点|多地发放新一轮消费券,重点扶持受疫情影响严重行业

2022-12-22

环球即时看!ThinkPad X1系列更新 联想密集发布2023年新品

2022-12-22

波卡周报|31 项公投在 OpenGov 系统上提出,Bifrost 与 Astar & Shiden 开通 HRMP 通道!

2022-12-21

苹果关闭iOS 16.1.2 验证通道,iPhone升级 iOS 16.2 后无法降级

2022-12-21

当前速讯:五粮液、泸州老窖等25股获北向资金增持额超亿元

2022-12-21

转型计划遭华尔街质疑 瑞信(CS.US)股价徘徊在历史低点

2022-12-20

当前观点:中邮消费金融贷款逾期二天延迟还款影响征信吗

2022-12-20

全球新动态:秦港股份:12月19日获融资买入166.32万元

2022-12-20

全球看热讯:上海沪工: 简式权益变动报告书

2022-12-19

电影概念股集体走低,截至发稿,IMAX中国(01970.HK)跌9.89%,报8.11港元

2022-12-19

世界要闻:白鹤滩水电站全部机组即将投产发电

2022-12-19

中央经济工作会议:最大限度释放全社会的创新创造潜能 全球播资讯

2022-12-18

拖鞋能用洗衣机洗吗 拖鞋可以用洗衣机洗吗 环球快消息

2022-12-18

天天观热点:签了劳动合同后不续签可以要求赔偿多少

2022-12-17

福建省首单“绿电贷”在漳州落地_全球时快讯

2022-12-16

今日热议:12月16日午后快讯

2022-12-16

大秦铁路(601006)12月15日主力资金净卖出1486.78万元

2022-12-16

世界即时看!市委召开务虚会议谋划明年发展

2022-12-15

【速看料】元隆雅图:公司与阿根廷国家队IP方聚星动力建立了长期合作关系,目前的合作协议有效期持续至2023年9月

2022-12-15

全球速讯:杭州楼市新政频出 市场成交量企稳

2022-12-15

世界今亮点!离婚一年!何猷启大方与小9岁新欢出街,全程身体紧贴显甜蜜

2022-12-14

今头条!高新发展(000628.SZ):可转债发行申请获证监会受理

2022-12-14

网贷逾期八年还不起怎么办?

2022-12-13

今日热闻!东方雨虹、兴发集团就进一步加强务实合作深入交流

2022-12-13

【机构调研记录】中庚基金调研中国黄金、天娱数科等3只个股(附名单)

2022-12-13

宝胜国际(03813.HK):11月综合经营收益净额14.3亿元 同比下跌30.3%-最资讯

2022-12-12

东星医疗:目前已被评为国家级“专精特新小巨人企业”_快消息

2022-12-12

天天消息!天邑股份: 第四届监事会第九次会议决议公告

2022-12-09

光山:扶贫车间开到家门口 讯息

2022-12-08

科大国创:开发了农业农村大数据平台、精准种植管理、智慧农机管理、人居环境整治等多个产品,助力农业农村领域数字化转型和升级

2022-12-07

万向钱潮董秘回复:投资万向一二三有助于积极推进公司投资清洁能源汽车科技公司的战略

2022-12-06

“共享充电宝”涨至4元每小时?西安这些品牌收费规则竟不同

2022-08-25

诊所隐匿收入超47亿引热议 医美行业究竟有多赚钱?

2022-08-17

大牛股科信技术披露公告 拟筹划发行A股股票用于项目建设

2022-08-17

唐山加快验收时间 为建筑工地开复工保驾护航

2022-03-19

消费者“身材焦虑” 减肥市场疯狂吸金

2022-03-19

2月份秦皇岛新建商品住宅销售价格环比下降0.2% 同比下降4%

2022-03-19

深圳技术进出口全年合同数量共1347项 同比增长2.51%

2022-03-19

邢台柏乡:打造羊肚菌产业示范带 引领村级集体经济发展

2022-03-19

胡金秋32分17板 浙江广厦男篮“双杀”稠州金租

2022-03-19

新疆北部有降雪 湖北、湖南等地出现大雾

2021-12-13

黑龙江新增本土核酸检测初筛阳性人员5例 均在讷河市

2021-12-13

“恋爱盲盒”抽的不是爱情,是急功近利的心

2021-12-13

北京12月12日新增2例境外输入确诊病例

2021-12-13

满洲里本轮疫情社会面“清零”,迎来拐点!

2021-12-13

北京今日晴冷在线气温低 本周中后期或再遭冷空气侵袭

2021-12-13

近六成受访大学生表示自己不能脱离表情包

2021-12-13

停车费上涨,昆明部分医院停车难缓解了吗?

2021-12-13

救人快递小哥:我不想成为网红 将继续踏实工作

2021-12-13

野猪拟从“三有”野生动物名录中除名

2021-12-13

“三有”名录删除野猪,要把握好捕杀与保护的度

2021-12-13

齐齐哈尔讷河发现5例核酸检测初筛阳性人员

2021-12-13

野猪退出“三有”名录不是一道“滥捕滥杀令”

2021-12-13

网红蹭“遗孤”流量是变相吃“血馒头”

2021-12-13

演员涂们病逝 曾被称为“草原王爷专业户”

2021-12-13

被偷走的那些年:被拐14年后他们成夹在中间的孩子

2021-12-13

文峰道歉:官微官网整改,10个工作日内对接预付卡备案

2021-12-13

山东烟台海域货船沉没已致9人遇难 搜救仍在进行

2021-12-13

浙江绍兴累计报告确诊病例107例 无症状感染者1例

2021-12-13

第三届国际白鹤论坛举办 中外专家聚焦生物多样性保护

2021-12-13

浙江绍兴本轮疫情已累计报告107例确诊病例

2021-12-13

“零容忍” 浙江宁波公安机关将严厉打击涉疫违法犯罪行为

2021-12-13

宁波镇海疫情未发生外溢 44例感染者均在蛟川街道管控区内

2021-12-13

来华留学生游梵净山 感知贵州多彩文化

2021-12-13

货船触礁进水 福建海警成功营救6名船员

2021-12-13

战“疫”时刻:浙江疫情下的“特殊”二三事

2021-12-13

浙江宁波44人已确诊 年龄最小为2岁 最大为70岁

2021-12-13

浙江宁波此轮疫情病毒为德尔塔变异株(AY.4 进化分支)华沙株

2021-12-13

南粤古驿道徒步体验活动(西京古道站)韶关举行

2021-12-13

上海试点驾驶证“学法减分” 一年最多减6分

2021-12-13

河南周口发布公告 明确过节确需返乡应提前3天报备

2021-12-13

浙江越城区新增1例确诊病例 系上虞区病例的密接者

2021-12-13

浙江已报告阳性感染者139例 明确严控跨省出行

2021-12-13

第二届鄱阳湖国际观鸟周在“中国候鸟小镇”江西吴城开幕

2021-12-13

“酥油茶‘遇见’咖啡,好比空气中飘着香水味”

2021-12-13

西安新增1例本土确诊病例 活动轨迹公布

2021-12-13

浙江三地病例感染病毒均属于德尔塔变异株

2021-12-13

山东烟台海域一载有14人货船沉没 9人已无生命体征

2021-12-13

浙江严控跨省出行 中高风险地区人员严格限制出行

2021-12-13

陕西西安一诊所工作人员确诊 8份核酸检测环境样本结果呈阳性

2021-12-13

浙江绍兴越城区在集中隔离点发现1名核酸检测阳性感染者

2021-12-13

截至12日15时 西安已追踪管控密切接触者486人

2021-12-13

陕西西安一诊所工作人员被诊断为确诊病例 活动轨迹公布

2021-12-13

抗疫特写:交通封控后的上虞“24小时”

2021-12-13

居家观察期间擅自离开封控区域 浙江上虞警方处罚3人

2021-12-13

杭州发布致市民公开信:非必要不流动 少聚集

2021-12-13

满洲里新冠肺炎救治感控督导组:“战事”越严峻 越要教会大家如何躲“子弹”

2021-12-13

浙江宁波、绍兴和杭州三地累计新冠肺炎确诊病例138例

2021-12-13

宁波镇海疫情下的“产科故事”:三天迎来28个宝宝

2021-12-13

内蒙古满洲里核酸检测累计检出阳性样本532份

2021-12-13

内蒙古满洲里新增确诊病例3例

2021-12-13

银川一企业为社区防疫人员捐赠“黑心棉”大衣被查处

2021-12-13