沒有依賴庫也能跑機器學習模型!推薦一個強大工具m2cgen
曉查 發自 凹非寺
量子位 報道 | 公眾號 QbitAI
m2cgen(Model 2 Code Generator)是一個輕量級代碼生成器,它可以將訓練好的機器學習模型轉換成無需依賴庫的本地代碼。目前支持轉化為Python、Java、C三種語言。
比如你用PyTorch訓練了一個機器學習模型,但是需要把它部署在一台沒有安裝或者不兼容PyTorch的設備上,應該怎麼辦?這時候m2cgen能幫你解決問題。
有人說,這不就是另一種形式的ONNX嘛?No!
ONNX能做的是將PyTorch訓練的模型轉換到Caffe2上,代碼只是換了一種依賴庫。而m2cgen生成的代碼不需要在本地安裝任何依賴庫!
無需依賴庫
那麼給計算機安裝上依賴庫不就好了嗎,為何還要這麼麻煩?
如果你在實際中遇到以下幾種情況:
生產環境沒有相應的語言,比如缺失Python runtime;
設備性能不夠強大,比如微控制器(MCU),無法安裝框架和依賴庫,而且數據需要在本地計算,不能傳回遠程伺服器;
對預測速度有要求,需要直接調用參數值而不是依賴庫;
這時候m2cgen就能派上用場,只要設備能運行Python、C、Jave當中的任何一種語言,你就能直接部署訓練好的機器學習模型。
運行原理
理論上,訓練好的模型已經有了擬合參數的數值,運行起來也只需要矩陣乘法和一些激活函數。可是為了運行它們,卻要先安裝體積超過GB的框架和依賴庫。
m2cgen項目的實質,是以某種方式將模型的權重、偏置分解為一個額外的依賴或文件,在非常大的模型上實現「代碼」和「數據」之間的分離。
總的來說,替代方法就是使用底層的編程語言庫,來做一些矩陣數學運算。
目前m2cgen支持的模型種類包括:
使用方法
m2cgen的安裝非常方便,直接用pip:
在轉換Python代碼前,需要用import導入m2cgen:
然後在終端用m2cgen命令轉換代碼:
pickle_file是你要轉換的源代碼文件,必填選項—language後面填入你的目標語言,比如上面的Python代碼,你想轉換成Java,就輸入:
然後它就變成了一串Java代碼:
傳送門:
開源地址:
https://github.com/BayesWitnesses/m2cgen/
與m2cgen類似的代碼轉換項目sklearn porter,能將訓練好的scikit-learn模型轉換成Java、C、JavaScript、Go、Ruby代碼:
https://github.com/nok/sklearn-porter
※吳恩達也帶不動了?Drive.ai被曝作價2億美元尋求出售
TAG:量子位 |