品牌 资讯 搭配 材料 时尚 热点 行业 首饰 玉石 行情

世界快讯:使用PyTorch 2.0 加速Hugging Face和TIMM库的模型

2022-12-22 23:02:45 来源:

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

设为星标,干货直达!


(相关资料图)

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()**来加速模型,这篇文章我们将介绍如何使用

2022-12-22 23:02:45

*ST亚联董秘回复:感谢您对公司的关心和关注!本问题的回复请您参见同日对相关问题的如还有其它问题

​*ST亚联(002316)12月22日在投资者关系平台上答复了投资者关心的问题。投资者:您好,请问截止12月20人股东人数是多少?谢谢。*ST亚联董秘:您好!感

2022-12-22 15:43:31

多措并举 加快药品和抗疫物资生产保供应

​央视网消息(新闻联播):近期,针对重点抗疫物资需求增加的现状,各地各部门多措并举,加快推进重点抗疫物资市场供给。位于浙江兰溪的药企生产

2022-12-22 10:09:26

阿根廷球迷在夺冠游行后同警方发生冲突:8人受伤,13人被捕

​球迷爬上布宜诺斯艾利斯地标方尖碑最顶端据法新社21日报道,世界杯冠军阿根廷队20日抵达首都布宜诺斯艾利斯,数百万球迷参加夺冠游行,庆祝球

2022-12-21 20:33:05

柯力传感(603662)12月21日主力资金净买入389.25万元

​截至2022年12月21日收盘,柯力传感(603662)报收于16 84元,上涨2 87%,换手率1 17%,成交量3 29万手,成交额5560 45万元。12

2022-12-21 15:07:48

友联租赁订立融资租赁协议 涉资2925万美元-观点

​友联租赁(01563)公布,于2022年12月20日,公司直接全资附属公司LeadingEliteInternationalLimited作为出租人与承租人CelestialPivotLimited

2022-12-21 08:52:35

多地大量投放退烧药!这几地拆零销售

​随着疫情防控政策不断优化调整,不少地区“一药难求”的局面正在得到缓解。近期,多地加大退烧药等紧急药品的投放力度,还有一些地区向群众...

2022-12-20 19:53:33

看点:索尼仍在研究如何对付PS5黄牛:购买条件更严格

​索尼仍在努力寻找阻止PS5黄牛的方法,并正在考虑采用更严格的PS5购买条件来做出限制。其实说一千道一万,真正一劳永逸解决黄牛办法其实就是增

2022-12-20 12:34:54

每日报道:前11个月全国完成水利建设投资增长33%

​前11个月全国完成水利建设投资增长33%来源:人民网-人民日报海外版本报北京12月19日电(记者李晓晴)记者从水利部获悉:1至11月,全国完成水利

2022-12-20 06:41:43

世界热头条丨价格前线|12月19日液化天然气(LNG)异动提示

​据同花顺iFinD数据显示,12月19日燃气价格出现异动: 液化天然气(LNG)12月19日已跌至7256 00元 吨,当日跌幅4 4%,周涨幅3 3%,月涨幅63 94

2022-12-19 17:54:02

世界快播:罕见首日破发!转债“稳赚”纪录失守,啥情况?医药板块重挫近4%,“2元20片退烧药”药企却逆势涨停

​(原标题:罕见首日破发!转债“稳赚”纪录失守,啥情况?医药板块重挫近4%,“2元20片退烧药”药企却逆势涨停)今天上午,A股市场与可转债...

2022-12-19 13:20:27

基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口|每日聚焦

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

2022-12-19 07:10:57

焦点热门:65岁赵本山与宋小宝搭戏,精神抖擞,态度严谨!手中二胡成标配

​再过一段时间,春节就要到了。而每当春节快来临时,许多人就不由得想起了曾经的“小品王”赵本山,这个给无数观众带来许多欢乐的男人。可自...

2022-12-18 19:17:05

隔水药膳蒸鸡做法 隔水药膳蒸鸡怎么做-世界今日讯

​1、山药除去粗皮,切成长段7—10厘米、厚度1厘米的纵片,枸杞子洗净备用。2、净鸡去爪,剖开背脊,抽去头颈骨留皮,下开水锅内氽一下取出,洗

2022-12-17 21:05:21

快看:赛特新材(688398)12月16日主力资金净卖出260.43万元

​截至2022年12月16日收盘,赛特新材(688398)报收于36 2元,下跌4 74%,换手率1 61%,成交量0 59万手,成交额2166 02万元。12月

2022-12-17 08:03:28

中交地产: 独立董事事前认可意见_环球播报

​中交地产:独立董事事前认可意见

2022-12-16 19:08:08

风机叶片高速转动时,如何进行位移轨迹测量? 焦点速看

​目前,我国已成为世界第二大经济体,第一大工业国,第一大货物贸易国,经济的迅猛发展导致了能源供不应求的局面。随着传统石化能源的日益紧张

2022-12-16 12:15:15

提钱花网贷逾期5千不还会上征信吗

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

2022-12-16 04:41:57

世界观焦点:chatgpt怎么玩?chatgpt国内能用吗?

​ChatGPT编程客栈是OpenAI推出的最优化的语言模型系统,它能够实现流畅对答、写代码、写剧本、辩证分析问题、纠错等能力。最近陆续有大神做了国

2022-12-15 11:58:14

新华制药股价创历史新高 频繁异动收关注函

​证券时报记者赵黎昀  12月14日午后,新华制药(000756)股价再度拉升封住涨停,收于43 43元 股,创历史新高。这已是近8个交易日来,该公司出现

2022-12-15 03:43:41

浙江震元12月14日主力资金大幅流出:全球热点评

​浙江震元12月14日主力资金净流出4437 53万元,涨跌幅为-9 56%,主力净量(dde大单净额 流通股)为-1 70%,两市排名4848 4887。投顾分析:该股今

2022-12-14 15:42:20

仅剩最后一个月!微软再次警告Win8.1即将停止支持 世界热讯

​今年早些时候,微软就曾告知用户,Win8 1将在2023年1月10日停止支持。微软再次警告用户,即将停止Win8 1的一切技术支持,之后微软将不再为该版

2022-12-14 10:25:50

环球热头条丨文科园林: 关于文科转债回售的第二次提示性公告

​证券代码:002775     证券简称:文科园林                                    公告编号:2022-10

2022-12-13 21:04:51

冲云破雾,丰富产品研发管线及科研底蕴为荣盛生物上扬势注入确定性

​近日,东北证券发布《医药行业2023年策略报告》,以“风物长宜放眼量,静待医药板块价值回归”为主题,对明年及未来一定时期内的医药产业发...

2022-12-13 13:03:59

【播资讯】乒乓球亚锦赛由哪国主办 以2019年为例

​1 2019年亚洲乒乓球锦标赛将于2019年9月15日至22日在印度尼西亚举行。2 8月24日,中国乒乓球队公布了2019年亚洲乒乓球锦标赛参赛名单。中国男

2022-12-13 06:31:51

走在前沿 干在实处——记浚县公安局交警大队大队长王玉刚-今日热搜

​今年7月下旬,浚县连降大到暴雨,河水涨溢,引起严重的洪涝灾害,不少道路被淹,不断出现险情。灾情就是命令,防控就是责任。面对严峻的防汛抗

2022-12-12 16:39:30

良信股份(002706):特定股东减持股份的预披露-全球简讯

​2022年12月12日公告发布

2022-12-12 11:45:15

璞泰来: 上海璞泰来新能源科技股份有限公司关于回购注销部分限制性股票完成的公告

​证券代码:603659       证券简称:璞泰来         公告编号:2022-094        上海璞泰来新能源科技股份有限公司 

2022-12-09 15:52:03

创维数字董秘回复:截至2022年11月30日,公司股东户数为61,657户-全球速看

​创维数字(000810)12月08日在投资者关系平台上答复了投资者关心的问题。投资者:请问12月7号公司股东人数是多少创维数字董秘:您好,截至2022年11月3

2022-12-08 15:43:19

苏州科达董秘回复:公司将持续完善现有的产品和解决方案,此前通过线上形式发布了融合通信一体机等新产品

​苏州科达(603660)12月07日在投资者关系平台上答复了投资者关心的问题。投资者:你好董秘,请问科达2022年的新品发布会还举行吗?苏州科达董秘

2022-12-07 13:37:24