深度學(xué)習(xí)框架大PK:TNN決戰(zhàn)MNN,ncnn依舊經(jīng)典
近年來,開發(fā)者社區(qū)中,「開源」成了新流行趨勢。
尤其是深度學(xué)習(xí)框架,自騰訊2017年將ncnn開源之后,各大AI實驗室都「慷慨」的將自己的框架開源,以實現(xiàn)較為快速的創(chuàng)新。
今年6月10日,騰訊又宣布基于ncnn設(shè)計的深度學(xué)習(xí)推理框架TNN也將開源。TNN開源后,許多開發(fā)者都將其與ncnn,MNN等開源框架作比較。
TNN性能略勝一籌,「劍指」移動端;MNN通用性表現(xiàn)更佳
TNN設(shè)計之初一方面是為了提高算力,另一方面強調(diào)了對移動設(shè)備的支持。不然用戶就沒必要放棄生態(tài)很好的MNN和大家都熟悉的ncnn來使用TNN了。
TNN是基于ncnn開發(fā)的,對其進行重構(gòu)升級。除了算力顯著的提升以外,基于TNN開發(fā)者還可以將深度學(xué)習(xí)算法移植到手機端,開發(fā)移動端的AI產(chǎn)品。
為了比較MNN,ncnn和TNN的性能,在以下的主流平臺做了測試:
可以看到性能方面TNN還是有優(yōu)勢的。但是有些環(huán)境下的測試其實和MNN還是不相上下,阿里的開發(fā)團隊也說,TNN的性能激勵了MNN的提高,但相比當(dāng)年2000ms到700ms的飛越還是差點意思。
TNN性能提升的關(guān)鍵是低精度計算,之前講的沒有辦法移植到移動端的本質(zhì)原因是手機處理器比較薄弱,因此框架適應(yīng)中低端機是非常重要的。TNN在這方面做的很好,在中低端機上的性能提升約20%。
通用、輕便也是TNN框架的亮點之一,解決了一部分不同框架間的模型轉(zhuǎn)換問題。但是TNN的模型轉(zhuǎn)換需要基于ONNX,而不像MNN那樣直接支持。操作上只是多了一步,通用性上又大打折扣了。
通用性上MNN的優(yōu)勢也不容置喙,MNN在通用性上下了很大的功夫,你看支持的算子數(shù)目就可以知道這算是MNN的一個工作重點。
算子實現(xiàn)上,MNN在計算后端的支持也是最廣的。除了ARM v8.2,MNN在GPU算子的支持上也遠超于其他兩個框架。
再講講開源的一個重要問題:代碼可讀性。盡管CPU的代碼框架上,TNN和ncnn非常像,但是風(fēng)格和結(jié)構(gòu)遠超ncnn,更加的易讀。這點MNN也做得很不錯,MNN和TNN在代碼各結(jié)構(gòu)上還是有很多相似點。這些相似點讓MNN到TNN做代碼遷移變的沒有那么復(fù)雜。
總的來說,ncnn作為2017年第一個開源的框架,非常經(jīng)典。在TNN和MNN的性能差距不大的情況下,選擇哪個框架就屬于因人而異的事情,各有各的優(yōu)勢。
從ncnn開始,深度學(xué)習(xí)框架開源已成大趨勢
雖然企鵝最近因為一些花邊新聞老是被調(diào)侃,但是深度學(xué)習(xí)框架開源這方面,真的要感謝這個傻白甜鵝在2017年7月開源的ncnn。幾乎開啟了深度學(xué)習(xí)框架開源的「熱潮」。
在業(yè)界各方人士三年不懈努力(內(nèi)卷)下,VGG16 在 RK3399 上單核心的推理速度從 2000 ms+ 壓榨到了 700 ms+。這之中也正是因為開源,才能夠集眾人智慧,得到如此卓越的性能提升。
ncnn作為元老級別的框架,本身就是為移動平臺優(yōu)化的高性能神經(jīng)網(wǎng)絡(luò)推理計算來開發(fā)的。從設(shè)計之初,ncnn就在手機上進行部署和使用深思熟慮。ncnn當(dāng)前在許多騰訊應(yīng)用程序中使用,包括我們熟悉的微信、QQ等。
MNN也是具有重大意義的一個開源框架。MNN是一個高效,輕量的深度學(xué)習(xí)框架。它支持深度模型推理與訓(xùn)練,尤其是在端側(cè)的推理與訓(xùn)練性能在其中領(lǐng)先領(lǐng)先。目前,MNN已經(jīng)在阿里巴巴的手機淘寶,手機天貓,優(yōu)酷,釘釘,閑魚等20個應(yīng)用中使用。
MNN對于性能的提升有著卓越的貢獻,因此也成為開發(fā)者的框架首選。
TNN作為2020年鵝廠開源的一款移動端推理框架,具有高性能、輕量級的特點,擁有跨平臺、高性能、模型壓縮、代碼裁剪等眾多優(yōu)勢。目前TNN已經(jīng)在手機QQ、微視、P圖等應(yīng)用中落地。
除了這三個主流的框架,還有一些也經(jīng)常被使用的框架,例如PPL。但是PPL現(xiàn)在還沒有開源,可能商湯還是想「有所保留」的。其實ncnn開源的時候PPL就出來說過他們的性能更好,PPL其實也是被開發(fā)者們經(jīng)常使用的框架之一了。
百度開源了一個叫做Padle-Lite的框架。Paddle-Mobile是一個開放源代碼的深度學(xué)習(xí)框架,旨在簡化在移動,嵌入式和IoT設(shè)備上的推理。它與PaddlePaddle和其他來源的預(yù)訓(xùn)練模型兼容。
開源框架甚至有雷總的身影,小米主體業(yè)務(wù)還是在硬件方面,開源框架確實很稀奇。MACE是一個深度學(xué)習(xí)推理框架,針對Android,iOS,Linux和Windows設(shè)備上的移動異構(gòu)計算進行了優(yōu)化。
最后,方便大家使用,放上開源框架大禮包:
ncnn:https://github.com/Tencent/ncnn
MNN:https://github.com/alibaba/MNN
TNN:https://github.com/Tencent/TNN
PL:https://github.com/PaddlePaddle/Paddle-Lite
MACE:https://github.com/XiaoMi/mace