白話人工智能:深度學習訓練、移動端推理框架介紹
開始學習深度學習的話,框架的選擇是個很重要的事情 (畢竟調包的居多)。這麼多框架我們怎麼選擇,跟着谷歌的 TensorFlow?不對,學長說學術界 PyTorch 纔是老大,在手機上怎麼跑啊。板子帶不動阿。。。。呃呃呃呃,好的,身爲一個半吊子的算法工程師,阿 chai 今天給大家嘮嘮這些框架都是什麼,聽了起碼不會那麼迷茫 (其實可以都試試)。阿 chai 首先強調一點,只是自己的使用感悟,並不全對也不存在歧視某個框架,由於面向初學者,白話也比較多
今天文章中涉及的電子書資料在文末的百度網盤鏈接中,可以結合阿 chai 給出鏈接中的視頻或文檔去學習
算法汪的工具
算法工程師有很多便利的數據分析工具,主要是分爲以下三類。
自己造輪子 (大腦最好的工具)
最早的算法工程師是自己造輪子,這裏不僅是幾個算子重構的 API,“上古時期” 的很多算法工程師是直接在硬件上搞 (軟硬通喫),是真的 “全棧”。可以參考任天堂最早的遊戲機,40k,包括媒體素材的壓縮,真的強。
集成環境的開發工具
後來算法工程師非常迷戀集成開發環境的工具,因爲很多算法人員是數學出身沒他們對於複雜的計算機、電子知識並不擅長,所以需要一個包羅萬象的東西。從事工科的小夥伴應該瞭解一些例如 Matlab,真的是銀河系都能模擬,啥都能幹,隨便幾個指令就能整出來一個仿真。但是這種工具都有一個致命的問題,體積太大 (MatLab 現在十幾個 G),不容易部署。
Matlab
靈活的工具包
靈活的工具包就是我們開發的時候使用的各種庫、模版之類的,比如我們經常聽到的 OpenCV、Eigen、CUDA 等等,我們今天也是重點介紹深度學習中的各種包包。
深度學習煉丹框架集合
在找框架之前,建議先看看一些深度學習的數學基礎並且買一本花書 (電子版在網盤),花書可以慢慢看,着急也看不懂。再次強調,深度學習是 AI 的一個小分支,別上頭,數學和解決實際問題纔是最重要的。
Theano
Theano 是 07 年左右開發的一個多維數組的計算庫,支持 GPU 計算,當時很多人當成 “支持 GPU 的 Numpy”,底層優化的非常好,支持導出 C 的腳本。
-
出生地:蒙特利爾大學
-
特點:計算圖、Python+Numpy、源於學術界
-
主要調包語言:Python
-
評價:很臃腫、不支持分佈式、被後面的 TensorFlow 打擊的很大
-
入門推薦:絕對不建議,真的要用的話,先學習別的框架再看 Github 就行了
-
推薦資料:https://github.com/Theano/Theano
Caffe/Caffe2(部署也很強)
Caffe 是頂級高校 UCB 的賈揚清博士開發的,主要是適用於深度學習在計算機視覺的應用。使用 Caffe 做算法代碼量很少,經常就是修修改改就能用,神經網絡模型的管理非常的方便,而且算是比較早的部署在各種落地場景中。Caffe2 可以理解爲一個新版本的 Caffe,但是有很多不同,Caffe2 後來併入了 PyTorch。
-
作者:UCB 賈揚清博士
-
特點:計算圖、部署方便、訓練方便、cuDnn 與 MKL 均支持
-
主要調包語言:Python、Matlab 腳本、C++
-
評價:卷積人的大愛啊、環境不好配置、感覺偏底層、Caffe2 還是 PyTorch
-
入門推薦:不是很建議,真的想了解可以先入門 PyTorch
-
推薦資料 (官方真的很棒):http://caffe.berkeleyvision.org/
Tensorflow1.x
TensorFlow1.x 是谷歌在 16 年正式發佈的深度學習框架 (感覺像 Theano),中間包含了很多類似 Numpy 的算子、深度學習常用算子以及已經很多現成的神經網絡模型,支持在 GPU 上訓練,不用自己整 CUDA 腳本。並且隨着發展已經推出了一個整體的模型庫以及各個落地場景的便捷工具,例如 CV、NLP、GAN 等模型庫。
-
出生地:Google
-
特點:計算圖、分佈式訓練效果強、底層 C 構建速度快,生態強大
-
主要調包語言:Python、C/C++、JS
-
評價:比 Theano 好用、API 混亂、靜態計算圖很多人不習慣、部署超級方便
-
入門推薦:硬件與底層開發的可以試試,不建議小白搞
-
推薦資料:https://www.bilibili.com/video/BV1m7411d7kT?p=4
Keras
Keras 可以當成一種高級 API,他的後端可以是 Theano 和 tensorFlow(可以想成把 TF 的很多打包了),最早是源於一個大佬想自己開發一個框架自己用,後來開源了。由於是高級 API 非常的方便,非常適合科研人員上手。
-
作者:Google AI 研究人員 Francois Chollet
-
特點:生態強大、入門爽歪歪、代碼量少 (重點)
-
主要調包語言:Python、C/C++、JS
-
評價:太適合入門了、速度有點慢、版本得匹配後端框架的版本
-
入門推薦:強推入門首選,但是後續一定要看看算法的底層是怎樣工作的
-
推薦資料 (電子書在網盤中):https://www.bilibili.com/video/BV1fK4y147rp?from=search&seid=10831567169106627566
MXNet
-
出生地:算是社區吧
-
特點:計算圖動態圖都支持、有高級 API、速度快、部署方便
-
主要調包語言:Python、C/C++、JS(js 用的相對少)
-
評價:一定意義上是國人的框架、小團體整的社區維護、文檔少生態不行
-
入門推薦:一般般吧,我覺得作爲第二個比較好。
-
推薦資料 (非常適合小白):https://zh-v2.d2l.ai/index.html
PaddlePaddle
-
出生地:百度
-
特點:計算圖動態圖都支持、有高級 API、速度快、部署方便、有專門的平臺
-
主要調包語言:Python、C/C++、JS
-
入門推薦:如果沒有卡那就非常適合,如果算力不缺,建議先看看 PyTorch,當讓也可以 PaddlePaddle。
-
推薦資料 (Paddle 的官網教程太完美了):https://www.paddlepaddle.org.cn/tutorials/projectdetail/1323545
CNTK
-
出生地:微軟
-
特點:非常嚴謹、語音上有一些優勢、難度有點高
-
調包語言:C++、Python
-
評價:語音上不錯呀、微軟推不下去了、感覺不如 TensorFlow、有點復古
-
入門推薦:不建議,看看就好。
-
推薦資料 (還是官方吧):https://github.com/Microsoft/CNTK/wiki/Tutorial
PyTorch
-
出生地:FaceBook
-
特點:生態強大、入門爽歪歪、代碼量少 (重點)
-
主要調包語言:Python、C/C++
-
評價:入門很快、速度有點慢、部署很垃圾、學術界的霸主
-
入門推薦:想要做學術的童鞋絕對首選,幾乎現在頂會論文的代碼都是這個框架寫的,不過想要做部署的還是看看 TensorFLow 或者 PaddlePaddle 吧。
-
推薦資料 (非常適合小白):https://zh-v2.d2l.ai/index.html
ML.NET
-
出生地:微軟亞洲研究院
-
特點:生態強大、包羅萬象、.NET 的伴侶
-
主要調包語言:C#
-
評價:入門還行、C# 有救了、比 CNTK 好、想去微軟可以看看
-
入門推薦:一般般,因爲這個是一個很大的平臺,可以先學別的,然後有. NET 的需求再瞭解。
-
推薦資料:微軟官網寫的超級的詳細,由於阿 chai 直接看的官方文檔,所以推薦這個。
TensorFlow2.x
TensorFlow 出 2.x 了,有點大器晚成,靜態圖雖然好用但是被動態圖搶了市場啊,有點慘。他支持了動態圖,並且把 Keras 當成自己的高級 API,所以使用 2.x 的小夥伴,注意自己 import 後面怎麼寫,呵呵呵。有一說一,2.x 確實好用,也支持 1.x,但是出的晚沒辦法啊。
-
出生地:Google
-
特點:計算圖 / 動態圖、高級 API 超級方便、底層 C 構建速度快,生態更加強大
-
主要調包語言:Python、C/C++、JS
-
評價:對標 PyTorch、學術界沒市場了、部署更加的方便
-
入門推薦:建議做工程的小夥伴入門,學術界真的馬上被 PyTorch 壟斷
-
推薦資料一 (北大曹教授):https://www.bilibili.com/video/BV1B7411L7Qt?from=search&seid=12837506722184915875
-
推薦資料二 (沐神):https://zh-v2.d2l.ai/index.html
ONNX(比較特殊)
ONNX 流程圖,其中顯示了訓練、轉換器和部署
-
出生地:有點多,很多大廠一起整的
-
特點:萬能轉換呀
-
主要調包語言:Python、C/C++
-
入門推薦:感覺不用刻意去學習,用到了再看就可以的
-
推薦資料:https://github.com/onnx/tutorials#converting-to-onnx-format
這裏阿 chai 總結一下,如果走學術路線,果斷 PyTorch,如果想走部署,TensorFLow+PaddlePaddle+Caffe,如果是對深度學習感興趣想額外學習,那就 Paddle Paddle 或者 Keras。微軟的框架專業性比較強,所以不是很適合推薦。OneFlow 也是一個非常棒的深度學習框架,但是由於阿 chai 能力有限,使用的較少,不能誤導小白呀。
深度學習移動端推理框架
上面我們講了很多煉丹的框架,但是我們的模型怎樣整到項目中呢,直接用上述的框架雖然可以,但是在嵌入式設備、機器人或者移動設備上就有點問題了。有一些框架是面向算力有限的設備上做模型部署的,接下來阿 chai 給大家介紹一下,自己瞭解的。由於本人能力有限,部署方便可能有的框架沒有說到,畢竟這個工作量太大了,阿 chai 不可能每個框架都去嘗試,嘿嘿。
TensorRT
TensorRT 是 NVIDIA 公司推出的面向 GPU 算力的推理框架,在服務端和嵌入式設備上都有非常好的效果,但是底層不開源。TensorRT 的合作方非常的多,主流的框架都支持。另外 CUDA 之前我們介紹過,所以如果有 GPU 的話,我們可以傳統的算子 CUDA,深度學習搞成 TensorRT 的就行的。
-
出生地:NVIDIA
-
特點:自產自銷 NVIDIA 不多解釋,框架支持很多,生態很棒,穩定性高
-
主要調包語言:Python、C/C++
-
推薦平臺:NVIDIA Jetson 系列的嵌入式、NVIDIA 的 GPU(一條龍)
-
支持模型:TensorFlow1.x、TensorFlow2.x、PyTorch、ONNX、PaddlePaddle、MXNet。
-
入門推薦:非常適合入門,畢竟直接在自己的 GPU 上做測試就行。
-
學習資料:https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html
TF-Lite
TF-Lite 是谷歌針對移動端的推理框架,非常的強大。強大的原因在於 Keras、TensorFlow 的模型都能使用,而且有專門的 TPU 和安卓平臺,這種一條龍的服務讓 TensorFlow 在部署方面還在稱霸。TF-Lite 如果用 Keras、TensorFlow 的模型去轉換一般來說都是腳本直接開搞,自己重構的部分相對少很多。
-
出生地:Google
-
特點:一條龍的服務專屬平臺
-
主要調包語言:Python、C/C++、Java
-
支持模型:Keras、TensorFlow、ONNX
-
推薦平臺:幾乎所有的 ARM 處理器和微控制器 (樹莓派,甚至單片機)、TPU 專享
-
入門推薦:TFboys(TensorFlow 使用者) 的必備,畢竟一條龍,還有機會了解 TPU,非常貼心。
-
學習資料 (文檔):https://tensorflow.google.cn/lite/tutorials?hl=zh_cn
-
學習資料 (視頻):https://www.bilibili.com/video/BV1EK4y177Sn?from=search&seid=12987573843481015049
很多 TFLite 的教學在油管上很多,這裏就不放鏈接了,嘿嘿。
OpenVINO
OpenVINO 是 Intel 的推理框架,一個超級強的推理部署工具。工具包中提供了很多便利的工具,例如 OpenVINO 提供了深度學習推理套件 (DLDT),該套件可以將各種開源框架訓練好的模型進行線上部署,除此之外,還包含了圖片處理工具包 OpenCV,視頻處理工具包 Media SDK。如果是針對 Intel 的加速棒或者工控機上部署真的是非常不錯的。
-
出生地:牙膏廠,嘿嘿
-
特點:面向 Intel 設備的加速,便捷使用,安裝和 SDK 很方便
-
主要調包語言:C/C++、Python
-
支持模型:TensorFlow、ONNX、PyTorch、ONNX、MXNet、PaddlePaddle
-
推薦平臺:自己的電腦、Intel 神經網絡加速棒、Intel 的 FPGA
-
入門推薦:作爲入門的不啊還是不錯的,只是落地場景有點少,畢竟現在是邊緣設備的時代
-
推薦資料:https://docs.openvinotoolkit.org/latest/index.html
這裏說應用場景較少是因爲工業上工控機多但是深度學習模型用的還是少,很多都是傳統的算法,很多落地場景中上 Intel 的處理器並不佔優勢。
CoreML
CoreML 是拼過公司推出針對 ios 以及 macOS 系統部署的機器學習平臺,底層不開源。在蘋果設備上,CoreML 的速度是最快的,但是也只能用於蘋果的設備上。現在開發 apple app 主要是 Swift,受到 Swift 出的特性,真的是各種語言各種粘,很好入門。框架訓練的模型通過 ONNX 均可進行轉換,現在也推出了一些直接轉換的方法,詳細看阿 chai 之前寫的教程:平安夜的平安果,蘋果機器學習框架 CoreML 教程。
-
出生地:Apple
-
特點:面向蘋果設備,專業設備上速度第一,穩定、入門簡單
-
主要調包語言:C/C++、Python、Obj-C、Swift
-
支持模型:TensorFlow、ONNX、PyTorch、ONNX、MXNet、Caffe
-
推薦平臺:iMac、MacBook、iPhone、iPad、AppleWatch
-
入門推薦:針對 Apple 的開發者,業餘選手得買個 MBP
-
入門資料 (阿 chai 整理的):https://mp.weixin.qq.com/s/NfdYtpOLbVdXWZXkwDKKvA
蘋果的框架不是特殊需求不建議上來就學,畢竟操作系統之又詫異,Xcode 配置能讓小白吐血。
NCNN
NCNN 是騰訊推出的推理框架,一定意義上是之前使用非常廣的一個推理框架,社區做的也非常棒,leader 之一是四大卷王的 Nihui 大佬。NCNN 的速度是超過 TFLite 的,但是有點麻煩的是之前得經常自己用 C 去復現一些算子 (框架起步都這樣),現在因爲使用的人數很多,因此算子很多。NCNN 對於 X86、GPU 均有支持,在嵌入式、手機上的表現非常好。
-
出生地:騰訊優圖實驗室
-
特點:面向移動端的加速、手機處理器的加速單元支持很棒
-
主要調包語言:C/C++、Python
-
支持模型:TensorFlow、ONNX、PyTorch、ONNX、MXNet、DarkNet、Caffe
-
推薦平臺:安卓 / 蘋果手機、ARM 處理器設備
-
入門推薦:對於嵌入式或者 APP 開發有經驗的同學絕對首推的
-
推薦教程:https://github.com/Tencent/ncnn
MNN
MNN 是阿里巴巴推出的移動端框架,現在也支持模型訓練,支持 OpenCL,OpenGL,Vulkan 和 Metal 等。同樣的設備,MNN 的部署速度是非常快的,樹莓派 3B 上 cpu 的加速是 NCNN 速度的 3 被以上,而且文檔非常的全,代碼整潔清晰,非常適合開發者食用。
-
出生地:阿里巴巴多部門合作
-
特點:面向移動端的加速、應該是現在速度之最
-
主要調包語言:C/C++、Python
-
支持模型:TensorFlow、ONNX、PyTorch、MXNet、NCNN、Caffe、TF-Lite
-
推薦平臺:安卓 / 蘋果手機、ARM 處理器設備
-
入門推薦:首推的部署推理框架,絕對的好用,在蘋果設備上的速度也很棒
-
推薦教程:https://www.yuque.com/mnn/cn
MNN 框架感覺比 NCNN 穩定一些,而且源碼非常整潔,研究底層也是非常方便。
Tenigne
Tenigne-Lite 是 OpenAILab 推出的邊緣端推理部署框架,OpenCV 官方在嵌入式上的部署首推 Tenigne-Lite。開發團隊中有卷王圈圈蟲坐鎮,現在對於 RISC-V、CUDA、TensorRT、NPU 的支持非常不錯。Tengine 是現在來說感覺安裝環境中 bug 最少的框架,幾乎安按照文檔走不會出問題的。
-
出生地:OpenAILab
-
特點:面向移動端的加速、速度和 MNN 不相上下、對於嵌入式的支持非常好
-
主要調包語言:C/C++、Python
-
支持模型:TensorFlow、ONNX、DarkNet、MXNet、NCNN、Caffe、TF-Lite、NCNN
-
推薦平臺:安卓手機、ARM 處理器設備、RISC-V
-
入門推薦:嵌入式開發的小夥伴還等什麼,幹就完了
-
推薦教程:https://github.com/OAID/Tengine
Tengine-Lite 是個朝氣蓬勃的框架,雖然出的時間並沒有其他框架早,但是框架性能、易用性還是非常適合嵌入式玩家的。
部署的框架也有很多,比如 Paddle-Lite,我們使用的 PyTorch、TF 也能直接部署,但是在移動端效果不佳。華爲海思 NNIE 也非常強大,之前移動端真的快霸主,但是現在受制約芯片停產。其實看了這麼多,大家應該發現,推理框架其實是有針對 的芯片的,比如 Google 的 TPU,部署工作多少就是玩硬件,卷的我們都得全棧啊。
電子書鏈接:
鏈接: https://pan.baidu.com/s/1g8pnMgKmfyHMY9_0Uu3ZlQ
密碼: tw2c
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/Yd013A_b1kO78P3WqzvjPg