一、寫在前面
公司正好有這個需求,故我這邊簡單接受進行模型的部署和demo程式的編寫,順便學習瞭解整個大模型的部署全流程。這篇部落格會簡單提到大模型部署的全流程,側重點在推理這裡。並且這篇部落格也是結合之前的MNN部署流程來編寫的,最好連下來一起看。
MNN框架在WIN10上的部署
MNN框架在Win10上的部署,支援OpenGL和Vulkan
關於MNN工程框架編譯出來的靜態庫和動態庫的使用
二、 大模型部署全流程概述
幾乎全部的大模型部署流程都是一樣的步驟(好吧是我瞭解的是這樣的)
- 訓練
- 轉換
- 推理
- 訓練:根據需要實現的目標獲取資料集,對資料集預處理,利用不同的框架進行訓練(TensorFlow、PyTorch、PaddlePaddle、MNN等等)
主流推薦:TensorFlow、PyTorch、PaddlePaddle,因為推行時間長,技術成熟,訓練出來的效果也較好。並且其他的框架也同樣有轉換工具可以將模型轉換為適合自身框架的模型格式,所以應該不用太擔心這方面的使用和操作。
訓練基本步驟:
(1)資料收集:(收集足夠多的目標模型的功能資料,用於模型訓練)
(2)資料預處理;(清洗、資料歸一化、資料增強等等)
(3)選擇模型架構(根據問題的性質選擇合適的機器學習演算法或神經網路架構)
(4)選擇最佳化演算法(選擇一個演算法來調整模型的引數,如梯度下降、Adam等)
(5)配置訓練引數(設定學習率、批大小(batch size)、迭代次數(epochs)等)
(6)模型驗證(使用資料當中的驗證集評估模型)
(7)模型評估
對於MNN框架來說,雖然官方也提供了訓練的工具鏈,不過最好還是使用較為成熟的框架。
- 轉換:將目標模型轉換為適合自身部署框架的模型結構,一般來說框架官方會提供相應原始碼來幫助使用者實現模型的轉換
一般來說包含:模型壓縮、量化、裁剪等等,用於減小模型體積、提高推理速度等等。在使用模型轉換工具的時候,會有相應的引數可以進行配置。
對於MNN框架來說,同樣提供了轉換工具(MNNConvert),以供用於將其他框架訓練的模型轉換為.mnn字尾的模型檔案。
- 推理:是模型對新輸入資料做出預測的過程,也是對大模型的應用。需要多個不同流程來幫助模型實現快速且準確的響應。
主要流程囊括:
- 前處理
在模型進行推理之前,需要對輸入資料進行處理,以確保資料格式和範圍與模型訓練時一致。這可能包括資料清洗、歸一化、編碼等步驟 - 推理核心
是模型實際進行預測的部分。根據模型型別,這可能涉及到前向傳播、特徵提取等操作 - 後處理
推理完成後,輸出的結果可能需要進一步的處理才能用於實際應用。例如,分類模型的輸出可能是機率分佈,需要轉換為具體的類別標籤
三、機器學習模型部署推理流程例項
這裡將以我實際進行的一個小專案來進行講解。模型目標是實現圖片上二維碼位置的框選檢測
- 模型訓練:
這裡我是直接拿模型來使用的,模型支援灰度影像、320X256大小的圖片輸入的檢測。故在模型推理階段需要對輸入影像預處理,使其符合模型輸入資料的要求。
模型名稱為:AI_ROI_Dete_NCHW_1x1x320x256_V4.0.0.0.onnx
後續會將工程和模型釋出在GitHub上。 - 模型轉換
- 模型推理