作者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/m.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