現代機器學習系統的開發已不再侷限於模型訓練,更需要將模型整合到實際應用環境。本文介紹的機器學習系統架構,包含資料層、中間層和儲存函式庫層,旨在構建一個可擴充套件且穩定的生產環境。資料層負責資料準備和特徵提取,使用 Minio 儲存訓練資料和特徵,並利用 MLflow 追蹤實驗和模型版本。中間層包含開發、測試和生產環境,分別使用 Jupyter Server、PyCharm 和 GitLab CI/CD 管線進行開發、測試和佈署。儲存函式庫層則使用 GitLab 管理程式碼,並使用 Harbour 管理 Docker 容器映像。
在實際操作中,我們將整個流程拆分為訓練管線和佈署管線。訓練管線負責模型訓練和評估,包含安全測試、單元測試、程式碼風格檢查、模型訓練和模型評估等步驟。佈署管線則負責將訓練好的模型封裝成 Docker 映像,並佈署到目標執行環境。這種分離式的管線設計,可以提升系統的可擴充套件性、版本控制能力和整體效率。
實作生產就緒系統
在本文中,我們將描述如何實作生產就緒系統的技術細節。首先,我們將介紹系統的詳細架構,然後詳細描述不同管道的實作。最後,我們將描述機器學習(ML)部分的解決方案。
技術架構
在成功驗證了機器學習系統的可實作性之後,實作階段涉及完整的 MLOps 迴圈。從 PoC 階段的探索結果開始,開發環境被設定以允許生產就緒的探索和開發。接下來,建立和測試環境被設定以解決 CI 和 CD。最後,生產環境的交付和操作及監控過程被設定。
圖 12.4 顯示了我們的 ML 系統的技術架構。一般架構在需求部分被進一步具體化,包括具體的工具選擇。對於儲存函式庫層,我們使用 GitLab 進行程式碼管理和 Harbour 進行 Docker 容器管理(不同的例項用於測試和佈署)。在資料層中,有與資料準備和提取相關的元件,Minio 儲存元件用於儲存訓練資料、測試資料和特徵,以及 MLflow 元件,作為實驗跟蹤工具,用於比較不同的開發和訓練執行及模型儲存。
在中間層,我們有 3 個不同的環境,來自 MLOps 迴圈和一般架構:對於開發環境,我們主要使用 Jupyter Server 和 PyCharm。對於建立和測試環境,我們使用 GitLab CI/CD 管道進行訓練和佈署及交付過程。GitLab Runner 執行 GitLab CI/CD 管道的工作,並與提供 GPU 基礎資源的計算叢集連線,該資源用於訓練。下一節將提供有關這些管道的詳細資訊。在我們的案例研究中,批准的 ML 應用程式以 Docker 映像的形式透過 Harbour 的登記表交付。從那裡,容器被佈署到客戶目標執行時環境中,在客戶端本地佈署。因此,從案例研究的角度來看,目標環境是一個可擴充套件的環境,可以執行 Docker 容器。
整個架構,包括工具(除目標環境外),都在研究機構一側設定。
管道方法
對於實作,我們將解決方案分為 2 個主要管道:訓練管道和佈署管道。將工作分為訓練管道和佈署管道有幾個好處。首先,它允許模組化開發,每個管道元件可以關注其特定任務。訓練管道負責資料準備、模型訓練和評估,主要由玄貓使用,而佈署管道則關注構建和交付。
這種方法使得開發過程更加靈活高效,因為每個管道可以獨立執行和最佳化。此外,它還允許更好的版本控制和跟蹤變化,因為每個管道都有自己的版本歷史。這對於大型專案尤其重要,因為它可以幫助團隊更好地管理複雜性並確保專案按時完成。
ML 部分解決方案
在 ML 部分,我們使用了多種技術來實作模型訓練和評估。首先,我們使用了資料準備元件來準備訓練資料、測試資料和特徵。接下來,我們使用了 MLflow 元件來跟蹤實驗執行和模型儲存。這使得我們可以輕鬆地比較不同的模型版本並選擇最佳模型。
此外,我們還使用了 Jupyter Server 和 PyCharm 等工具來開發和測試模型。這些工具提供了強大的互動式開發環境,使得我們可以快速地開發和測試模型。此外,GitLab CI/CD 管道還提供了自動化的訓練和佈署過程,使得我們可以快速地將模型佈署到生產環境中。
總之,透過將工作分為訓練管道和佈署管道,並使用合適的工具和技術,我們可以實作一個高效且可擴充套件的 ML 系統。這種方法不僅可以提高開發效率,也可以確保模型的品質和可靠性。
訓練管線和佈署管線的重要性
在機器學習(ML)解決方案中,訓練管線和佈署管線是兩個非常重要的組成部分。訓練管線負責訓練模型,而佈署管線則負責將訓練好的模型佈署到生產環境中。這兩個管線的分離可以帶來多個好處,包括提高可擴充套件性、版本控制和效率。
可擴充套件性
訓練管線通常需要大量的計算資源和時間,因此可以獨立地進行擴充套件,以利用強大的硬體或分散式計算。相反,佈署管線只需要在新模型建立時執行,因此不需要太多的計算資源。
版本控制
訓練管線負責管理模型版本、實驗和跟蹤不同迭代。佈署管線則負責佈署和提供特定應用版本,允許輕鬆地回復到之前的版本。
效率
分離管線可以提高效率,因為訓練管線和佈署管線可以獨立地進行更新和改進。例如,訓練管線可以進行模型實驗和超引數調整,而不會影響佈署管線。
訓練管線
在 Proof of Concept(PoC)階段,多個訓練實驗是使用 Jupyter Notebook 手動實作的。這些實驗包括資料理解、資料模型訓練和模型評估。訓練管線旨在重新構建程式碼,以使訓練實驗和重新訓練可透過自動化管線進行跟蹤和重現。
訓練管線組態
訓練管線使用 Gitlab Runner 組態,包括以下工作:
- 安全測試:進行安全測試,以確保 ML 訓練程式碼和載入預處理資料的程式碼免受潛在漏洞的影響。
- 單元測試:建立和執行單元測試,以驗證訓練管線個別元件或單元的功能。
- 程式碼風格檢查:對所有訓練程式碼進行風格檢查,以強制執行程式碼風格標準(PEP 8),維護程式碼品質,並找出潛在的錯誤。
- 模型訓練:一旦安全測試、單元測試和程式碼風格檢查成功透過,管道就會觸發模型訓練工作。
- 模型評估:訓練好的模型使用保留的測試集進行評估,計算準確度、精確度和 F1 分數等指標。
隨著機器學習應用日益普及,建構一套穩健且可擴充套件的生產就緒系統至關重要。本文深入探討了實作此目標的關鍵技術架構和管線方法,涵蓋開發、測試、佈署與監控等環節。分析顯示,區分訓練管線和佈署管線是提升效率和可維護性的關鍵。訓練管線著重於模型開發與迭代,而佈署管線則專注於模型交付與版本控制,兩者相互獨立又緊密協作,有效降低了系統複雜度並提升了交付速度。此外,文中提出的安全測試、單元測試和程式碼風格檢查等步驟,也體現了對軟體工程最佳實務的重視,有助於提升系統的穩定性和可靠性。然而,目前方案仍需考量模型版本管理、自動化監控及持續整合/持續交付流程的最佳化,才能更好地適應快速變化的市場需求。玄貓認為,未來發展應著重於整合更先進的 MLOps 工具和技術,例如自動化模型調參、模型解釋性分析和效能監控告警等,以進一步提升系統的智慧化和自動化程度。隨著技術的持續演進,預期這套架構將能更好地支援更複雜的機器學習應用場景,並在提升企業競爭力的同時,降低開發和維護成本。