关于深度学习框架的忆苦思甜

声明:本文原创首发于公众号夕小瑶的卖萌屋。作者:卖萌酱

大家好,我是卖萌酱。

对一个深度学习从业者来说,无论你的场景是CV、NLP、Speech还是搜广推现金牛,手头使用最高频的工具莫过于深度学习框架,涵盖了模型训练、模型部署,乃至数据标注、数据清洗等环节。

站在2022年的视角下,回顾曾经被深度学习框架搞崩溃的瞬间,真心觉得现在的框架、工具链已经被打磨的太好用了。。

来吧,忆苦思甜开始!

框架选择:选择困难症患者的噩梦

卖萌酱在入门深度学习时,光在“我要学习哪个深度学习框架”的问题上,就精神内耗了接近一个月。当时框架选择方面的参考资料和分析帖比较匮乏,最后无奈之下,把当时流行的Theano、Caffe、TensorFlow、Torch(注意不是Pytorch)、Keras(当时还不属于TF)全都入门上手了一遍,最后竟然丧心病狂的觉得当时的TF是最好用的。

你以为卖萌酱从此变成了“TF高阶工程师”?

不不,就在卖萌酱好不容易把TF 1.x自认为玩的比较溜的时候,Pytorch的风就袭来了。在师兄师姐的强力安利下,又强行试了试Pytorch,结果由于当时还不成熟,踩了个框架层面的bug,在github上跟开发者反馈后等了好久也没解决,又切回去TF 1.x了。

就在卖萌酱终于要把精力聚焦在业务问题上时,TF2.0又出现了。更新按道理是个好事啊,然而,TF2.0与TF1.0的兼容性,几乎等于没有。。你坚持TF1.0,就要面临将来无人维护的必然结局。你要升级2.0吧,所有积累的TF代码全废了。

TF这点如果当年能像现在的飞桨PaddlePaddle一样,2.X强力兼容1.X,卖萌酱可能就不会抛弃TF了。。

最后,就在卖萌酱终于要彻底拥抱Pytorch的时候,又被大规模分布式训练和模型部署问题给折腾懵了。这时候有大佬跟卖萌酱说了一句:“搞分布式训练和部署,不应该优先考虑PaddlePaddle么?”于是,半信半疑的卖萌酱又跑去试了一把飞桨PaddlePaddle,嗯,真香。。果然从工业界打磨出来的深度学习框架最懂工业界的痛点。

6年的时间里,卖萌酱学习了7个深度学习框架,对耐心差的开发者来说频繁切换框架真的会非常崩溃。

听卖萌酱一句劝,2022年了,如果你要all in做学术,第一时间跑通Arxiv上昨天刚挂的论文中的开源代码,那就无脑选择Pytorch;如果你要all in工业界,既要训练爽又要部署省心,就无脑飞桨PaddlePaddle,尤其在国内,有中文团队本土支持简直不要太爽。

机制纠结:静态图的极客感还是动态图的傻瓜式?

在TF2.0出现以前,很多人都纠结过选择静态图还是动态图。虽然静态图跑起来真的快,但是debug起来又比较痛苦(虽然看起来很极客范),部署的时候又觉得香。当时就在想,如果有一个深度学习框架,能够编程和调试的时候用动态图,等到要大规模训练和部署的时候无需改代码就直接自动转静态图运行就好了。

d7f74f03368fcfa7b6886bdd389e3f6e.png

卖萌酱这个愿望终于在不久前实现了!

飞桨PaddlePaddle从2.X的版本后,默认开启动态图模式进行模型开发、调试和训练,但是由于Paddle的API实现了“动静统一”,在开发调试完成后,可以直接通过paddle.enable_static()来切换到静态图模式进行模型训练加速和模型部署。简直就是现代深度学习框架的理想态好不好。

为啥我的任务跑的这么慢!GPU利用率这么低!

每次要尝试一个比较大胆的idea,除了要面临方法效果层面的挑战外,新模型新算法的训练、推理效率也经常出奇的低,甚至一些经典的模型,要做大规模数据推理时发现别人3天能跑完的任务,我却要跑7天,完全不知道到底是哪里拖慢了速度。

这时候可能就有老司机跑过来嘲讽:

卖萌酱,你这工程能力是不是不大行啊~~~

刚开始的时候,卖萌酱会尝试往代码里疯狂插入time.time()打印多个点的运行时间,不但插入费时费力,删除也费力,调试粒度还非常粗,有些时间是消耗在GPU上、CPU上还是内存显存通信上也搞不清楚。

不过,最近听飞桨PaddlePaddle框架团队的同学说,Paddle计划在即将发布的2.3版本中推出9个性能分析API,不仅非常易用,而且全面、专业,在训练、推理过程中收集、导出和统计性能数据,到时候定位运行效率瓶颈,实现极限的工程效率优化就不再是一个让人崩溃的事情了!

Sparse运算,深度学习框架之痛

你想象过,把一个dense Tensor替换成sparse Tensor后,模型计算速度会被整整拖慢一倍吗?

没错,卖萌酱几年前曾经为了优化巨型word embedding的显存占用,曾经尝试将其从dense Tensor转成sparse Tensor,结果,naive了。。。不仅没省下多少显存,整个计算速度变成了龟速,就不吐槽是哪个框架了。。。

其实不仅是词向量查询,sparse Tensor和sparse运算在相当多的深度学习应用场景中都有很强的需求。比如计算机视觉中是3D、点云数据类型也非常稀疏,在推荐、广告等业务场景也有大量的稀疏数据和稀疏运算。在这方面,主流深度学习框架要么支持差,容易出奇怪的报错,要么性能无法达到效果,数据处理、模型组网非常复杂,而且运算效率低下。

以至于,在涉及到大量稀疏运算的场景,有实力的大厂甚至搞起了自研框架,或从开源框架拉分支来重点优化稀疏计算。。

不过,这个多年未解的痛点,可能会在飞桨PaddlePaddle即将发布的2.3版本中被大大缓解甚至解决,飞桨PaddlePaddle 2.3对sparse tensor做了全面梳理,预计会新增11个sparse tensor运算的API,常见的COO、CRS格式的Sparse Tensor以及与Dense Tensor互相转换等基础功能可能会得到简洁易用且高性能的实现。

除了以上提到的新特性外,据传即将发布的飞桨PaddlePaddle 2.3还会有一系列充满想象力的重磅升级,比如将傅里叶变换放进神经网络?让科学计算甚至信号处理问题都能接入深度学习框架?

可以确信的是,AI的应用边界将被持续打破,AI落地的想象力也会因飞桨为代表的新一代深度学习框架而变得不同。对框架底层突破与升级感兴趣的小伙伴,可以通过以下传送门预约WAVE SUMMIT深度学习开发者峰会!

WAVE SUMMIT 2022深度学习开发者峰会

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

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

相关文章

Spring Boot 2.x基础教程:默认数据源Hikari的配置详解

通过上一节的学习,我们已经学会如何应用Spring中的JdbcTemplate来完成对MySQL的数据库读写操作。接下来通过本篇文章,重点说说在访问数据库过程中的一个重要概念:数据源(Data Source),以及Spring Boot中对数…

关于深度学习、NLP和CV,我们写了一本1400页的全栈手册

不知不觉写文章已经四年了。最开始是一个人,后来恰了恰饭,就招揽了很多比小夕厉害的小伙伴一起写。不知不觉已经积累了300多篇了。。三年以来,我跟小伙伴们原创的300篇深度学习、NLP、CV、知识图谱、跨模态等领域的入门资料、子方向综述、201…

基于sklearn的LogisticRegression二分类实践

文章目录1. 预备知识2. 实践代码3. 结果对比3.1 正态分布3.2 均匀分布3.3 修改Pipeline3.3.1 删除多项式转换3.3.2 删除归一化项3.3.3 删除多项式转换&归一化3.4 总结4. 附4.1 matplotlib.pyplot.contourf4.2 numpy 之 np.r_[a,b], np.c_[a,b]本文使用 sklearn的逻辑斯谛回…

Spring Boot 2.2 正式发布,大幅性能提升 + Java 13 支持

之前 Spring Boot 2.2没能按时发布,是由于 Spring Framework 5.2 的发布受阻而推迟。这次随着 Spring Framework 5.2.0 成功发布之后,Spring Boot 2.2 也紧跟其后,发布了第一个版本:2.2.0。下面就来一起来看看这个版本都更新了些什…

剑指Offer - 面试题10- II. 青蛙跳台阶问题

1. 题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e97(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1&#xff1a…

Gitee倒下了

你好呀,我是歪歪。昨日,趁着午休的美好时光,我正在互联网上愉(疯)快(狂)的冲(内)浪(卷)。在查询某个技术点的时候,我一不小心&#xf…

Spring Boot 2.x基础教程:Swagger接口分类与各元素排序问题详解

之前通过Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档一文,我们学习了如何使用Swagger为Spring Boot项目自动生成API文档,有不少用户留言问了关于文档内容的组织以及排序问题。所以,就特别开一篇详细说说Swagger中文档…

剑指Offer - 面试题15. 二进制中1的个数(位运算)

1. 题目 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。 示例 1: 输入:0000000000…

阿里副总裁、达摩院副院长金榕被曝离职!AI科学家集体“逃离“大厂…

文 | 江南教主据Tech星球报道,阿里巴巴副总裁、达摩院副院长金榕已于近期离职,去向还未知。金榕博士毕业于卡耐基梅隆大学,曾是密歇根州立大学终身教授,曾任NIPS、SIGIR等顶级国际学术会议的主席,获得过美国国家科学基…

Spring Boot 2.x基础教程:JSR-303实现请求参数校验

请求参数的校验是很多新手开发非常容易犯错,或存在较多改进点的常见场景。比较常见的问题主要表现在以下几个方面: 仅依靠前端框架解决参数校验,缺失服务端的校验。这种情况常见于需要同时开发前后端的时候,虽然程序的正常使用不…

剑指Offer - 面试题17. 打印从1到最大的n位数

1. 题目 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 示例 1: 输入: n 1 输出: [1,2,3,4,5,6,7,8,9]说明: 用返回一个整数列表来代替打印 n 为正整数来源:力扣…

“AI不会凉!” 她要扛起中国AI落地的大旗

文 | 卖萌酱"这不是无脑吹,也不是鸡汤。她让中国AI落地变得切实有解了。"AI泡沫破了吗?AI能落地了吗?AI不是PPT问题吗?AI终究只是梦一场?面对行外的人,每当卖萌酱说起自己是做AI的,都…

Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档

随着前后端分离架构和微服务架构的流行,我们使用Spring Boot来构建RESTful API项目的场景越来越多。通常我们的一个RESTful API就有可能要服务于多个不同的开发人员或开发团队:IOS开发、Android开发、Web开发甚至其他的后端服务等。为了减少与其他团队平…

剑指Offer - 面试题7. 重建二叉树(递归)

1. 题目 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树:3/ \9 20/ …

郑州大学一女生私自外出染新冠被立案,校方回应:开除!

近日,郑大一女生私自外出会男友,室友替做核酸,感染新冠被立案一事引发大众关注。5月19日,郑州大学一工作人员回应此事称,该私自外出女生已经被自动开除,对室友的处罚要等警方进一步的调查结果,“…

Spring Boot 2.x基础教程:构建RESTful API与单元测试

首先,回顾并详细说明一下在快速入门中使用的Controller、RestController、RequestMapping注解。如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下快速入门的内容。 Controller:修饰class,用来创建处理http请…

剑指Offer - 面试题11. 旋转数组的最小数字(二分查找)

1. 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1&#…

核酸检测机器人来了!体验者:捅的很温柔

编 | 袁榭、桃子源 | 新智元5月21日,上海人工智能研究院宣布「SAIRI赛瑞」智能核酸采样车2.0问世,仅需30秒便可完成一次采样。在新冠流行持续不断、核酸检测逐渐广域常态化的当下,不止一家机构在开发核酸检测的机器人系统2022年5月21日&#…

AI作画新高度!谷歌发布imagen,效果惊艳全场

文 | 梦晨 鱼羊 发自 凹非寺源 | 量子位在让AI搞创作这件事上,谷歌和OpenAI正面刚起来了。这不,震惊全网的DALLE 2才新鲜出炉一个月,谷歌就派出名为Imagen的选手来打擂台。直接上图对比,左边是谷歌Imagen选手眼中的“猫猫绊倒人类…

Spring Boot 2.x基础教程:配置文件详解

在快速入门一节中,我们轻松的实现了一个简单的RESTful API应用,体验了一下Spring Boot给我们带来的诸多优点,我们用非常少的代码量就成功的实现了一个Web应用,这是传统的Spring应用无法办到的,虽然我们在实现Controlle…