作者DiscreteMath (离散数学)
看板DataScience
标题[问题] 模型产品化时 效率与加速问题
时间Tue Jan 28 01:18:05 2020
各位前辈好,小弟最近在做一个side project,目标是做成一个小的prototype
由於是自行摸索的,所以遇到一些问题,希望能得到大家的建议
用一句话描述目前技术与瓶颈,就是我是使用wavenet来解决音讯相关的问题,所以有极
高的real-time需求
目前使用稍大的模型已经取得初步成果,也成功的把模型转成C++,接下来的问题就是如
何对模型进行"瘦身"
让小弟将问题一一陈述:
1. framework的选用 (in C++)
我是使用pytorch,他对於C++相关的文件支援其实我觉得很够用了,我没花多少时间就成
功deploy。TF似乎在某版後就需要使用他们自己的编译工具,
考量到我还要和其他框架合并,而且C++并不那麽熟悉,libtorch可以自己写CMAKE其实方
便很多。
还有就是写pytorch真的很养生XDDD
第一个问题就是,同样的graph,TF和pytorch在C++效能会差很多吗?
又或是我有看到有人用Eigen重新刻一个,也耳闻业界似乎会使用C/C++重写,有这方面的
学习资源,建议或是经验吗?
或是有好的Github repo能参考吗?
那重刻的效能大概会提升多少?
2. GPU
考量到使用场景,应该不会使用GPU,希望是"仅使用CPU"的情况下去想如何加速,那CUDA
加速似乎就出局了(?
其实目前应该是不希望藉由额外的硬体来做加速,但如果有硬体(音效卡,晶片,GPU)
方面加速的经验或是建议,还是非常欢迎喔!
3. Model Pruning
这词也是听朋友说的XD 由於以往在硕班,如果train不起来performance不好就是加深加
大,其实对於模型的效能完全不考虑。
有听说浮点数换整数,还有运用一些手法来抽换掉不重要的filter等等
网路上也蛮多讨论的,想知道该从哪个方法下手呢?
4. Parameter Searching
例如想验证设计的架构是否正确,可以先使用极小笔的资料先overfitting
那在搜寻"最小"or"最少参数"模型的场景,有没有类似的理念,或是哪些有效率的方法呢
?
----- 分割线 -----
简而言之,就是小弟我太菜啦XDDD
刚毕业进入业界,才发现要把Deep Learning落地,其实坑还不少
监於公司人不多,而且还没有这方面的强烈需求(未来可能会有)
但自己又蛮想练功的,所以想徵询这边各位前辈的意见
问题有点多,有些领域和技术还是懵懵懂懂,还请各位版友不吝指教
谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.82.91.252 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DataScience/M.1580145487.A.0B9.html
1F:推 yoyololicon: 用libtorch没啥问题 要跑real time wavenet 可以看 01/28 09:33
2F:→ yoyololicon: 看fast wavenet, 还有百度deepvoice的paper ,在实01/28 09:33
3F:→ yoyololicon: 做上有很详细的介绍,基本上就是一直cache以及做mul01/28 09:33
4F:→ yoyololicon: tiprocessing01/28 09:33
谢谢,稍微扫过paper
没有理解错的话似乎大部分是在解auto regressive (AR)的问题
後续的研究似乎也都是想把AR拿掉。但如果已经没有AR,像是这篇
https://arxiv.org/pdf/1706.07162.pdf
是一次处理一个区块,那有办法再加速吗
(例如针对dilated conv等等)。
还是我有理解错误?
5F:推 gary9630: pruning的话可以参考ICLR2019 best paper那篇 winning l01/28 15:11
6F:→ gary9630: ottery ticket 做法蛮直觉的01/28 15:11
谢谢推荐!会从这篇追下去的
7F:→ truehero: 菜鸟其实不建议libtorch开局,现在坑多01/28 20:46
8F:→ truehero: ㄧ些简易推理框架 像ncnn mnn相对简单01/28 20:47
9F:→ truehero: 模型压缩或量化也都有具体实现可参考01/28 20:48
嗯嗯,其实我踩了不少xD
像是stft转c++会出错 官方甚至没有istft
然後还需要一些dependencies 像是intel mkldnn等等
前辈提到的架构,我会再找时间研究看看。谢谢!
※ 编辑: DiscreteMath (111.82.123.163 台湾), 01/28/2020 23:06:25
10F:推 yoyololicon: 就我所知,拿掉AR直接平行运算出各个sample的wavene 01/29 11:59
11F:→ yoyololicon: t,不用特别优化就比AR版本的快;但主观评分AR版本 01/29 11:59
12F:→ yoyololicon: 的分数大体上都比较高,要得到和AR版本compatible 01/29 11:59
13F:→ yoyololicon: 的表现,模型参数会肥上非常多,所以跑realtime 也 01/29 11:59
14F:→ yoyololicon: 不见得有优势 01/29 11:59
15F:推 acctouhou: 楼上那篇pruning的文章主要是在说pruning後的结构在训 01/29 12:03
16F:→ acctouhou: 练时有更好的表现跟这一篇想做的事无关吧? 01/29 12:03
17F:推 yoyololicon: 非AR类比较有名的模型;waveglow, parallel wavenet 01/29 12:03
18F:→ yoyololicon: , clarinet 01/29 12:03
19F:→ yoyololicon: AR类除了wavenet,WaveRNN和LPCNet减少了参数量,并 01/29 12:07
20F:→ yoyololicon: 设计一套predict sample的方法,会比wavenet更容易 01/29 12:07
21F:→ yoyololicon: 跑realtime 01/29 12:07
22F:→ yoyololicon: 我原先提的两篇paper 主要在最大化wavenet inferenc 01/29 12:10
23F:→ yoyololicon: e 时的运算资源,并没有更改原本的架构 01/29 12:10
24F:推 sma1033: 有神快拜 01/30 23:15
25F:→ yoyololicon: 学弟不敢>< 01/30 23:32