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