[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?

- What do I need to get started with MLOps?
- Why should I use Open MLOps?
<br>
## AzureML 流程控制
### 流程狀態範本






### 複雜的流程控制:解拓撲
[](https://i.imgur.com/qs63PFi.png)
### 觀察到的狀態:
| 狀態 | 補充說明 |
| -------- | -------- |
| 正在準備 | 沒有依附的任務 (解拓撲) |
| 已排入佇列 | 尋找可以執行此任務的計算節點 |
| 正在執行 | 正在計算節點中執行任務 |
| 已完成 | 任務執行完畢 |
| (不確定還有沒有其他狀態) | |
<br>
### 任務的輸入/輸出
- ### [[AzureML] 執行 Python 腳本模組](https://docs.microsoft.com/zh-tw/azure/machine-learning/algorithm-module-reference/execute-python-script)

- ### 多個輸出如何處理
- ### 輸出:類型


- ### 輸出:視覺化

- [點此查看 Filter dataset](https://i.imgur.com/vRb1lZ3.png)
- [點此查看 Features](https://i.imgur.com/kiSsM3l.png)
- ### 輸出:檢視輸出

- :::spoiler 點此查看 Features



- `_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`

- `data.visualization`

- :::spoiler 點此查看 Filtered_dataset

- 同上方法
<br>
<hr>
<br>
## [[hackmd] 生物資訊 / Galaxy / 自訂分析工具](/XQjPlWFNRVu3xMzXb9RVSQ)
<br>
<hr>
<br>
## 卡片式工作流程
- ### ASUS 版面
[](https://i.imgur.com/vLGAb03.png)
- 版面規劃,在有限版面增加功能
- 功能要簡潔、不複雜
- AzureML 資訊太多了,很多資訊都不會看
- 考慮功能分離
- 視圖(View) <--> 模型(Model)、控制器(Controller)
- 視圖(View) 交給專業前端處理
- Galaxy 有固定 form 樣本
- ### prototype (原型, 手繪草稿)
[](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 的欄位名稱
- 如果還沒有資料,就顯示「正在處理」,處理完會自動更新
使用者亦可強制更新,像是:

- 如果上一個 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/Buneh46.png)
- 沒有「**檔案總管**」會有什麼情況?
- 對使用者來說,是儲存體的路徑?
- 還是掛載到容器內的路徑?
- 資料載入:讀取 CSV
- 檔案格式
- 分隔符號
- 編碼
- 資料行標頭
- 略過資料列
- 空白資料認定(?)
- 資料預覽
- :::spoiler 範本:設計工具 (資料如何傳遞)
---
- ==結構描述預覽==

- ==剖析選項==

- ==一開始,並無視覺化==

- ==下一個階段的 task,也無法取得資料==


- ==執行期間,不能操作 menu==

- ==執行完畢後,即可查看視覺化圖表==

[](https://i.imgur.com/XYPzKFT.png)
- ==下一個階段的 task,可以取得資料了==

- ==提交執行新的 task==



如果參數都不變,提交執行時,
原先執行過的任務並不會重新執行
---
- 組態輸出:
- 存成 json
- `house_price.csv` -> `house_price.csv.cwf.json` (card-based workflow)
- ~~`house_price.csv.flow.json` (workflow)~~
- ~~`house_price.csv.conf.json` (config)~~
- 需要「自動儲存開啟」?

若是要簡化設計,就是會自動儲存
- ### Phase2:`資料集 / 表格資料 / 分析`
- 資料集:欄位篩選
- 資料集:資料類型 + 轉換預覽
- 資料集:資料分佈(樣貌圖表) + 基本統計分析
[](https://i.imgur.com/MvGku8B.png)
- 資料分佈(樣貌圖表)
- :::spoiler 資料圖表切換
- Box and whiskers plot

- Histogram

- 資料類型(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

路徑會縮短

<br>
<hr>
<br>
## 參考資料