當前位置: 華文問答 > 科學

知乎大佬們好,我懂深度學習演算法,目前想往模型部署最佳化這個方向發展,請問學習路線是什麽?

2020-08-01科學

做了五年深度學習演算法部署的人來答。

首先 要明白的是你是只關心 "部署能不能跑通" 還是更關心 "部署跑通後的繼續最佳化" ,如果你只是關註 "部署能不能跑通",那很簡單套用下網上的範例就行,看到這裏你就可以自行 `exit;` 返回就好;如果你是屬於更加關註 "部署跑通後的繼續最佳化",那就繼續往下看。

對於深度學習的部署,可能會有種 "牛頭不對馬嘴" 的說法,就是 "記得用 C++ 來部署深度學習模型哦,用 C++ 效率高"。 所謂的 "用 C++ 部署深度學習模型" 的說法過於籠統 ,這麽個說法的朋友的理由一般就是 "python 效率低、C++ 效率高,那就用 C++",然而這種說法在演算法部署領域 是非常不專業的 。演算法部署或者也可以稱為推理最佳化,主要是在於先要看部署硬體、看目標平台來選擇不同的推理框架、推理引擎,而不在於說是使用 Python 還是用 C++,當然一般就是 C++ 了,這種其實基本就是預設都不用說。

打個比方,比如有個計畫需求,讓你在輝達的 GPU 上去部署一個深度學習模型,上 TensorRT 就是很自然的反應;再比如部署的目標平台是英特爾的工控機哦,那是不是可以考慮 OpenVINO;再比如要是在國產 AI 算力上部署呢,那就需要用廠商提供的推理引擎去做部署了,諸如此類...

上面說的是推理框架、推理引擎層面,這個層面其實是會 "通用性較低" 的,基本就是各家有各家的推理引擎,這個時候有一些 "願景偉大" 的框架就出來了,其中最有代表的就是天奇 @陳天奇 的 TVM,用編譯最佳化的方式致力於前、特別是後端硬體的統一,另外也有谷歌的 MLIR 也都在做這個事情,你可以了解。

除了 "不通用" 的推理引擎,演算法部署還有一些通用的技術,比如前端模型轉換、算子融合、量化、蒸餾、剪枝等,這些是與硬體平台無關的。比如量化,你完全是可以先在 CPU 做,拿到縮放 Scale 也就是所謂的校準表就行;比如前端模型轉換,Pytorch 轉 onnx 是家常便飯,雖然簡便但並不簡單,其中註意事項可不少,另外還有特殊如 pytorch 轉 caffe、caffe 轉 onnx 等,當然這些在這個年代越來越少了,還是 Pytorch 轉 onnx 居多。這些也是需要學習的。

另外還有演算法本身的知識,比如 CNN 模型的計算密集型最佳化、比如 Transformer 大模型的訪存密集型最佳化,都是不一樣滴。

以上例舉了一些深度學習部署方面的知識,你可以看到,絕對不止於是選擇 Python 或 C++ 這種程式語言層面的事情。

我之前也寫過挺多關於演算法部署、推理加速方面的技術分享,可供參考, 如果你感興趣的話也墻裂推薦關註我 方便獲取更多相關高品質技術分享,先發更新在我的公眾號平台

當然,上面這些我只是拿了我 "寶藏" 中的小部份。

如果你願望強烈想直接跟我溝通,可以點選下面的咨詢,