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

news2024/11/25 22:24:54

看到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系显卡还不支持?

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Laf v1.0 发布:函数计算只有两种,30s 放弃的和 30s 上线的

一般情况下,开发一个系统都需要前端和后端,仅靠一个人几乎无法胜任,需要考虑的特性和功能非常多,比如: 需要一个数据库来存放数据;需要一个文件存储来存放各种文件,比如图片文件;后…

旅行社优惠卡app软件开发

旅游行业的不断发展,越来越多的旅行社开始推出各种优惠卡来吸引游客。而随着智能手机的普及,开发一款旅行社优惠卡APP软件成为了一种必然的趋势。 该软件的主要功能是提供旅行社的各种优惠卡信息,包括优惠卡的种类、价格、使用范围、有效…

0基础学习VR全景平台篇 第65篇:VR直播-如何创建VR直播

开启一次VR直播只需简单三步:VR直播相机连接网线并开机>新建一个直播活动>将直播活动的推流地址填入直播相机。 1、将鼠标移至【开始创作】菜单,点击【全景直播】。 2、进入VR直播活动的创建页面,根据国家互联网相关政策,创…

Vant源码解析(四)----Popup弹出层,详解样式方法

这个功能,自己也手写过,毕竟有很多弹窗的嘛。 我自己写就是:一个背景层,然后一个盒子里面放内容。再写个显示隐藏事件。够够的了。 Vant的Popup弹出层 页面结构 短短一个背景加内容盒子,vant套了几层。 这是引用的组件…

linux 系统修改已经打好jar包的yml配置文件

工作中可能回遇到,jar包已经打好,并且文件已经上传了,但是突然发现配置文件中的某一个参数写错了,怎么办?重新打包?如果重新打包再上传的话太影响效率了。那么我们可以通过以下方法,修改已经上传…

致远电子冲刺上市:计划募资8亿元,实控人周立功、陈智红已离婚

7月18日,深圳证券交易所披露的信息显示,其已向广州致远电子股份有限公司(下称“致远电子”)发出第1轮审核问询函。据贝多财经了解,致远电子于2023年6月21日在深圳证券交易所递交招股书,准备在创业板上市。 …

2023最新版本Activiti7系列-事件篇

事件篇 事件(event)通常用于为流程生命周期中发生的事情建模。事件总是图形化为圆圈。在BPMN 2.0中,有两种主要的事件分类:*捕获(catching)与抛出(throwing)*事件。 捕获: 当流程执…

【java】【基础1】数据类型运算符

目录 一、数据类型(4大类8种) 1.1类型转换 1、自动类型转换 2、表达式的自动类转换 3、强制类型转换 二、运算符 2.1基本算术运算符 2.2自增自减运算符 2.3赋值运算 2.4关系运算符 2.5逻辑运算符 2.6三元运算符 2.7运算符的优先级 三、API文档&am…

中国人民大学与加拿大女王大学金融硕士——行而不辍,履践致远

理论和实践哪个重要呢,申克・阿伦斯曾说过:“如果没有理论的指导,实践就会变得盲目;而如果没有实践的充实,那么理论就会显得空洞”。学习不能停留在理论层面,要用于实践才能真正的消化吸收。学习的目的在于…

第一次实操Python+robotframework接口自动化测试

目前我们需要考虑的是如何实现关键字驱动实现接口自动化输出,通过关键字的封装实现一定意义上的脚本与用例的脱离! robot framework 的安装不过多说明,网上资料比较太多~ 实例:!!!&#xff01…

【数学建模】--典型相关分析

典型相关分析(Canonical Correlation analysis)研究两组变量(每组变量中都可能有多个指标)之间相关关系的一种多元统计方法。它能够揭示出两组变量之间的内在联系。 例子: 典型相关分析定义: 列题分析&…

visual studio中Git同步提交 报错:管道已结束

这里出现了在提交到远程的时候,vs提示管道已结束。 这里我的解决办法是使用git bash来手动提交 找到仓库的目录,右键找到gitbash的选项,输入add指令来添加文件到暂存区 git add .输入commit指令来将暂存区文件提交到本地仓库 git commit…

内核机制在以下方面发挥作用:

进程间通信:内核提供了特定的机制和接口,用于实现进程间的通信。这可以包括共享内存、管道、消息队列、信号量等。通过这些机制,进程可以在内核的帮助下进行数据传输和同步,实现进程间的协作和通信。 进程调度:内核负…

JAVA集成国密SM2

JAVA集成国密SM2加解密 一、pom配置二、代码集成2.1、目录结构2.2、源码2.3、测试 三、相关链接 国密算法概述:https://blog.csdn.net/qq_38254635/article/details/131801527 SM2椭圆曲线公钥密码算法 为非对称加密,基于ECC。该算法已公开。由于该算法…

详细解析张雪峰老师对计算机专业的评价“进可攻,退可守”--【职场篇】

文章目录 张雪峰的评价计算机行业类的总结性指示就业面宽进可攻,退可守另一个就业出口--培训 持续学习,技术过人 总结 张雪峰的评价 计算机行业类的总结性指示 “就业面宽,进可攻,退可守,各行各业其实对计算机专业都有…

确保安全:选择企业邮箱的五大关键因素!

为您的企业或组织选择正确的邮箱地址可以帮助您确保数据和通信的安全性。不安全的邮箱地址会使您容易受到垃圾邮件、病毒和网络钓鱼攻击。这里有一些小技巧可以帮助你选择一个安全的公司邮箱地址。 1.选择一个你可以信任的邮箱提供商 选择一个安全的公司邮箱地址的第一步是确保…

JavaScript入门——笔记用

JavaScript入门 变量数组常量模板字符串检测数据类型判断分支判断循环数组函数对象 与html和css不同的是js并不是一门标记语言,而是与java等相同,也是一门编程语言(实现人机交互的运行在客户端即浏览器的编程语言) JavaScript作用…

算法训练营第四十三天||● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

● 1049. 最后一块石头的重量 II 这道题和昨天的分割等和子集一样&#xff0c;只是最后返回值不一样 class Solution { public:int lastStoneWeightII(vector<int>& stones) {int sum 0;for(int i 0;i<stones.size();i){sum stones[i];}int target sum / 2;…

结构型模式 - 享元模式

概述 定义&#xff1a; 运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销&#xff0c;从而提高系统资源的利用率。 结构 享元&#xff08;Flyweight &#xff09;模式中存在以下两种状态&…

Python案例之新浪世界杯各国球队数据(德国VS日本)

目录标题 前言知识点:开发环境:实现代码:代码展示尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 知识点: 动态数据抓包 requests发送请求 json数据解析 开发环境: python 3.8 运行代码 pycharm 2021.2 辅助敲代码 requests pip install requests 第三方模块…