使用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/
标签:
推荐文章
- 使用PyTorch 2.0 加速Hugging Face和TIMM库的模型
- 美的置业(03990):美的置业集团拟发行不超5亿元公司债券|当前速读
- 中小微企业可在家门口得到碳减排量认证和交易服务|环球热点评
- 焦点滚动:12月22日三只新股上市,会破发吗
- 券商投行保荐项目应从“可批性”向“可投性”转变
- 久日新材: 天津久日新材料股份有限公司关于使用部分超募资金永久补充流动资金的公告-每日讯息
- 前十月全国新开工改造城镇老旧小区5.21万个 惠及居民859.25万户
- 甬矽电子:公司的二期项目规划中包括部分晶圆级封装产品的布局,并积极探索chiplet的布局和具体应用
- 焦点要闻:简阳:“蓉易贷”纾困解难“贷”动乡村振兴
- 重新走弱!_速看
- 【热闻】千亿市值个股跑赢大盘说明什么
- 防范于未“燃” 光山公安筑牢安全防线 天天速看
- 商务部回应美将36家中国实体列入管制清单
- 世界热讯:“创客广东”大赛智能制造领域复赛在东莞石排举行
- 中国队打破长达9年纪录!男队迎来首枚奖牌,冠军“偷腥”引轰动
- 艾比森(300389)12月16日主力资金净卖出325.15万元-热议
- 三峡新材董秘回复:受玻璃原片价格低迷、原(燃)材料价格高企及疫情影响,截止至三季度末,公司主营业务依然亏损
- 虞城县城市管理局开展“我们的节日·端午节”包粽子活动
- 异动快报:永顺泰(001338)12月15日14点48分触及跌停板_环球报资讯
- 买房贷款利息和本金多少,房贷利息和本金一样多_当前最新
- 新疆初级会计证报名费用 全球滚动
- 黄山胶囊:公司为山东新华制药股份有限公司的全资子公司山东淄博新达制药有限公司的供货商之一|环球速看
- 焦点热讯:浙江省嘉兴市政法委 推动社会治理智治“双循环”
- 爱施德董秘回复:公司高度重视新能源汽车赛道的布局,积极推进与新能源汽车品牌的合作
- 福森药业(01652)涨逾32% 旗下双黄连类感冒药在新冠病毒感染者用药目录
- 恺英网络斩获第七届金陀螺奖“年度影响力游戏企业奖”
- 启晟汇碳中和领域投资可谓战绩斐然|世界快报
- 《央视财经评论》:各地加力拼经济 企业组团“出海忙”|今日热议
- 智能制造板块12月8日跌0.41%,英飞拓领跌,北向资金增持5.67亿元
- 天安新材: 天安新材关于对中国证监会行政许可项目审查一次反馈意见通知书之反馈意见回复(二次修订稿)的公告 世界速讯
- 锡装股份董秘回复:股票价格受公司基本面、市场资金情况、投资者持股心态等多种因素共同影响,会存在一定的波动 当前报道
- 深圳高水平医院建设成效显著 优质医疗资源供给提速
- 产业链相关公司广信股份收益颇丰 产品量价齐升连续六年业绩双增
- “5·20”助推甜蜜经济 旅行成为这届年轻人青睐的“浪漫仪式”
- 源飞宠物即将登陆深交所主板 其宠物牵引用具的平均单价为15.69元
- 星空华文宣布重启IPO欲再闯港股 王牌IP《中国好声音》已难赚钱
- 昔日“果链”巨头拟投资130亿元用于智能制造 市值已蒸发超600亿元
- 香雪制药3000万元商票持续逾期 2021年净利润亏损6.88亿元
- 4月快递行业负增长态势扩大 单票收入增长推动业务营收增长
- 各大电商平台提早布局“618” 释放“618”促销以及商家支持举措
- 多品牌自行车涨价 价格的上涨会让共享单车运营企业承压吗?
- 恐龙呼吸道感染首个证据发现 几万年前的恐龙也患感冒
- 台风“圆规”携风裹雨来袭 广东深圳、珠海等地停课停工
- 西藏米林“家庭农场”:引领种植产业 助力乡村振兴
- 从东北到西北 他在“军垦第一城”规划着城建未来
- 新疆阿克苏地区库车市发生4.1级地震 震源深度21千米
- 环球影城过山车突然停驶 游客被困十米高
- 新版控烟条例效果如何?禁烟区依然烟熏火燎
- 还在打赏假脸女主播?来看视频“变装秀”
- 大雨洪水中的这7个瞬间,让我们流泪了……
- 台风“圆规”将登陆 广东多地停课停工
- 哈尔滨市新增治愈出院本土新冠肺炎确诊病例8例
- 西藏普兰边检民警:让孤寡老人迎来有“儿女”陪伴的温馨重阳节
- 上海率先出台《住宅装饰装修质量验收规范》团体标准
X 关闭
最新资讯
- 吴谢宇称死刑“量刑太重”上诉 二审新增一名辩护律师
- 粤启动最高标准防御台风“圆规” 深圳珠海等多地停课停工
- 山西大同:受近期气温骤降影响 11日起陆续供暖
- 媒体记者赞开封古城墙夜景 宛如时空隧道式“穿越”体验
- 风雨无情,携手共“晋”
- 有助降低农业磷肥施用 科研人员在植物磷营养吸收上取得新发现
- 台风“圆规”给福建带来风雨影响 福建转移近3万人
- 生物多样性“家谱”扩容 杭州桐庐发现低危新记录种天目臭蛙
- 亲身感受技能魅力和力量 近40位外交官在沪“走进世赛”
- 福建发布台风黄色预警信号 福州海警守护辖区渔船民安全
- 广西新增境外输入确诊病例8例 新增境外输入无症状感染者1例
- 雷锋精神:做“永不生锈的螺丝钉”
- 风雨同舟 谱写抗洪壮歌
- 晋陕全力做好防汛救灾 恢复生产工作
- 哈尔滨多地风险等级调整为低风险
- 激流勇“晋”!一组谐音成语致敬山西
- 海河流域上游强降雨后泄洪 洪峰预计今晚进入天津
- 河南卫辉村民抢收蔬菜捐赠山西:俺分文不要
- 台风“圆规”致海南进出岛客运暂停
- “圆规”加强为台风级 将在海南琼海到陵水一带沿海登陆
- 为了百分之五的孩子:残疾儿童如何接受九年义务教育?
- 关乎教育公平感 禁止收集家长职务信息该成为明规则
- 台风“圆规”将登陆 较强冷空气将影响我国大部地区
- “圆规”加强为台风级 中央气象台发布台风橙色预警
- 骗财、自杀、诱奸……四个关于“饭圈女孩”的故事
- 绥化“战疫”,有群“做好事上瘾”的年轻人助攻
- 这些“反诈App”,关键时刻或能帮上你
- 北京秋雨又上线夜间大部有小雨 15日起大风降温来袭
- 收养12个患病弃婴 在这个家庭亲情不一定与血缘联系
- 学生被家暴学校却保持缄默?强制报告制度还需更多配套
- 教培退潮,成人职教成为培训机构入局、转型热门选项
- 文化场馆活动 展现多彩魅力
- 既要“富口袋”也要“富脑袋”
- 落马官员违纪违法:自认国企特殊 享乐放纵迷打球
- 2021年中国汽车行业用户满意度指数测评结果发布
- 1000度近视坐过山车致视网膜脱落 眼科专家:高度近视用力咳嗽、打喷嚏都有可能造成悲剧
- 家庭养老床位“无人照护如有人” 安装适老智能设备 24小时远程监护
- 3小时话剧《长安第二碗》浓缩40年来时代巨变
- 1738元机票提前10天退竟要扣1182元退票费
- 在“未来工厂”,老师傅变身“新工人”
- 面对气候变化,文物保护要有前瞻性
- 挪用公款并收受别墅 是否应并罚
- 国道244陕西留坝县武关驿段出现山体塌方
- 厦门做细文化遗产保护监督 联合会商促整改
- 大熊猫国家公园正式设立 四年试点受益的不仅是大熊猫
- 人工智能+3D打印,做出一口好“牙”
- 大熊猫的故乡藏着哪些“生物多样性”密码?
- 我国正式设立首批五个国家公园 大熊猫国家公园“转正”
- 郑州追征一网红600多万元税款 网络主播补税潮要来了?
- 成都中小学劳动教育纳入必修课 每周不少于1课时
X 关闭