轉眼間咱們的技術博客欄目也已經發布到第23期啦,小Mo已經爲你們介紹了各類領域許多不一樣的機器學習算法與實現。以前呢,咱們的工做人員也與Mo-AI俱樂部的你們作了小小的調研~但願可以作出更多你們想要看到的主題!python
那第一個就是你啦,很是感謝這位朋友提給咱們的意見,今天咱們就來看看,在Mo平臺上,怎麼部署一個訓練好的模型,可以方便你們直接調用。算法
在工做臺中新建一個項目並進入開發頁面,要部署的話,必定是選擇新建項目。數組
在當前新建的項目中,點擊左側 Files
,顯示了當前工做目錄下的文件和文件夾。markdown
results
文件夾,用於存放模型與checkpoints,其中的 tb_results
用於當使用 TensorBoard
功能時存放可視化數據。_OVERVIEW.md
markdown文件,用於展現項目說明。_README.ipynb
爲介紹文檔。coding_here.ipynb
或新建一個notebook
(可參考幫助文檔中的基本頁面中的開發環境
部分)。來開始咱們的代碼吧。import os import sys from sklearn.externals import joblib from sklearn.cluster import KMeans
通常機器學習算法包括訓練和預測兩部分,通過訓練過程會產生一個模型文件,在預測時調用訓練好的模型文件進行預測。因此咱們在程序中分爲 train,predict 和 load_model 三種方法,kmeans 聚類算法主程序以下。網絡
# 定義一個kmeans聚類模型,注意設置傳參接口 class howtodeploymodulemodel(object): # 模型初始化函數,本例中參數皆爲傳參 def __init__(self, conf={}): ''' :param conf: ''' pass # 模型訓練函數 def train(self, conf={}): ''' :param conf: :return: ''' # 獲取傳入參數 n_clusters聚類數 random_state隨機狀態 n_clusters = conf['n_clusters'] # value_type: int # description: number of clusters random_state = conf['random_state'] # value_type: int # description: RandomState instance or None if 'file_path' in conf: file_path = conf['file_path'] # value_type: str # description: file path of data file data = np.loadtxt(file_path, dtype=np.str, delimiter=",").astype(np.float) if 'data' in conf: data = conf['data'] # value_type: np.array # description: data for train # 定義模型 kmeans = KMeans(n_clusters=n_clusters, random_state=random_state).fit(data) # 保持模型 if 'save_path' in conf: save_path = conf['save_path'] # value_type: str # description: save path of trained model s = joblib.dump(kmeans, save_path) else: s = joblib.dump(kmeans, self.checkpoint_dir+'/howtodeploymodulemodel.pkl') return '訓練完成' # 模型預測函數 def predict(self, conf={}): ''' :param conf: :return: ''' data = conf['data'] # value_type: np.array # description: data for predict if 'save_path' in conf: save_path = conf['save_path'] # value_type: str # description: save path of trained model kmeans = self.load_model(save_path) else: kmeans = self.load_model() return kmeans.predict(data) # 載入模型 def load_model(self, file="./results"+"/howtodeploymodulemodel.pkl"): ''' :param conf: :return: ''' kmeans = joblib.load(file) return kmeans print('kmeans聚類算法類定義完成')
kmeans聚類算法類定義完成app
設定訓練模型的保存路徑,訓練數據等參數,訓練產生算法模型文件。dom
conf = {"save_path": './results/xx.pkl', "data":[[1,1,1],[2,2,2]],"n_clusters":2,"random_state":0} print(conf) module = howtodeploymodulemodel(conf) result = module.train(conf) result
'訓練完成'機器學習
conf = {"data":[[1,1,1]], "save_path": './results/xx.pkl'} print(conf) module = howtodeploymodulemodel(conf) result = module.predict(conf) result
如今,咱們的模型就已經測試完成啦!ide
固然, 咱們這裏只是一個示例,模型沒有很大, 訓練的 epoch 也很小,效果提高不明顯. 若是你使用的模型模塊是基於深度神經網絡的,而且網絡結構很大,那麼訓練時間會比較長,這時候能夠建立 job 並使用 GPU 來加速訓練過程,詳見這裏函數
如今就要開始最重要的步驟了!也就是部署步驟!在本例中,咱們但願其餘人在調用咱們的服務後可以直接使用咱們訓練好的模型進行預測,輸入時待遇測的值,輸出是聚類結果。
咱們的功能代碼在 Notebook 調試完成後就能夠點擊左側的部署圖標,按照指引部署應用。
在 Notebook 中點擊左側欄中的部署圖標,進入部署頁面。
handle函數是應用函數的的主函數,也是把輸入和輸出參數對應起來的接口函數,是部署以後其餘人調用你的服務的處理方法。選中 Cell 代碼的地方,點擊第一步的「插入」按鈕插入handle函數。
能夠看到,在咱們的notebook結尾處,新增了一個handle函數。這就是部署最重要的步驟啦!
handle
方法,就是部署完成後,其餘人調用咱們整個項目時會的處理方法。好比說,在本例中,若是但願其餘人在調用咱們的服務後可以直接使用咱們訓練好的模型進行預測的話,在handle函數中就應該調用模型的預測函數 module.predict
,返回則應該是 result
, 以下所示:
def handle(conf): module = howtodeploymodulemodel(conf) result = module.predict(conf) return {'ret1': result}
在如今版本中,咱們的輸入輸出參數能夠選擇如下變量,本例中,參數都放在 conf
字典中。
value_type :img, video, audio, str, int, float, [int], [str], [float]
你們寫好了 handle
函數,一樣也要在notebook中測試一下哦!
整理好 handle 函數以後,點擊第二步的"開始"按鈕,開始準備部署時須要的文件。
而後咱們會進入準備文件的第一步,代碼選擇。在這一步中,咱們必定要注意,訓練用代碼和測試用代碼不用勾選進去哦。
第二步,代碼預覽步驟,系統會將咱們勾選的notebook cell 轉化成python文件,若是有不須要的部分能夠回到原文件進行修改。
第三步定義參數,這一步就會定義咱們的輸入和輸出。對應咱們的例子,咱們會:
data
,它是一個int數組,表明着輸入一個點的三維座標。ret1
,它是一個int型整數,表明咱們輸入的所屬類別。最後,在參數預覽步驟,咱們能夠查看咱們的參數定義,同時也能夠查看咱們最後服務接口的預覽:
完成全部以上步驟後,點擊第3步的 部署
按鈕進行項目部署。
在部署的時候,系統會自動生成 handler.py
文件和 app_spec.yml
配置文件,你能夠選擇須要發佈的文件或勾選發佈開發版本或正式版本(開發版本部署後只有全部者可使用,正式版項目爲公開的,全部人可見),而後點擊「完成」,進行部署。
在這裏,咱們先選擇發佈 dev
開發版本,進行自測調整。
在短暫的等待後, 回到應用的詳情頁面, 在右上角會有部署成功的通知。恭喜你!你已經完成了你的第一個APP的部署。回到詳情頁,咱們也能夠看懂如今已經有使用界面啦!
咱們能夠選擇在部署欄裏點擊測試項目
,在網頁中輸入參數,運行獲得輸出結果,若是發現問題,可再回到項目中進行調試。
測試完成沒有問題的話,咱們就能夠從新部署一個公開版本啦~
這樣就公開項目而且作出本身的說明哦。
你們來本身嘗試着部署本身的機器學習模型吧!
項目地址:https://momodel.cn/explore/5e9577f194a447b8519ae492?type=app
Mo(網址:https://momodel.cn) 是一個支持 Python的人工智能在線建模平臺,能幫助你快速開發、訓練並部署模型。
近期 Mo 也在持續進行機器學習相關的入門課程和論文分享活動,歡迎你們關注咱們的公衆號獲取最新資訊!