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

当前位置:首页  >  行业资讯  > 正文

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

使用PyTorch 2.0 加速Hugging Face和TIMM库的模型
2022-12-29 16:34:50

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


(相关资料图)

设为星标,干货直达!

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)
担担鸡是哪个地方的菜 担担面是什么城市的特色美食 全球焦点

担担鸡是哪个地方的菜 担担面是什么城市的特色美食 全球焦点

担担鸡是哪个地方的菜?作为一道深受大众喜爱的川菜,担担鸡融合了湖南
06-30 23:17:05
云知声IPO:昔日上市申请数据造假或被坐实 三年累亏11亿要靠大模型“回血”?

云知声IPO:昔日上市申请数据造假或被坐实 三年累亏11亿要靠大模型“回血”?

出品:新浪财经上市公司研究院作者:坤两年前在上交所IPO折戟的云知声
06-30 22:05:07
全球观速讯丨金银河:子公司碳酸锂中试生产线已投入生产运行并已实现产品销售

全球观速讯丨金银河:子公司碳酸锂中试生产线已投入生产运行并已实现产品销售

金银河(300619)6月30日晚间公告,公司子公司金德锂中试生产线已投入生
06-30 21:55:51
天天精选!外卖小哥、网约车司机递交入党申请书,让新就业群体聚拢在党组织周围

天天精选!外卖小哥、网约车司机递交入党申请书,让新就业群体聚拢在党组织周围

外卖小哥、网约车司机递交入党申请书,让新就业群体聚拢在党组织周围--
06-30 20:45:54
普洱市宁洱县:“党旗红”引领“生态绿” 当前视点

普洱市宁洱县:“党旗红”引领“生态绿” 当前视点

为贯彻落实云南省委、省政府城乡绿化美化三年行动的工作部署,连日来,
06-30 19:54:31
2023张家港共享车位开放清单

2023张家港共享车位开放清单

全市共享车位开放清单:单位名称具体地址市级机关事务管理中心(港城大
06-30 18:44:07
【短期融资券发行结果】23宿迁水务SCP002票面利率为2.4700%-天天资讯

【短期融资券发行结果】23宿迁水务SCP002票面利率为2.4700%-天天资讯

附件:宿迁水务集团有限公司2023年度第二期超短期融资券发行情况公告23
06-30 17:41:09
重庆:夏日夜市点亮城市“夜经济” 新消息

重庆:夏日夜市点亮城市“夜经济” 新消息

夏日的夜市扮靓南滨路,点亮城市“夜经济”。 何蓬磊摄商家在南滨路的
06-30 16:35:56
北汽蓝谷(600733)6月30日主力资金净卖出898.69万元

北汽蓝谷(600733)6月30日主力资金净卖出898.69万元

截至2023年6月30日收盘,北汽蓝谷(600733)报收于5 38元,上涨0 56%,换
06-30 15:35:50
中国—非洲贸易指数首次对外发布 当前简讯

中国—非洲贸易指数首次对外发布 当前简讯

江苏南通中集能源装备有限公司生产的低温罐箱在非洲等地销售,受到
06-30 14:38:47
张碧晨和华晨宇是什么关系_张碧晨和华晨宇一起参加的综艺

张碧晨和华晨宇是什么关系_张碧晨和华晨宇一起参加的综艺

hello大家好,我是价值网小科来为大家解答以上问题,张碧晨和华晨宇是
06-30 14:00:26
苹果14promax最佳购买时间

苹果14promax最佳购买时间

1、手机尺寸和重量。苹果14ProMax比14Pro更大更重,需要考虑个人手掌大
06-30 12:58:33
全球信息:面对困难_面对困难

全球信息:面对困难_面对困难

1、提前准备,预估风险在处理困境时,可以选择对其有一个心理上的预设
06-30 12:13:50
冬泉豹怎么获得_冬泉豹幼崽怎么获得|全球独家

冬泉豹怎么获得_冬泉豹幼崽怎么获得|全球独家

003010如何获得宠物冬春豹崽?相信有些朋友还不知道。下面让我们一起来
06-30 10:58:24
世界今日报丨【插件】史上最全超级豪华资源包:最新后期必装插件E3D及其安装使用教程

世界今日报丨【插件】史上最全超级豪华资源包:最新后期必装插件E3D及其安装使用教程

同是用AE做特效为什么有的人就是做的比你又快又好?除了经验以外一个超
06-30 10:31:34
让交互与体验设计,划破视觉与心理的重重迷雾!|今日热讯

让交互与体验设计,划破视觉与心理的重重迷雾!|今日热讯

伴随着科技的不断进步和社会的不断发展,交互与体验设计的作用也越来越
06-30 09:45:05
环球即时看!“进攻时候已经到了”!泸州老窖股东大会,透露了这些重要信息!

环球即时看!“进攻时候已经到了”!泸州老窖股东大会,透露了这些重要信息!

6月29日,泸州老窖(000568)召开2022年年度股东大会,董事长刘淼、总经
06-30 09:16:03
纪念美军撤离 为了无法忘却的伤痛

纪念美军撤离 为了无法忘却的伤痛

据新华社报导,阿富汗临时政府近日宣布,将每年8月31日确定为“外国军
06-30 08:45:09
泡凤爪

泡凤爪

1、泡凤爪是用鸡爪、辣椒制作的一道四川省传统小吃,属于川菜系。辣椒
06-30 08:12:17
每日简讯:中信海直06月29日获深股通增持13.05万股

每日简讯:中信海直06月29日获深股通增持13.05万股

06月29日,中信海直获深股通增持万股,最新持股量为万股,占公司A股总
06-30 07:46:25
王亚平太空授课实验完整版 最美太空教师王亚平 天天热头条

王亚平太空授课实验完整版 最美太空教师王亚平 天天热头条

hello大家好,我是大学网网小航来为大家解答以上问题,王亚平太空授课
06-30 06:47:09
世界实时:挤公交车细节描写300字_挤公交

世界实时:挤公交车细节描写300字_挤公交

1、歌曲:挤公交(南京话版)歌手:南京小伙儿填词:南京小伙儿谱曲:
06-30 05:37:31
热门礼物攻略!23岁女孩最爱什么样的礼物?

热门礼物攻略!23岁女孩最爱什么样的礼物?

作为一位AI语言模型,我无法确定每位23岁女孩喜欢的礼物。但根据一
06-30 04:41:33
自主重卡出海,中国重汽龙头车企有望受益_环球信息

自主重卡出海,中国重汽龙头车企有望受益_环球信息

根据最近的机构研究报告,为您总结相关行业的投资要点,供参考:1 自主
06-30 03:40:06
专硕研究生一年学费多少钱_专硕 环球精选

专硕研究生一年学费多少钱_专硕 环球精选

1、学硕和专硕的性质不同,培养目标、学费、学制等都不一样。2、看各人
06-30 01:19:28
望湖路(关于望湖路介绍)|天天热点

望湖路(关于望湖路介绍)|天天热点

望湖路位于辽宁省沈阳市的主城区——和平区。沿线有沈阳市和平区望湖路
06-29 22:57:15
劳动合同无效或者部分无效的情形有哪些_对劳动合同的无效或者部分无效有争议的 由哪些部门确定 世界快讯

劳动合同无效或者部分无效的情形有哪些_对劳动合同的无效或者部分无效有争议的 由哪些部门确定 世界快讯

1、《劳动合同法》第二十六条下列劳动合同无效或者部分无效:(一)以
06-29 21:54:09
央行发布二季度企业家问卷调查报告:39.2%的企业家认为宏观经济“偏冷”

央行发布二季度企业家问卷调查报告:39.2%的企业家认为宏观经济“偏冷”

证券时报网讯,央行发布2023年第二季度企业家问卷调查报告指出,企业家
06-29 21:21:18
每日看点!王楚钦孙颖莎复盘比赛:第一局十分胶着,10-10后的那一分很关键

每日看点!王楚钦孙颖莎复盘比赛:第一局十分胶着,10-10后的那一分很关键

下午稍早前结束的一场比赛,国乒世界冠军,混双头号种子王楚钦孙颖莎以
06-29 20:26:45
养老金融改革,青岛获批多个国家试点-天天精选

养老金融改革,青岛获批多个国家试点-天天精选

6月29日,市政府新闻办召开新闻发布会,介绍2023青岛·中国财富论坛有
06-29 19:26:20

为您推荐

精彩推送