pytorch 2.0初探:和pytorch 1.13的速度对比

看到pytorch2.0出来了,而且宣传提速明显,一行代码即可提速43%左右:

compiled_model = torch.compile(model)

We then measure speedups and validate accuracy across these models. Since speedups can be dependent on data-type, we measure speedups on both float32 and Automatic Mixed Precision (AMP). We report an uneven weighted average speedup of 0.75 * AMP + 0.25 * float32 since we find AMP is more common in practice.

Across these 163 open-source models torch.compile works 93% of time, and the model runs 43% faster in training on an NVIDIA A100 GPU. At Float32 precision, it runs 21% faster on average and at AMP Precision it runs 51% faster on average.

因为想要提高炼丹速度,所以尝试和pytorch1.13进行对比。

环境

通过nvidia-smi查看显卡和驱动:

 显卡是4070ti,驱动安装的是最新的(好像是2023.6月的)。系统是Ubuntu 20.04。

conda环境有两个,分别是pytorch1.13和pytorch2.01,均是cuda 11.7版本,python是3.8.17。

 直接按照官方安装教程就行,这里我用的是pip进行安装的。

训练速度

代码用的是自己训练车牌识别的项目,主干网络用的是resnet34,代码中使用了AMP。

 pytorch 1.13

可以看到训练一轮耗时246s,中间过程太长没有全截下来。

准确点应该训练多轮取平均时间,我大致看了几轮,耗时基本一致,就没浪费时间跑太多轮。

pytorch 2.0.1

先不使用torch.compile

 

 耗时227s,相比pytorch1.13,提速8%左右,还是挺惊喜的,毕竟还没用torch.compile,要是用了不得上天啊,想想还挺激动的。

下面使用torch.compile,方法很简单,使用最上面那行代码就行,开搞!

耗时226s,不能说一模一样,简直就是毫无差别。 

然后注意到刚开始训练时,有一个警告:

anaconda3/envs/pt2/lib/python3.8/site-packages/torch/_inductor/compile_fx.py:90: UserWarning: TensorFloat32 tensor cores for float32 matrix multiplication available but not enabled. Consider setting `torch.set_float32_matmul_precision('high')` for better performance.
  warnings.warn( 

torch.set_float32_matmul_precision('high')这个接口有三个参数,默认是highest,可以通过torch.get_float32_matmul_precision()查看,于是我把这个参数设置成high,然后重新训练了,结果发现耗时还是一样。

然后去网上搜索一番,看到torch.compile有一个mode参数

  • mode (str) – Can be either “default”, “reduce-overhead” or “max-autotune”

有人说reduce-overhead对小模型有效,于是我尝试把mode设置成reduce-overhead。

再次开搞。

 耗时227s,一点儿没变!!!

细心的我发现,刚开始训练时,又有个告警:

torch._inductor.utils: [WARNING] skipping cudagraphs due to input mutation 

这次不太幸运,Google了一圈也没发现什么原因,而且我还尝试了把mode参数设置成max-autotune,也没效果,而且多了一个警告:

先不折腾了,待后续观察。

总结

通过多次实验对比pytorch1.13和pytorch2.0.1,发现2.0.1比1.13提速8%左右,但是compile没有效果,暂时没搞清楚什么原因。

官方描述中有下面一段话:

Caveats: On a desktop-class GPU such as a NVIDIA 3090, we’ve measured that speedups are lower than on server-class GPUs such as A100. As of today, our default backend TorchInductor supports CPUs and NVIDIA Volta and Ampere GPUs. It does not (yet) support other GPUs, xPUs or older NVIDIA GPUs.

难道是40系显卡还不支持?

另外从官方介绍也可以看出,提速效果跟硬件、模型结构都有关系,所以具体能提速多少,还得自己在实际项目中尝试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/41437.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu学习笔记(二)——文件属性与权限

文章目录 前言一、用户与用户组1.用户(文件拥有者)2.用户组3.其他人 二、Linux用户身份与用户组记录文件1. /etc/passwd2. /etc/shadow3. /etc/group 三、文件属性与权限1. 查看文件属性的方法(ls)2.文件属性详细介绍2.1 权限2.2 …

【Redis】高可用之三:集群(cluster)

本文是Redis系列第6篇,前5篇欢迎移步 【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手_AQin1012的博客-CSDN博客关于Redis的数据类型,各个文章总有些小不同,我们这里讨论的是Redis 7.0,为确保准确&#xf…

Spring Boot进阶(55):SpringBoot之集成MongoDB及实战使用 | 超级详细,建议收藏

1. 前言🔥 前几期我们有介绍Mysql、Redis等数据库介绍及实战演示,对基本的数据存放有很好的共性,但是如果说遇到大面积的xml、Json、bson等格式文档数据存放,以上数据库并非是最优选择,最优选择是Mongodb数据库。 那么…

采集极验4滑块验证码图片数据

在网络安全领域,验证码是一种常见的用于验证用户身份或防止恶意机器人攻击的技术。而极验4滑块验证码作为一种广泛应用的验证码形式,其具有较高的安全性和防御能力。本文将以获取极验4滑块验证码图片数据为主题,介绍相关技术和方法。 一、极…

【测试设计】使用jenkins 插件Allure生成自动化测试报告

前言 以前做自动化测试的时候一直用的HTMLTestRunner来生成测试报告,后来也尝试过用Python的PyH模块自己构建测试报告,在后来看到了RobotFramework的测试报告,感觉之前用的测试报告都太简陋,它才是测试报告应该有的样子。也就是在…

如果微信消息显示“已读”的话......

近日,一则 #如果微信显示已读的话# 话题冲上了微博热搜榜单。 “已读”是很多社交软件拥有的功能,如果对方接收并查看了消息,就会在消息上显示“已读”,但目前微信还没有推出这项功能。 对于“已读”功能,不少网友纷纷…

力扣 135. 分发糖果

题目来源:https://leetcode.cn/problems/candy/description/ C题解(来源代码随想录): 先从左往右比较,右边孩子评分比左边高就多发1颗糖,否则就只发1颗;再从右往左比较,左边孩子评分…

面试题 02.07. 链表相交

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后&#x…

260道网络安全工程师面试题汇总(附答题解析+配套资料)

由于我之前写了不少网络安全技术相关的文章和回答,不少读者朋友知道我是从事网络安全相关的工作,于是经常有人私信问我: 我刚入门网络安全,该怎么学? 想找网络安全工作,应该要怎么进行技术面试准备&…

ROS:action通信

目录 一、前言二、概念三、作用四、实际案例4.1需求4.2action通信自定义action文件4.2.1定义action文件4.2.2编辑配置文件4.2.3编译 4.3action通信自定义action文件调用(C)4.3.1流程4.3.2vscode配置4.3.3服务端4.3.4客户端4.3.5编译配置文件4.3.6执行 4.4action通信自定义actio…

服务器使用UDP通讯127.0.0.1测试成功连接服务器却通讯失败

首先看看本人情况 解释一下: 1:左边窗口是模拟服务程序,功能是收到消息后把消息打印出来,并把收到的消息再发回给发送消息的主机 2:右边窗口是模拟客户程序,功能是将输入的消息发送给服务程序的主机&…

回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于BiGRU-AdaBoost双向门控循环单元结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于B…

Revit 导出明细表的两种方法!

方法一、Revit中怎么灵活运用明细表格式的导出与导入 在做项目的时候,遇到一些项目需要进行工程量统计的时候,经常需要设置明细表里面的格式,例如字体、表格排布样式等,但是项目一旦多起来,这些工作重复性又太高&#…

vue+element-ui通用后台管理系统(适合新手)

vueelement-ui通用后台管理系统(适合新手) 1、使用到的技术 使用vue2element-uiaxiosjs-cookielessecharts实现的一个简易的通用后台管理系统,具有很强的可扩展性,修改简单,只要有点前端基础就能看懂; 2…

Leetcode-每日一题【19.删除链表的倒数第N个结点】

题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2输出:[1,2,3,5] 示例 2: 输入:head [1], n 1输出:[] 示例 3&#x…

Ubuntu 18.04 Docker 安装配置 Apollo 6.0

百度 Apollo 安装测试(1) Apollo 6.0 安装完全指南 在这一步出错: 进入到 Apollo 源码根目录,打开终端,执行下述命令以启动 Apollo Docker 开发容器 ./docker/scripts/dev_start.sh并没有成功启动 Apollo docker 开发…

小程序webview组件,小程序和webview交互,小程序内联h5页面,小程序webview内网页实现微信支付

小程序支持webview以后,我们开发的好多h5页面,就可以直接在小程序里使用了,比如我们开发的微信商城,文章详情页,商品详情页,就可以开发一套,多处使用了。我们今天来讲一讲。在小程序的webview里…

B072-项目实战-用户模块--前台登录 三方登录

目录 前台登录-账号登录前端完成左上角显示用户信息配置前置拦截器、后置拦截器和不受限资源拦截器 三方登录-微信登录概述流程图用法代码实现步骤分析:实现准备代码前端login.htmlcallback.html 后端LoginController-微信登录LoginServiceImpl-微信登录解决回调域名不能跨域绑…

【Dart】006-类的定义和使用

【Dart】006-类的定义和使用 文章目录 【Dart】006-类的定义和使用一、类的定义1、概述2、简单定义与实例化代码示例运行结果 3、成员方法代码示例运行结果箭头函数写法 4、get 与 set 关键字概述代码示例运行结果 二、类的构造方法1、特点2、完整版的构造方法简化版完整版 3、…

【JavaScript】Function的祖传方法call与apply

引言 内容速递 看了本文您能了解到的知识! 在本篇文章中,将带你了解什么是call和apply,call和apply的用途、如何手写call和apply以及call和apply的使用场景。 1、什么是call和apply call()和apply()是JavaScript中的两个内置方法&#xff…