---
# System prepended metadata

title: '[ML] 8. 流程控制, 管線自動化, MLOps'
tags: [管線自動化, 流程控制, MLOps, ML, ML / Category]

---

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

## 參考資料



