当前位置:首页>热门 > >正文

使用PyTorch 2.0 加速Hugging Face和TIMM库的模型_全球观热点

  • 2022-12-23 19:21:07来源:

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

设为星标,干货直达!

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库的模型_全球观热点

点蓝色字关注“机器学习算法工程师”设为星标,干货直达!​PyTorch2 0引入了**torch compile()**来加速模型,这篇文章我们将介绍如何使用

毅昌科技:公司抗原零部件生产线正克服疫情影响,满负荷运行中,公司全力保证提升产能:每日信息

同花顺(300033)金融研究中心12月23日讯,有投资者向毅昌科技(002420)提问,请问贵公司抗原生产线是否满负荷运行,产能同期增长多少,近期是

翔楼新材(301160)12月22日主力资金净卖出516.08万元 全球快报

截至2022年12月22日收盘,翔楼新材(301160)报收于40 0元,上涨2 04%,换手率17 2%,成交量3 21万手,成交额1 29亿元。12月22日

懒猫年度盘点:最稳老将与最佳新人:焦点关注

懒猫年度盘点:最稳老将与最佳新人

崔顺实狱中写长信求特赦:为朴槿惠奉献自己一生 得到的太残忍

海外网12月22日电据韩国《中央日报》12月21日报道,近日,崔顺实在狱中给韩国总统府写了一封长达4页的请愿信,自称疾病恶化,命不久矣,呼吁获

【机构调研记录】海富通基金吕越超调研祥鑫科技

根据市场公开信息及12月21日披露的机构调研信息,海富通基金近期对2家上市公司进行了调研,其中知名基金经理吕越超调研了祥鑫科技,相关名单如

5 年的前端成长计划 - 仅剩 300 名额 - 打破职业发展壁垒

早早聊5年天使票预售倒计时,还剩300名额~这次我们拿出了最大的诚意,对大会服务做了全面升级。天使年票=5年大会(2020~2024)+

基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口

1前言最近电脑坏了,开源项目的进度也受到一些影响这篇酝酿很久了,作为本系列第二部分(API接口开发)的第一篇,得想一个好的开头,想着想着

泉州:多措并举助力健身休闲产业发展

泉州:多措并举助力健身休闲产业发展

亚太药业:公司目前没有新冠特效药 每日关注

亚太药业(002370)12月20日在投资者关系平台上答复了投资者关心的问题。投资者:董秘您好,请问贵公司在此次医保中标三款药物,后续何时开始销

中原银行获评人民日报社 “2022中国品牌创新案例”

龚金星品牌是高质量发展的重要象征,是企业乃至国家竞争力的综合体现。近日,由人民日报社主办,以“推动中国品牌建设高质量发展”为主题的...

世界快资讯:公元股份: 第五届董事会第二十六次会议决议公告

公元股份:第五届董事会第二十六次会议决议公告

我国又一项物联网安全关键技术成为国际标准

本报讯日前,我国自主研发的物联网安全协议关键技术(TRAIS)被国际标准化组织 国际电工委员会(ISO IEC)发布成为国际标准。这是我国在物联网

京东白条逾期26年会不会上征信

网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可

今日播报!抖音电商发布世界杯相关消费数据:梅西相关商品销量是姆巴佩的45倍

12月18日,抖音电商官微发布世界杯相关消费数据。数据显示,11月21日至12月15日,世界杯核心品类球迷用品较赛前销量增长超400%,抖音电商里的

遗嘱和遗赠冲突了如何办

1、后设立的遗嘱优先于先设立的遗嘱。所以后设立的遗赠优先于先设立的遗嘱。但是具体到此案,则情况未必如此,请看后面。2、这种冲突情形其实

30岁以下创业先锋 北上广深占据三分之二|资讯推荐

读创/深圳商报驻穗记者张莹15日上午,胡润研究院携手广州市番禺区,联合发布《2022胡润U30中国创业先锋》,旨在寻找中国30岁以下(包含30岁)

冬天头发起静电严重如何解决 什么梳子防静电效果好 环球要闻

冬天头发起静电是很多人苦恼的一个问题,因为冬天气候会变得干燥,容易导致静电击,想要去除静电,需要增加保湿,解决头发干燥问题。

农家乐如何贷款,农村建农家乐贷款

我想创办一个农家乐来描述如何加强合作人员的培养,做一个有实力的企业家。土地使用权是合同,包括。还需要提供配偶的农家乐身份证和户口本,

经验分享 印度人主要信仰什么宗教

印度教。全印有约83%的人口信仰印度教。印度教可以追溯到公元前16世纪雅利安人创立的婆罗门教,公元8世纪左右,商羯罗吸收了一些佛教和耆那

经验知识 小龙女原名叫啥

小龙女的原名无从查知,因为在神雕侠侣中,金庸没有交代小龙女的名字,只说是姓龙,没有说是叫什么;原著中有:丘处机道:这姓龙的女子名字

知识分享 马步桩与混元桩区别在那

1、马步是练习武术最基本的桩步。马步桩双脚分开略宽于肩,采半蹲姿态,姿势有如骑马,而且如桩柱般稳固,因而得名。马步是练武前的基本功

讲解百科 哪本小说主角是莫南爵

1、《误惹豪门》,作者:衣其。2、《强取迷糊小甜心》,作者:横塘水。3、《少将大人的宠妻》,作者: 九重殿。4、《误惹首席坏总裁》,作

科普知识 自动获得ip地址是什么意思

自动获得ip地址意思:1、IP地址是每个连接的名字,每个连接都有不同的IP地址,接入INTERNET的单位一般是一些小网络,都是局域网,以太网,

知识库 运动鞋怎么清洗比较好

运动鞋是大家一年四季都能拿来搭配的鞋子,不仅穿在脚上很舒服,还可以搭配任何款式的衣服,只是鞋子多了就很难清洗,尤其是浅色的运动鞋不

知识大全 法律规定入室盗窃罪判多少年

依据我国《刑法》第二百六十四条规定,盗窃公私财物,数额较大的,或者多次盗窃、入户盗窃、携带凶器盗窃、扒窃的,处三年以下有期徒刑、拘

知识领域 nba冠军奖杯叫什么

1、NBA总冠军奖杯被称为奥布莱恩杯。2、该奖杯自1977年开始启用,用以取代之前的沃尔特·A·布朗奖杯。3、该奖杯一直沿用沃尔特·A·布朗奖...

此法可助中考生做每道中考物理题都比别人快!:全球新消息

如果中学生朋友们都在平时养成了解决各种物理问题的良好思维定势,那么,在做每道物理题时都比别人快一分钟是很容易做到的,这样的中学生会在

方大新材(838163)12月15日散户资金净卖出1990.00元

截至2022年12月15日收盘,方大新材(838163)报收于5 53元,上涨0 18%,换手率0 03%,成交量0 02万手,成交额9 43万元。

光威复材董秘回复:在未来C919大飞机国产化替代过程中

光威复材(300699)12月15日在投资者关系平台上答复了投资者关心的问题。投资者:请问董秘,公司提供C919验证的是碳纤维还是碳纤维预浸料?是否

猜您喜欢

Copyright ©  2015-2022 世界服装网版权所有  备案号:琼ICP备2022009675号-1   联系邮箱:435 227 67@qq.com