使用PyTorch 2.0 加速Hugging Face和TIMM库的模型 - 行业动态 -

当前位置:首页  >  行业动态  > 正文

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

使用PyTorch 2.0 加速Hugging Face和TIMM库的模型
2022-12-25 06:20:56

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

设为星标,干货直达!


【资料图】

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/

标签:

(责任编辑:news01)
哈尔滨11日新增治愈出院本土确诊病例15例

哈尔滨11日新增治愈出院本土确诊病例15例

  中新网哈尔滨10月12日电 (记者 刘锡菊)12日,哈尔滨市卫健委发布哈尔滨市10月11日0-24时疫情通报...
10-12 14:06:18
涉案金额756亿元!甘肃特大地下钱庄案终告破

涉案金额756亿元!甘肃特大地下钱庄案终告破

  外汇管理部门与公安机关日前在甘肃联合破获一起特大地下钱庄案件,涉案金额高达756亿元,沉重打击了...
10-12 14:06:17
强降雨致山西因灾死亡15人 直接经济损失50.29亿元

强降雨致山西因灾死亡15人 直接经济损失50.29亿元

  今天(10月12日)上午10时,山西省召开防汛救灾新闻发布会,通报相关情况。  记者今天从山西省人民...
10-12 14:06:17
强降雨致山西因灾死亡15人 直接经济损失50.29亿元

强降雨致山西因灾死亡15人 直接经济损失50.29亿元

  中新网10月12日电 10月12日,山西省召开防汛救灾新闻发布会,通报相关情况。据介绍,截至目前,此...
10-12 14:06:17
特写:养老院的78位老人:雨过天晴,我们回家

特写:养老院的78位老人:雨过天晴,我们回家

  中新网晋中10月12日电 题:养老院的78位老人:雨过天晴,我们回家  中新网记者 杨杰英  “洪...
10-12 14:06:17
新型诈骗套路难防“领导”喊你转账,转吗?

新型诈骗套路难防“领导”喊你转账,转吗?

  “领导”加你微信,关心你的工作和生活,还约你到他办公室安排工作?先别激动,这可能是一场网络骗...
10-12 14:06:17
10月以来山西发生地质灾害33起 地质灾害防治工作形势非常严峻

10月以来山西发生地质灾害33起 地质灾害防治工作形势非常严峻

  10月以来山西发生地质灾害33起 地质灾害防治工作形势非常严峻  记者今天(10月12日)从山西省人民...
10-12 14:06:17
付款不被骗、上网不留痕……这些“黑科技”现身2021年国家网络安全宣传周

付款不被骗、上网不留痕……这些“黑科技”现身2021年国家网络安全宣传周

  在反诈盲盒中体验如何保住自己的“钱袋子”,在现场观摩如何安全上网不留痕迹,大型油气企业如何远...
10-12 14:06:16
受台风“圆规”影响 福建多处景点关闭

受台风“圆规”影响 福建多处景点关闭

  受今年第18号台风“圆规”及冷空气共同影响,福建省附近海上风力逐渐加大,为确保安全,自2021年10...
10-12 14:06:16
浙江女子10天前看人杀鸭感染鹦鹉热:39℃高烧 乏力干咳

浙江女子10天前看人杀鸭感染鹦鹉热:39℃高烧 乏力干咳

  浙江女子突发39℃高烧,路都走不了!近期出现一人感染后身亡,医生紧急提醒……  “乏力,发热,...
10-12 14:06:16
95后姑娘坚持画云千余天 网友:温柔笔触里有浪漫诗意

95后姑娘坚持画云千余天 网友:温柔笔触里有浪漫诗意

  95后湖北姑娘坚持画云千余天   千万网友称赞:她温柔的笔触里有种浪漫的诗意  你喜欢看云吗?...
10-12 14:06:16
保险公司频遭“内鬼”撬单骗津贴 背后犯罪团伙落网

保险公司频遭“内鬼”撬单骗津贴 背后犯罪团伙落网

保险公司频遭“内鬼”撬单骗津贴,办案人员经深入调查牵出背后的犯罪团伙——  揭秘“保险黑产团伙”...
10-12 14:06:16
黑龙江省高风险地区清零

黑龙江省高风险地区清零

  中新网哈尔滨10月12日电 (程岩 记者 史轶夫)黑龙江省卫健委12日发布消息,11日0-24时,黑龙江省...
10-12 14:06:16
绑架案牵出医疗腐败窝案 彰显有线索一查到底反腐决心

绑架案牵出医疗腐败窝案 彰显有线索一查到底反腐决心

  绑架案牵出医疗腐败窝案的沉重警示  近日,广西来宾市纪委监委印发《来宾市以案促改警示教育读本...
10-12 14:06:15
河北平山一通勤班车发生涉水倾覆事故 公安部工作组赴现场指导工作

河北平山一通勤班车发生涉水倾覆事故 公安部工作组赴现场指导工作

  法治日报全媒体记者 董凡超  10月11日7时许,河北省石家庄市平山县钢城路滹沱河大桥施工辅路发生...
10-12 14:06:15
今天北京延续秋高气爽 明天夜间或有小雨上线

今天北京延续秋高气爽 明天夜间或有小雨上线

  中国天气网讯 今天(10月12日),北京将延续秋高气爽的天气,但白天最高气温仍在19℃,夜间最低气温8...
10-12 14:06:15
台风“圆规”将影响东南沿海 北方局地有一次弱降水过程

台风“圆规”将影响东南沿海 北方局地有一次弱降水过程

  中新网10月12日电 据中央气象台网站消息,昨日08时至今日06时,浙江东北部、广东雷州半岛、海南岛...
10-12 14:06:15
受台风“圆规”影响 琼州海峡再次停航

受台风“圆规”影响 琼州海峡再次停航

  南方日报讯 (记者 黄叙浩 实习生 徐贝贝 通讯员 粤应宣)记者从省应急管理厅获悉,受台风“圆...
10-12 14:06:15
徐州一楼盘降价促销被叫停?官方:房开虚假宣传,已责令整改

徐州一楼盘降价促销被叫停?官方:房开虚假宣传,已责令整改

  澎湃新闻记者 邱海鸿  “工抵房”、降价近千元销售……近日,江苏徐州贾汪区一家楼盘因降价促销...
10-12 14:06:15
“云健身”成年轻人生活常态 互相“攀比”更起劲儿

“云健身”成年轻人生活常态 互相“攀比”更起劲儿

  “云健身”成年轻人生活常态 互相“攀比”更起劲儿  “开通会员参加运动在线培训,连续包月每月1...
10-12 14:06:14
“烫手山芋”?二手大件家具如何才能“有家可归”

“烫手山芋”?二手大件家具如何才能“有家可归”

  青年经济说“烫手山芋”?二手大件家具如何才能“有家可归”  大件家具回收成为社会经济进步中“...
10-12 14:06:14
云南到底有多美?谁没去过谁后悔……

云南到底有多美?谁没去过谁后悔……

  作者:王旌亚  地处中国西南部的云南省  素有  “动物王国”“植物王国”  和“物种基因库...
10-12 14:06:14
工人日报:让医保蛀虫无处遁形,确保医保基金安全

工人日报:让医保蛀虫无处遁形,确保医保基金安全

  本报评论员 韩韫超  骗保会伤及很多患者的权利。骗保横行,必然导致医保基金这个池子中的水量非...
10-12 14:06:14
用户感觉被“窃听” 个人信息安全如何保护

用户感觉被“窃听” 个人信息安全如何保护

  用户感觉被“窃听” 个人信息安全如何保护  很多人都有类似这样的经历:刚和朋友聊天提起某款商...
10-12 14:06:13
赢得年轻人喜爱的旅游商品更有市场

赢得年轻人喜爱的旅游商品更有市场

  赢得年轻人喜爱的旅游商品更有市场  一双会发热的运动鞋,同时具有定位和紧急求助功能;一套采用...
10-12 14:06:13
第十七届中国戏剧节开幕

第十七届中国戏剧节开幕

  第十七届中国戏剧节开幕  本报武汉10月11日电 (记者吴君)第十七届中国戏剧节日前在武汉开幕。本...
10-12 14:06:12
虎丘曲会 意味悠长

虎丘曲会 意味悠长

  虎丘曲会 意味悠长(文化市场新观察)  核心阅读  唱腔婉转,彩袖翻飞,日前在江苏苏州虎丘山风...
10-12 14:06:12
老街区成为新网红

老街区成为新网红

  老街区成为新网红(图说)  “这里有记忆中的乡愁。”临崖而建的步道、沿街点亮的路灯、巴渝特色的...
10-12 14:06:12
“中国时刻”开启 翻开全球生物多样性保护新篇章

“中国时刻”开启 翻开全球生物多样性保护新篇章

  “中国时刻”开启 翻开全球生物多样性保护新篇章  据了解,此次大会主题为“生态文明:共建地球...
10-12 14:06:12
除了登高插茱萸,重阳节还能干点啥

除了登高插茱萸,重阳节还能干点啥

  除了登高插茱萸,重阳节还能干点啥  “重阳”的名称,来自《易经》中的“以阳爻为九”。九月初九...
10-12 14:06:12

为您推荐

精彩推送