使用PyTorch 2.0 加速Hugging Face和TIMM库的模型
点蓝色字关注“机器学习算法工程师”
设为星标,干货直达!
(资料图片仅供参考)
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/
标签:
推荐文章
- 执炬奔跑,梦想生生不息——访杭州亚运会火炬手
- 肝火旺有什么症状 肝火旺的症状吃什么药
- 推行“三三”工作模式 石门县公安局全力护航开学季
- 惠安县开展教师节慰问活动
- 长春到沈阳需要隔离吗6月
- 美元指数持续走强,人民币汇率调整压力加大
- 股票行情快报:盘江股份(600395)9月8日主力资金净卖出327.07万元
- 上市四个月急推重组,荣旗科技欲加码新能源领域业务
- 蚂蚁集团正式发布金融大模型,针对个人和专业用户分别推出两大产品
- 海螺水泥(00914)出资10亿元携金石投资等参设合伙企业
- 让生活垃圾“变废为宝”,他们这样做
- 微软正在测试Paint中的背景去除工具
- 破发股巨一科技上半年净利降67% 2021年上市募15.8亿
- 期权有什么投资价值为什么?
- 把“世界超市”义乌搬上京东 京东9.9超省日打造靠谱版“9.9包邮”
- 薛之谦演唱安河桥说再见 薛之谦献唱安河桥
- 参与隋田力造假大案 又有两家上市公司将被罚
- 广哈通信9月8日快速反弹
- 我们几个朋友有轮着组饭局(买单)的习惯
- 跨省就医、交通出行、文旅购票……你手里的这张卡还有这些用处→
- 国有五大行、招行等今迎新一轮存款利率下调,最高降幅达25个基点
- 当好东道主 喜迎山旅会——“万马”奔腾:闻稻谷飘香 品诗酒田园
- 你的思维方式,决定了你的职场高度
- qq炫舞2挂(炫舞2挂)
- 失主刚刚报警,窃贼已被抓获
- 早晨吃牛奶还是晚上喝牛奶好(早晨吃牛奶好还是晚上喝牛奶好)
- 受台风影响,未来三天广珠城际全部列车停运
- 深度金选|年内涨停超30次、成AI首只10倍股!绑定英伟达,鸿博股份第六次转型会成功吗?
- 人民币大消息
- 金枪鱼进出口市场分析 国内金枪鱼行业市场如何?
- 价格暴涨4倍还多:玩家怀念30美元能买PS+一整年
- 聚维酮碘商品报价动态(2023-08-31)
- 高质量发展在申城|对接虹桥国际开放枢纽建设这一国家战略,长宁怎么做?
- 滨海新区警方擒获“百万大盗”
- 陕西发布全国首个考古工地安全专业标准
- 英国空管系统故障或致航司损失1亿美元
- 今起降价!有的便宜了9535元
- 经济法基础考点强化(55)
- 排位赛日本暂列O组第一 中国男篮M组第四 直通巴黎日本占尽先机
- 拼劲十足!崔永熙仅出战9分钟 1中1得到4分1助攻2抢断1追帽
- 物流数据看亮点 经济发展“脉动”强劲
- 揭秘康灵盾为东方肥牛王火锅定制的小料台设计!
- 贩卖明星航班侵犯隐私 航空公司两客服获刑3年
- 吸金不断!Tims天好中国二季度营收4.117亿【附咖啡行业市场分析】
- 人民币市场汇价(8月30日)
- 湘江开放日,为高校学子“智”引未来
- 高新区(新市区):反诈宣传进社区 守护平安聚民心
- 院线电影《加班惊魂》开机 新锐演员鲍李宁担男一引期待
- 让气象雷达更加“耳聪目明”
- 全省法院全链条打击电信网络诈骗犯罪
- 2021年郭冬临小品就地过年(郭冬临小品回家过年是哪年春晚)
- 沪深股通|泰坦科技8月29日获外资买入0.37%股份
- 古代最著名的五大才女(值得收藏史上四大才女)
- “华尔街之狼”正在抄底中国房地产
X 关闭
最新资讯
- 中国梦·大国工匠篇丨我在三江源国家公园当宣传员
- 海河,“津门古渡”的“活力秀带”
- 博山区猕猴桃园开始采摘
- 60余名省内外专家学者、与会嘉宾走进“明代生活的活化石”平坝天龙屯堡
- 港股内房股午后持续走高 绿城中国涨超12%
- 30万株醉蝶花“落户”滨海公园
- “拿什么拯救你,我的男篮” 天时地利人和皆不利,出局基本成定局
- 马士基供应服务公司将削减100多个工作岗位,以简化运营
- 高层次人才赋能首府产业发展研讨会召开
- 分析|湖人新赛季可能看到的5套阵容 双塔or射手阵or詹中锋?
- 成都GDP首次半年破万亿元,高质量发展取得积极进展
- 莱西公交22路(关于莱西公交22路的简介)
- 猪笼草的功效与作用(猪茏草)
- 魔兽世界怀旧服邪恶临近任务怎么做(wowtbc怀旧服邪恶临近任务流程攻略)
- 关爱留守儿童,天旅投集团在行动!
- 84健康/眼部除皱哪家医院好 眼部除皱专家)
- 南昌小伙被诱骗至柬埔寨,江西警方跨境成功解救!
- 男生拍照摆pose大全(男生怎么拍照好看又上镜)
- 华鑫证券:五箭齐发,超跌反弹一触即发
- 行政复议法修订草案三审:扩大行政复议范围、完善行政复议前置范围
- 湖北荆州:用绘本记录旅程 10岁小学生绘“卷”成“书”
- 中国空间站已开展上万次在轨实验
- 制造业当家,全国首个千亿工业大镇容桂,如何转型再突围?
- 《创3》主题曲考核,希林娜依·高逆袭成功,张艺凡引争议
- 福建启动预防台风“苏拉”Ⅳ级应急响应
- 一屋两人三餐四季搞笑下联 一屋两人三餐四季 求一个下联 求浪漫的 谢谢
- 中国太保上半年营业收入同比增长6.5%
- 祥生医疗(688358.SH):选举莫若理为公司第三届董事会董事长
- 极端天气发生后,对GDP有哪些影响?怎样减小损失?
- 李凯尔低迷原因曝光!主教练说出真相,3大水货出炉,王哲林上榜
- 煤炭行业:钢铁方案未提平控 中报披露业绩回落
- 多地盐业:管够,不用囤货
- 保时捷boxster报价
- 客厅电视机尺寸选择标准 客厅电视机尺寸选择
- 原神湖畔的维维安涅成就完成方法
- 我用席慕蓉的诗谱了曲,可以上传到网络上吗
- 拟上市公司实控人母亲或曾是疫苗临床研究所领导
- 释放创新创造活力 为人才提供全方位全周期服务
- 姚洋:中国经济未来的动力是创新,但创新就会有泡沫
- 黔东南“黎从榕”加快对接融入粤港澳大湾区
- 进口禁令,五国达成一致
- 俄称击落乌无人机 乌称打击俄多个目标
- 股票行情快报:索菱股份(002766)8月25日主力资金净卖出219.25万元
- 英国的文化特色有哪些用英语描写(英国的文化特色有哪些)
- 手机相关知识:网易考拉入驻商家条件
- 联盟猎人去哪里抓猪(QQ飞车抓猪是什么意思)
- 铂科新材股东户数增加45.79%,户均持股71.02万元
- 突发!陕西一高速路桥台路面塌陷!这雨是真大、天气是真恶劣!
- 两部门:继续实施公共租赁住房税收优惠政策
- 2023内蒙古锡林浩特市招聘义务教育阶段学校教师(应届毕业生)拟聘公示
X 关闭