[ML] 8. 流程控制, 管線自動化, MLOps === > [[ML / Category]](/hu2F_DDbSI6nHzO2NbJ_Jg) ###### tags: `ML / Category` ###### tags: `ML`, `流程控制`, `MLOps`, `管線自動化` <br> [TOC] <br> ## MLOps - ### [MLOps 帶給商業與技術流程的5個好處與13個指標 | MLOps落地指南 - 流程篇](https://ithelp.ithome.com.tw/m/articles/10260568) - 高效率:自動化開發與更新 - 高透明度:助於跨部門、團隊協作 - 高適應性:提高系統彈性、消除浪費 - 聚焦ML情境:在軟體開發的核心概念上支援ML模型 - 高信任度:因專案的準確性、可解釋性帶來信任和影響力 ## Open Source - ### [8 AutoML Libraries to Automate Machine Learning Pipeline](https://medium.com/swlh/8-automl-libraries-to-automate-machine-learning-pipeline-3da0af08f636) 1. Auto-Sklearn 2. TPOT 3. Auto-ViML 4. H2O AutoML 5. Auto-Keras 6. MLBox 7. Hyperopt Sklearn 8. AutoGluon - ### [Open MLOps: Open Source Production Machine Learning](https://towardsdatascience.com/f4080f02e9f0) - Who is Open MLOps for? - What is Open MLOps? ![](https://i.imgur.com/e22iphX.png) - What do I need to get started with MLOps? - Why should I use Open MLOps? <br> ## AzureML 流程控制 ### 流程狀態範本 ![](https://i.imgur.com/GTIpd87.png) ![](https://i.imgur.com/0fR52ZA.png) ![](https://i.imgur.com/DyfMwK7.png) ![](https://i.imgur.com/6YnwY51.png) ![](https://i.imgur.com/wwK7p2B.png) ![](https://i.imgur.com/ilbL8me.png) ### 複雜的流程控制:解拓撲 [![](https://i.imgur.com/qs63PFi.png)](https://i.imgur.com/qs63PFi.png) ### 觀察到的狀態: | 狀態 | 補充說明 | | -------- | -------- | | 正在準備 | 沒有依附的任務 (解拓撲) | | 已排入佇列 | 尋找可以執行此任務的計算節點 | | 正在執行 | 正在計算節點中執行任務 | | 已完成 | 任務執行完畢 | | (不確定還有沒有其他狀態) | | <br> ### 任務的輸入/輸出 - ### [[AzureML] 執行 Python 腳本模組](https://docs.microsoft.com/zh-tw/azure/machine-learning/algorithm-module-reference/execute-python-script) ![](https://i.imgur.com/iTWnQrf.png) - ### 多個輸出如何處理 - ### 輸出:類型 ![](https://i.imgur.com/doC093f.png) ![](https://i.imgur.com/qr0aZ8K.png) - ### 輸出:視覺化 ![](https://i.imgur.com/0xwTFub.png) - [點此查看 Filter dataset](https://i.imgur.com/vRb1lZ3.png) - [點此查看 Features](https://i.imgur.com/kiSsM3l.png) - ### 輸出:檢視輸出 ![](https://i.imgur.com/rrix18j.png) - :::spoiler 點此查看 Features ![](https://i.imgur.com/2mdrAke.png) ![](https://i.imgur.com/jl1j98r.png) ![](https://i.imgur.com/nRqC2a6.png) - `_meta.yaml` ```yaml type: DataFrameDirectory visualization: - type: Visualization path: data.visualization extension: DataTableMeta: data.dataset format: Parquet data: data.dataset.parquet samples: _samples.json schema: schema/_schema.json ``` - `_samples.json` ![](https://i.imgur.com/IjwkNPL.png) - `data.visualization` ![](https://i.imgur.com/EYtydck.png) - :::spoiler 點此查看 Filtered_dataset ![](https://i.imgur.com/CfqJRKO.png) - 同上方法 <br> <hr> <br> ## [[hackmd] 生物資訊 / Galaxy / 自訂分析工具](/XQjPlWFNRVu3xMzXb9RVSQ) <br> <hr> <br> ## 卡片式工作流程 - ### ASUS 版面 [![](https://i.imgur.com/vLGAb03.png)](https://i.imgur.com/vLGAb03.png) - 版面規劃,在有限版面增加功能 - 功能要簡潔、不複雜 - AzureML 資訊太多了,很多資訊都不會看 - 考慮功能分離 - 視圖(View) <--> 模型(Model)、控制器(Controller) - 視圖(View) 交給專業前端處理 - Galaxy 有固定 form 樣本 - ### prototype (原型, 手繪草稿) [![](https://i.imgur.com/iyH48AN.jpg)](https://i.imgur.com/iyH48AN.jpg) - ### 概念 | 元件 | 參考設計 | | --- | ------- | | 卡片配置框架 | Python notebook, Galaxy | | 卡片執行流程 | Python notebook, Galaxy | | 工具類型 | Azure 設計工具, Galaxy, Druid | | 工具:資料來源 | Druid | | 工具:統計分析 | Azure 設計工具 | | 工具:資料轉換 | Druid | | 工具:輸入/輸出 | Galaxy, Azure 設計工具 | | 工具簡潔規劃 | Druid | | 視覺化效果 | Azure 設計工具 | - ### 應用範圍 - 資料前處理 - 特徵工程設定 - 其他流程控制 - ### 前端 1. 新增 cell 2. 每個 cell 產生隨機 ID + 水流號,作為識別碼 - `edhglooe-1` - `jfhdrhdh-2` - `z`iogjeng-3` 3. 選擇工具 4. 載入版面 5. 選擇資料來源:接續/已存在 cell 的水流號 6. 嘗試載入上一個 cell 的資料 - 比如新的 cell 是 `jfhdrhdh-2`,上一個是 `edhglooe-1` - 向後端詢問:input 的 param1 的輸入來源 比如提取 param1 的欄位名稱 - 如果還沒有資料,就顯示「正在處理」,處理完會自動更新 使用者亦可強制更新,像是: ![](https://i.imgur.com/JolQ9EL.png) - 如果上一個 cell 被幹掉了,回報錯誤 - ### 必要 - ### Phase1:`資料集 / 表格資料 / 載入` :::info :information_source: **資料集載入類型** 不要限定是 dataframe,也可以擴增為 image, audio, video。 ``` 資料集 ├── 序列資料 ├── 表格資料 │   ├── 匯入資料(執行部份分析,最多10000筆) │   │   (必須考量到千萬筆資料,不然一開始就會卡住) │   ├── 欄位挑選 │   └── 統計分析(執行完整分析) ├── 影像檔 ├── 聲音檔 └── 影片檔 ``` dataframe 可以是單份,也可以是多份合併 例如: - 空氣盒的資料匯集 - 氣象局各地的資料匯集 - 工廠、停車場等多個感測器的匯集 ::: - 資料來源:本地端檔案 (單一檔案挑選) - `house_price.csv` - 有「**檔案總管**」可以用? - :::spoiler AzureML / 檔案挑選 [![](https://i.imgur.com/k7TtmLH.png)](https://i.imgur.com/k7TtmLH.png) [![](https://i.imgur.com/Buneh46.png)](https://i.imgur.com/Buneh46.png) - 沒有「**檔案總管**」會有什麼情況? - 對使用者來說,是儲存體的路徑? - 還是掛載到容器內的路徑? - 資料載入:讀取 CSV - 檔案格式 - 分隔符號 - 編碼 - 資料行標頭 - 略過資料列 - 空白資料認定(?) - 資料預覽 - :::spoiler 範本:設計工具 (資料如何傳遞) --- - ==結構描述預覽== ![](https://i.imgur.com/tiI4Gxj.png) - ==剖析選項== ![](https://i.imgur.com/y8akwji.png) - ==一開始,並無視覺化== ![](https://i.imgur.com/JZc2bqA.png) - ==下一個階段的 task,也無法取得資料== ![](https://i.imgur.com/JCNr0xI.png) ![reference link](https://i.imgur.com/bDGec7U.png) - ==執行期間,不能操作 menu== ![](https://i.imgur.com/r1akcB5.png) - ==執行完畢後,即可查看視覺化圖表== ![](https://i.imgur.com/IhA8a8s.png) [![](https://i.imgur.com/XYPzKFT.png)](https://i.imgur.com/XYPzKFT.png) - ==下一個階段的 task,可以取得資料了== ![](https://i.imgur.com/eV2HemW.png) - ==提交執行新的 task== ![](https://i.imgur.com/n0lV4iK.png) ![](https://i.imgur.com/fyQA06q.png) ![](https://i.imgur.com/1eA6PVn.png) 如果參數都不變,提交執行時, 原先執行過的任務並不會重新執行 --- - 組態輸出: - 存成 json - `house_price.csv` -> `house_price.csv.cwf.json` (card-based workflow) - ~~`house_price.csv.flow.json` (workflow)~~ - ~~`house_price.csv.conf.json` (config)~~ - 需要「自動儲存開啟」? ![](https://i.imgur.com/MHHIHvi.png) 若是要簡化設計,就是會自動儲存 - ### Phase2:`資料集 / 表格資料 / 分析` - 資料集:欄位篩選 - 資料集:資料類型 + 轉換預覽 - 資料集:資料分佈(樣貌圖表) + 基本統計分析 [![](https://i.imgur.com/MvGku8B.png)](https://i.imgur.com/MvGku8B.png) - 資料分佈(樣貌圖表) - :::spoiler 資料圖表切換 - Box and whiskers plot ![](https://i.imgur.com/LmBHS6i.png =60%x) - Histogram ![](https://i.imgur.com/3TjAauh.png =60%x) - 資料類型(Type) - 資料行統計資料 - 分位數(Quantiles) - 最小值 (Min) - Q1 (約略值) (Q1 (approx)) - 中位數 (約略值) (Median (approx)) - Q3 (約略值) (Q3 (approx)) - 最大值 (Max) - 時刻數(Moments) - 平均數 (Mean) - 標準差 (Std deviation) - 變異數 (Variance) - 偏態 (Skewness) - 峰態 (Kurtosis) - 儲存格計數 (Cell counts) - 選擇性欄位 - 最常用 (Most common) - 最常見數目 (# Most common) - 唯一值數目 (# Unique values) - 總計數 (Count) - 未遺漏任何計數 (Not missing count) - 遺漏計數 (Missing count) - 空白的計數 (Empty count) - 錯誤計數 (Error count) - 查看報表 - ### Phase3 - 訓練流程配置 - 目標資料行 - 任務類型 - 其他組態 - 評估準則(評估指標) - 驗證類型 - 自動 - K 折交叉驗證 - 交叉驗證數:5 - 蒙地卡羅交叉驗證 - 交叉驗證數:5 - 資料的百分比驗證:10 - 訓練/驗證分割 - 資料的百分比驗證:10 - 其他設計? - 啟用特徵化 - 欄位挑選 - 功能類型 - 自動 (Auto) - 數值 (Numeric) - 文字 (Text) - 類別目錄(非高基數特徵) (Categorical) - 分類雜湊(高基數特徵) (Categorical hash) - 日期時間 (DateTime) - 資料插補 - 自動 (Auto) - 平均數 (mean) - 最常見 (Most frequent) - 中位數 (Median) - 填入常數 (Fill with constant) - 資料預覽 - 前 3 筆預覽 - 不重複的前 3 筆預覽 (會不會比較好) - ### Phase4 - 工具:訓練階段工具 ([參考範例1](https://github.com/Azure/MachineLearningDesigner/blob/master/articles/samples/regression-automobile-price-prediction-basic.md), [參考範例2](https://github.com/Azure/MachineLearningDesigner/blob/master/articles/samples/regression-automobile-price-prediction-compare-algorithms.md)) - 演算法挑選 - 評分函數挑選 - 評估函數與繪圖(繪圖:困難) - 工具:資料分割 (其他細節:參考 Galaxy) - 應用範疇:當資料沒有測試集時 - 訓練集 備註:驗證集是從訓練集分割出來 - 測試集 - 工具:資料轉換 - 應用範疇 - 時間剖析 - 有序尺度的資料轉換 - 運算式 - RegExp - Python - Java (Phase99) - ### Phase5 - 工具:降維處理 - 工具:進階統計分析 / 相關性分析 - 任意兩欄位關聯性分析 (包含目標值) (Confusion matrix) - 欄位與目標值的關聯性分析 - 皮耳森相互關聯 - 卡方值 - ### 未來 - 可選擇不同的計算節點,來執行任務 - 各個卡片任務,可獨自配置計算節點 - 訓練任務,指定採用比較強大的計算節點 - 其餘的任務,使用預設的叢集(根目錄叢集) - 叢集可以是單一節點、或是多節點 - 拖拉式工具版面 <br> <hr> <br> ## [不錯的]檔案總管(file explorer) > 在使用流程,免不了要開啟檔案 - ### jupyter-lab ![](https://i.imgur.com/Do4G21G.png) 路徑會縮短 ![](https://i.imgur.com/hIIlnsE.png) <br> <hr> <br> ## 參考資料