If you don't know the provenance or the source of the artifact, it's not science, it's a pretty thing to look at. — Erin McKean
我們都知道在寫程式的時候要使用版本控制來追蹤、維護程式碼,但在機器學習的領域是否需要類似的方法論呢?
在開始今天的文章之前,先來想想看以下問題該怎麼回答:
這些問題看似無關緊要,反正產品可以用就好,何必對模型進行身家調查,但良好的機器學習系統應該要持續地產生一致的結果,而為了確保可再現性,能流暢的回答這些問題便是關鍵。
但實務上,要釐清這些機器學習生成物 (Artifact) 之間的脈絡與連結可遠比使用簡單的線性日誌來記錄還要複雜。
因此,我們必須導入被稱為資料版本控制 (Data versions control) 的概念。
而且由於資料檔案的尺寸通常比程式碼大的多,所以資料版控的工具在本質上與我們熟悉的程式碼版控 (Git) 以及環境版控 (Docker) 工具有很大的差異。
常被用來進行資料版控的工具有 DVC、 Git LFS (Large Files Storage),以及今天我們要介紹的 ML metadata (MLMD),它可以追蹤與回溯資料與模型在訓練過程中的改變,進一步幫助我們除錯、提昇可再現性以及遵守使用資料的相關法規,那我們就開始吧!
從原始特徵、標籤到最終預測,資料會經過很多不同的轉換,而這一連串的操作就組合成了 Pipeline。
當我們在訓練模型時,資料就在 Pipeline 中隨著模型學習映射函數的過程轉換與改變,
釐清資料在整個產品生命週期 Pipeline 中的 "旅程" 可以幫助我們了解資料的 "血統關係 (provenance & lineage)",也就是回答前言裡那些問題的關鍵。
因為模型本身就是訓練資料的一種表示法,所以可以將模型視為資料的轉換。
而產品化最重要的工作就是 "重現" 研發時的前處理 Pipeline,以確保演算法在作為產品時接收的輸入資料分佈與研發階段相同,其中兩個階段的工作要點如下:
POC (proof-of-concept):
Production:
以預測某人是否在找工作為例,可能的 Pipeline 如下圖:
其中 [資料+ML code] 代表使用該資料訓練模型,[模型+資料] 代表使用該模型對資料進行推論。
這種複雜的 Pipeline 在大型商業系統中並不少見 (通常會更複雜),可以想見如果其中某個資料集做了改變勢必會牽一髮動全身。
為了增加這類系統的可維護性,可以試著追蹤以下兩個資訊:
而目前的做法就是盡可能紀錄各種元資料 (Metadata),也就是資料的資料。
以瑕疵檢測為例,可以記錄任何與 x、y 有關的資料,像是影像取得的時間、工廠、產線、相機參數,以及標注者的 ID 等。
這麼做的優點在於:
這裡整理一下上面出現的名詞:
MLMD 為追蹤與存取 metadata 的函式庫,它可以被整合進 ML Pipeline 中,也可以單獨使用。
使用 MLMD 時,我們必須知道資料如何在各個 Pipeline 部件之間流動,其中資料流的每一步都可以用一個實體 (entity) 來描述,這些實體又可以被視為單位 (Unit)。
而每個單位又可以使用性質 (property) 來描述額外的細節資訊,這些性質會儲存在相對應的類型 (Types) 中,以下為 MLMD 常用的術語:
最後,Relationships 會儲存不同 Unit 之間互動時產生或使用的 Unit,例如 Event 紀錄的就是 Artifact 與 Execution 之間的關係。
簡單來說,MLMD 紀錄各種 Pipeline 部件的相關資訊,這些資訊會被表成 metadata 物件存進後端儲存選項中:
*圖片來源:MLEP — Introduction to ML Metadata
在 MLMD 的整體架構中,最上層為 ML Pipeline 中的各種部件,它們各自與 MLMD 的集中式元資料管理 MetadataStore 連接,因此每個部件都可以在 Pipeline 的各個階段獨立存取 metadata。
MetadataStore 的核心為 Artifact (以相對應 ArtifactType 描述),它可以作為 Pipeline 部件的輸入值,而其如何被 Pipeline 部件使用則紀錄進 Execution 中。
而 Artifact 作為某部件的輸入會被紀錄為 input Event,相對應地該部件產生新的 Artifact 作為輸出則會紀錄為 output Event。
Artifacts 與 Executions 之間的互動則藉由 Attribution 與 Association Relationships 與 Context 連結在一起。
最後,所有在 MetadataStore 產生的資料都會存進各種不同的後端儲存選項中,例如 SQLite、MySQL,而大型物件則存進 file system、block store。
*圖片來源:ML Metadata
除了追蹤資料的血緣關係以外,使用 MLMD 還有以下好處:
實作我一率推薦官方教學,這裡就不重複說明了。
以上就是今天的內容啦,今天也是機器學習產品生命週期資料部分的最後一篇,明天就要再次回朔一步,談談 Scoping 囉。