[課程筆記] MLOps Specialization on Coursera — Course 1
本篇要介紹的 Machine Learning Engineering for Production (MLOps) Specialization 是由deepLearning.ai在Coursera上開設的課程,也就是大神Andrew Ng開的課。整個Specialization的主題就是MLOps,MLOps說穿了就是machine learning pipeline的自動化,因此專項課程裡的4門課都是在講如何建立一個可以周而復始的machine learning pipeline。
第一門課 -Introduction to Machine Learning in Production
由Andrew Ng親自來教,可以說是在傳授AI專案的心法,提供很多實用的架構與建議。這些建議就我自己的經驗來講非常貼近工作的實際情況,也讓我對如何架構一個機器學習專案有著明確的指引。
Steps of an machine learning project
一個機器學習專案的生命週期如下圖表示:
DeepLearning.AI
首先是範圍定義階段、資料階段、模型階段,最後是佈署階段,但Andrew Ng設計以逆序的順序逐一說明。
模型佈署階段
- 上線後應注意concept drift (x與y的關係有變化)與 data drift(x或y本身有變化)。
- 軟體工程須注意的議題。如即時預測或批次預測、雲端或裝置、硬體資源、延遲要求(Latency)與吞吐量要求(throughput)、歷程記錄、安全性與隱私。
- 佈署方式1-Canary deployment:一開始先只讓小部分的流量試用,並監控結果,再逐步放大。
- 佈署方式2 -Blue green deployment:設置一個router,以便隨時從新版(green version)切換回舊版(blue version)。
- 監控:Andrew Ng 建議一開始先把能想到的指標都做監控,之後再逐漸拿掉不必要的指標。腦力激盪一下有哪些地方可能會讓系統出錯,並設定監控指標。
- 就像建模是不斷反覆地過程,佈署也是一樣,透過監控與分析指標來優化。
模型建置階段
- 建模的挑戰:如何在訓練資料集上表現良好、如何在驗證/測試資料集上表現良好、如何在商業指標或專案目標上表現良好。
- 只看average test error 為何不夠?例如有沒有某部分案例模型表現特別差。此外也須確保模型表現在關鍵切片(key slices)上表現一致,例如信貸的核准從種族、性別、區域、語言來看有沒有偏差。
- 建立比較基準(Baseline)的方法:human level performance、最新的文獻、過去的系統表現。
- 如何開始建模的建議:文獻蒐集、開源的實作。
- 選擇使用哪種模型時需要考慮佈署上的限制嗎?如果已經有Baseline,而且目標是佈署的話 → 要考慮。如果目標是建立baseline,而且是為了確認是否值得繼續嘗試 → 先不用考慮。
- 錯誤分析(error analysis)的建議:某種屬性佔所有錯誤的比例、有那種屬性的所有資料中,有多少比例預測錯誤、多少比例的資料有那種屬性、該屬性的改善空間還有多大。
- 依序改善空間、重要性、難易度等等來排序要努力的優先順序。
- 模型表現審查(performance auditing):想模型哪裡可能表現不好、根據這些地方建立監控指標、讓product owner接受這些指標。
- 模型建立的途徑1-model-centric view:資料維持不動,不斷嘗試讓模型在資料上表現地越來越好。
- 模型建立的途徑2-data-centric view:強調資料品質的重要性,讓code維持不變,但是反覆地優化資料品質。這邊資料品質指的可以是資料的廣度,例如蒐集更多種類貓的圖片,或做data augmentation。對結構化的資料來說則是增加更多有用的feature。
- 實驗記錄:需要紀錄演算法/code版本、所使用的資料集、超參數、預測結果。紀錄工具可以不用太複雜,例如文字檔或試算表都可。當然現在也越來越多工具可以使用。
- from Big data to Good Data:良好覆蓋率(重要案例都有包含到)、目標變數的定義很明確且一致、系統即時的反饋、合適的資料量。
資料準備階段
首先提到的是各種類型的資料可能會遇到的主要問題:
- 非結構的資料:常常是沒有label的資料→可以利用data augmentation。
- 結構化的資料:要獲取更多資料可能有困難。
- 資料量小(例如<=10000):乾淨的label是關鍵→人工修正標籤可行。
- 資料量大:長尾的部分(rare cases)可能也會有跟小資料一樣的問題。
這邊花了不少篇幅講HLP (Human level Performance)。總之要強調的是Label consistency的重要性,可以多個labelers標註同一個案例、MLE & SME(subject matter expert) & Labelers一起討論label的定義。Label consistency增加的話,HLP & ML performance應該都會提升。
Andrew Ng建議, 為了加快反覆以下Data + model + hyperparameters -> Training -> Error analysis的流程,一開始不要花太多時間搜集資料,而是增加iteration的次數。例如data 蒐集兩天、training兩天、error analysis兩天,然後再多嘗試幾次。
另外,有關data pipeline,Andrew Ng認為,在POC (proof-of-concept)階段,目標在於了解應用是否可行以及是不是值得實作,所以data pipeling有許多人工部分沒關係,但要有大量的筆記和備註。當到了production phase則要確保data pipeline是可以重複執行的。
有了meta-data,對釐清data pipeline的非預期錯誤會有幫助。也有助於紀錄:
- data provenance: where data comes from
- data lineage: the sequence of steps
專案範圍定義階段
範圍定義流程:定義業務問題(非AI問題)→發想AI方案→評估各方案的可行性與確認價值→定義里程碑→爭取預算與資源。
- 如何評估專案可行性:
- 非結構化資料、新問題:HLP
- 非結構化資料、既有問題:HLP、歷史專案成果
- 結構化資料、新問題:重要特徵是否可得?
- 結構化資料、既有問題:是否有新特徵可用、歷史專案成果
- 用外部資料當的Benchmark:文獻、其他公司或競爭者。
- 如何確認專案價值:
- diligence on value: 模型優化的指標與實際業務問題要的指標可能有gap,兩方要一起討論出可以接受的某項指標。
- ethical considerations: 注意是否有道德問題、公平、無歧視?
- 有關專案里程碑(Milestones):
設定關鍵目標:ML metrics(例如precision/recall)、software metrics(例如latency, throughput)、business metrics(例如revenue)
- 有關專案資源(Resources):
資料、人力、其他團隊的資源。
- 有關專案資源時程(Timeline):
如果不確定高,可以先關注在建立POC再說,或是根據其他專案的經驗來定義。
以上就是第一門課的內容,大方向地說明了整個AI專案的架構與流程,可以說比較偏向心法(或說內功?)的部分。接下來的三門課就是針對各個階段再去細項說明以及實作應用的示範。