1. 簡介
Kubeflow 是 Kubernetes 專用的機器學習工具包。這個專案旨在實現機器學習 (ML) 工作流程的部署,簡化 Kubernetes 的可攜性與擴充性。目標是提供簡單明瞭的方式,將業界最佳的機器學習開放原始碼系統部署至多樣化的基礎架構。 |
Kubeflow 部署是什麼樣子?
Kubeflow 部署具有以下優點:
- 可攜式:支援任何 Kubernetes 叢集,無論是位於 Google Cloud Platform (GCP)、地端部署或不同供應商中皆可使用。
- 可擴充:可使用浮動資源,且只會受限於分配給 Kubernetes 叢集的資源數量。
- Composable - 能讓您將獨立步驟設定成完整的機器學習工作流程,並選擇一組精選機器學習架構和程式庫。
Kubeflow 可讓您將鬆耦合的微服務整理為單一單元,並部署至各種位置,包括筆電、地端部署或雲端環境。
本程式碼研究室會逐步引導您使用 MiniKF 建立自己的 Kubeflow 部署作業,然後執行包含超參數調整的 Kubeflow Pipelines 工作流程,以訓練及提供模型。這些操作都可以在 Jupyter 筆記本中完成。
建構項目
在本程式碼研究室中,您將在 Kubeflow 管道上建構複雜的數據資料學管道,無須使用任何 CLI 指令或 SDK。您不必具備任何 Kubernetes 或 Docker 知識。完成之後,您的基礎架構就會包含:
- 會自動安裝的 MiniKF (Mini Kubeflow) VM:
- Kubernetes (使用 Minikube)
- Kubeflow
- Kale:這項工具可將一般用途的 Jupyter Notebooks 轉換為 Kubeflow Pipelines 工作流程 ( GitHub)
- Arrikto Rok:用於管理資料版本和可重現性
課程內容
- 如何使用 MiniKF 安裝 Kubeflow
- 如何在不使用任何 CLI 指令或 SDK 的情況下,將 Jupyter 筆記本轉換為 Kubeflow Pipelines
- 瞭解如何透過按一下按鈕,從筆記本內執行包含超參數調整的 Kubeflow 管道
- 如何在筆記本和每個管道步驟中自動建立資料版本
軟硬體需求
- 具備「擁有者」權限的有效 GCP 專案
這是著重於 Kubeflow 的進階程式碼研究室。如需更多背景資訊和平台簡介,請參閱 Kubeflow 簡介說明文件。我們不會對與本主題無關的概念和程式碼多做介紹,但會事先準備好這些程式碼區塊,屆時您只要複製及貼上即可。
2. 設定環境
設定 GCP 專案
請按照下列步驟建立 GCP 專案或設定現有的 GCP 專案。如果您打算使用現有的 GCP 專案,請確定該專案符合下述最低需求。第一步是在 GCP 控制台中開啟資源管理工具。
建立新專案或選取現有專案:
請檢查下列基本需求:
- 請確認您具備專案的擁有者角色。
- 請確認專案已啟用帳單功能。
- 請注意,如果您使用 GCP 免費方案或 12 個月試用期,且獲得 $300 美元的抵免額,就無法執行預設的 GCP 安裝 MiniKF,因為免費方案不會提供足夠的資源。請升級為付費帳戶。
如需設定 GCP 專案的詳細說明,請參閱 GCP 說明文件。
設定 GCP 專案後,請直接參閱安裝 MiniKF 的操作說明。
開啟預先分配的 GCP 專案
如要開啟預先分配的 GCP 專案,請點選下方按鈕前往 GCP 控制台,然後開啟「首頁」面板,這個面板位於左上方的漢堡選單。如果畫面空白,請在系統提示時按一下 [是],即可建立資訊主頁。
如果尚未選取專案,請按一下「選取專案」:
選取所需的專案,您只能有一個:
3. 安裝 MiniKF
建立含 MiniKF 的 Compute 執行個體
在 GCP Marketplace 中搜尋「MiniKF」。
選取 Arrikto 的「MiniKF」MiniKF虛擬機器:
按一下「推出」按鈕,然後選取您的專案:
在設定和部署視窗,為 MiniKF 執行個體選擇名稱和可用區,並保留預設選項。然後按一下「Deploy」按鈕:
等待 MiniKF Compute 執行個體啟動:
登入 MiniKF
MiniKF VM 啟動後,請點選「SSH」按鈕來連線並登入。按照畫面上的指示執行 minikf
指令,開始部署 Minikube、Kubeflow 和 Rok。這項作業需要幾分鐘才能完成。
登入 Kubeflow
安裝完成且所有 Pod 準備就緒後,請造訪 MiniKF 資訊主頁。使用 MiniKF 使用者名稱和密碼登入 Kubeflow:
Chrome 使用者會看到以下畫面:
Firefox 使用者會看到以下畫面:
Safari 使用者將看到這個畫面:
登入 Rok
登入 Kubeflow 後,按一下漢堡圖示以開啟左選單。按一下「Snapshots」(快照),然後以 MiniKF 使用者名稱和密碼登入 Rok。
恭喜!您已成功在 GCP 中部署 MiniKF。您現在可以建立筆記本、編寫機器學習程式碼、執行 Kubeflow Pipelines,以及使用 Rok 進行資料版本管理和重現問題。
4. 從筆記本內執行管道
在這個部分中,您將執行 Dog Breed Identification 範例,亦即 Udacity AI Nanodegree 中的一項專案。以狗的圖片為模型,最終的模型會提供犬隻品種的估計值。
在 Kubeflow 叢集中建立筆記本伺服器
前往 Kubeflow 中央資訊主頁中的「Notebooks」連結。
按一下「New Server」。
指定筆記本伺服器的名稱。
請確認您已選取下列 Docker 映像檔 (請注意,映像檔標記可能不同):
gcr.io/arrikto/jupyter-kale:f20978e
新增 5 GB 的空白資料磁碟區,並命名為「data」。
按一下「Launch」來建立筆記本伺服器。
筆記本伺服器可供使用時,按一下「Connect」即可連線至筆記本。
下載資料和筆記本
系統隨即會開啟新分頁,顯示 JupyterLab 到達網頁。在 JupyterLab 中建立新的終端機。
在終端機視窗中執行下列指令,找出 data 資料夾,並下載筆記本和後續研究室接下來會用到的資料:
cd data/ git clone https://github.com/kubeflow-kale/kale
複製的存放區含有一系列收錄的範例,其中含有資料和已加註的筆記本。
在側欄中,前往資料夾 data/kale/examples/dog-breed-classification/
,然後開啟筆記本 dog-breed.ipynb
。
探索犬種識別例的機器學習程式碼
目前請勿執行下載資料集的儲存格,因為您將會使用剛複製的存放區中包含的部分較小資料集。如果您是在家中以自己的步調執行這個範例,歡迎下載資料集。
執行 imports
儲存格,匯入所有必要的程式庫。請注意,程式碼失敗,因為缺少程式庫:
一般來說,您應該建立新的 Docker 映像檔,以便將這個筆記本以 Kubeflow 管道的形式執行,以便納入新安裝的程式庫。幸好,Rok 和 Kale 採用 Rok 的快照技術,以及在管道步驟中掛接這些已快照的磁碟區,因此可確保您在開發期間安裝的所有程式庫都能找到這些程式庫。
執行下一個儲存格,安裝缺少的程式庫:
按一下「Restart」圖示,重新啟動筆記本核心:
已安裝正確程式庫後再次執行 imports
儲存格,觀察是否成功。
將筆記本轉換為 Kubeflow Pipelines 中的管道
按一下筆記本左側窗格中的 Kubeflow 圖示來啟用 Kale:
按一下「Kale 部署面板」中的滑桿來啟用 Kale:
探索筆記本中每個儲存格的依附元件。您可參考儲存格左側的顏色長條指示,瞭解多個筆記本儲存格如何成為單一管道步驟的一部分,並依儲存格上方的「取決於」標籤所示,管道步驟可能取決於先前步驟。例如,下圖顯示同一個管道步驟中的多個儲存格。兩者的紅色相同,而且依賴先前的管道步驟。
按一下「Compile and Run」按鈕:
現在 Kale 將筆記本轉換成 Kubeflow Pipelines 管道,並著手建構您的筆記本。此外,由於 Kale 已經與 Rok 整合,可以擷取目前筆記本資料量的快照,因此您可以查看快照的進度。Rok 負責處理資料版本管理,並重現您點選「Compile and Run」按鈕當時的環境。如此一來,您就可以擁有用於資料和程式碼的時間機器,並在開發程式碼的相同環境中執行管道,而不需要建構新的 Docker 映像檔。
管道經過編譯並上傳至 Kubeflow Pipelines。接著點選連結,前往 Kubeflow Pipelines UI 並查看執行作業。
Kubeflow Pipelines UI 會在新分頁中開啟。等待執行完成。
恭喜!您剛剛從筆記本開始在 Kubeflow Pipelines 中執行端對端管道!
5. 運用超參數調整遷移學習
查看結果
查看 cnn-from-scratch 步驟的記錄檔。(按一下 Kubeflow Pipelines UI 中圖表中的步驟,然後點選「Logs」(記錄檔) 分頁標籤)。這是您從頭開始訓練卷積類神經網路 (CNN) 的步驟。請注意,訓練模型的準確率極低,除此之外,這個步驟需要很長的時間才能完成。
查看 cnn-vgg16 步驟的記錄檔。在這個步驟中,您是在預先訓練的 VGG-16 模型中使用遷移學習,也就是由視覺幾何圖形群組 (VGG) 訓練的類神經網路。儘管準確率遠比先前的模型高,但我們依然可以做得更好。
現在,請查看 cnn-resnet50 步驟的記錄檔。在這個步驟中,您針對預先訓練的 ResNet-50 模型使用了遷移學習。準確率高出許多。這就是您在本程式碼研究室其餘部分會使用的模型。
超參數調整
返回 Kubeflow UI 中的筆記本伺服器,然後開啟名為 dog-breed-katib.ipynb
的筆記本 (位於路徑 data/kale/examples/dog-breed-classification/
)。在這個筆記本中,您將使用 Katib 在 ResNet-50 模型中執行一些超參數調整實驗。請注意,筆記本開頭有一個儲存格來宣告參數:
在筆記本的左側窗格中,啟用「HP Tuning with Katib」,即可執行超參數調整:
然後點選「設定 Katib 工作」來設定 Katib:
定義每個參數的搜尋空間,並定義目標:
按一下「Compile and Run Katib Job」按鈕:
觀看 Katib 實驗的進度:
點選「查看」即可查看 Katib 實驗:
按一下「Done」(完成),即可查看 Kubeflow Pipelines (KFP) 中的執行作業:
Katib 實驗頁面會顯示新的試用項目:
KFP UI 中會顯示新的執行作業:
我們來解開剛剛發生的事。Kale 先前透過筆記本產生管道執行作業,現在建立多個管道執行作業,其中每個執行作業都會使用不同的引數組合提供資料。
Katib 是 Kubeflow 的元件,用來執行一般用途的超參數調整工作。Katib 對實際執行中的工作一無所知 (在 Katib 術語中稱為「試驗」)。她只關心搜尋空間、最佳化演算法和目標。Katib 支援以試驗的形式執行簡單的工作 (即 Pod),但 Kale 會導入填充碼,讓試驗實際在 Kubeflow 管道中執行管道,然後從管道執行作業收集指標。
由於 Katib 實驗正在進行試用,因此 Katib 使用者介面會顯示更多試用測試:
在 KFP UI 中還有更多執行作業:
完成 Katib 實驗後,您可以在 Katib 使用者介面查看所有測試:
此版本所有在 KFP UI 中執行:
返回筆記本時,您會在 Kale 面板中的 Katib 實驗旁看到資訊按鈕:
點選之後,系統會顯示最佳結果以及產生該結果的參數:
6. 清除所用資源
刪除 MiniKF VM
7. 恭喜
恭喜!您已成功使用 Kubeflow (MiniKF)、Kale 和 Rok 執行端對端的數據資料學工作流程!
後續步驟
加入 Kubeflow 社群: