[AIML] 深度學習模型的封裝: ONNX
ONNX (Open Neural Network Exchange) 是一個開放格式, 用來表示深度學習模型與傳統機器學習模型的計算圖結構, 讓不同的深度學習框架 (如 PyTorch、TensorFlow、Scikit-learn) 之間可以互通, 使模型的部署與交換更加方便. 來自: https://github.com/1010code/onnx-mlir-tutorial 透過 ONNX, 我們可以完成以下的目標: 模型跨平台轉換與交換 可將模型從 PyTorch、TensorFlow、Scikit-learn 等框架導出為 ONNX 格式 便於在不同工具或設備之間共享與重用模型 跨硬體部署 (CPU、GPU、FPGA、NPU) ONNX 模型可以在多種硬體平台執行,不需重新訓練 搭配 ONNX Runtime、TensorRT、OpenVINO 等工具,實現高效推理 推理優化與加速 可結合 TensorRT、ONNX Runtime 等進行圖優化 (Graph Optimization) 與推理加速 適用於邊緣設備、嵌入式系統、高性能伺服器等場景 多模型整合與模組化設計 可將多個子模型整合為一個 ONNX 模型,便於部署與管理 適合構建複雜管線 (例如預處理 → 模型 A → 模型 B → 後處理) 在 ONNX 架構中, 事實上是把模型拆解成計算圖 (GraphProto), 在計算圖中, 包含了以下 4 種角色: node: 每個節點代表一個操作 (如: matmul、relu、add) input: 圖的輸入 (例如: 影像、感測器資料) output: 圖的輸出 (例如: 分類結果、控制訊號) initializer: 模型的參數 (例如: 權重、bias 等) 來自: https://onnx.ai/onnx/intro/concepts.html 透過上述運算子, ONNX 可以把原有的運算, 轉化成 Directed Acyclic Graph (DAG), 再放到不同計算平台進行運算. 然而, 也是由於計算圖 (GraphProto) 的原因, ONNX 有以下限制: 1. 無法封裝任意 Python 程式邏輯 ONNX 只能表示靜態的計算圖 (computational graph), 不支援像 Python 中的...