1. 簡介
| Kubeflow 是 Kubernetes 的機器學習工具包,這項專案旨在簡化在 Kubernetes 中部署機器學習 (ML) 工作流程的作業,並提高其可攜性與可擴充性。此專案目標是提供直觀的方式,協助使用者將領先業界的 ML 專屬開放原始碼系統部署至各個不同的基礎架構。 |
Kubeflow 部署作業的流程為何?
Kubeflow 部署作業是指:
- 可攜性 - 無論 Kubernetes 叢集位於 Google Cloud Platform (GCP)、內部部署環境或不同供應商之間,都可以使用。
- 可擴充:可使用波動的資源,且只受限於分配給 Kubernetes 叢集的資源數量。
- 可組合 - 您可以從精選的機器學習架構和程式庫中選擇,將獨立步驟設定為完整的機器學習工作流程。
Kubeflow 可讓您將鬆散耦合的微服務整理為單一單元,並部署至各種位置,包括筆電、內部部署或雲端。
本程式碼研究室將逐步說明如何使用 MiniKF 建立自己的 Kubeflow 部署作業,然後執行 Kubeflow Pipelines 工作流程並進行超參數調整,以訓練及提供模型。您可以在 Jupyter Notebook 中完成所有操作。
建構項目
在本程式碼研究室中,您將在 Kubeflow Pipelines 上建構複雜的資料科學管道,並進行超參數調整,期間不需使用任何 CLI 指令或 SDK。您不需要具備任何 Kubernetes 或 Docker 知識,完成後,基礎架構會包含:
- MiniKF (Mini Kubeflow) VM,會自動安裝下列項目:
- Kubernetes (使用 Minikube)
- Kubeflow
- Kale:可將一般用途的 Jupyter Notebook 轉換為 Kubeflow Pipelines 工作流程 ( GitHub)
- Arrikto Rok,用於資料版本控管和可重現性
課程內容
- 如何使用 MiniKF 安裝 Kubeflow
- 如何將 Jupyter 筆記本轉換為 Kubeflow Pipelines,而不使用任何 CLI 指令或 SDK
- 如何從筆記本中執行 Kubeflow Pipelines,並透過超參數調整功能,只要按一下按鈕即可
- 如何在筆記本和每個管道步驟中自動為資料建立版本
軟硬體需求
- 您擁有「擁有者」權限的有效 GCP 專案
本程式碼研究室為進階主題,著重於 Kubeflow。如需更多背景資訊和平台簡介,請參閱「Kubeflow 簡介」說明文件。我們不會對與主題無關的概念和程式碼多做介紹,但會事先準備好這些程式碼區塊,屆時您只要複製及貼上即可。
2. 設定環境
設定 GCP 專案
請按照下列步驟建立 GCP 專案,或設定現有的 GCP 專案。如果您打算使用現有 GCP 專案,請確認專案符合下列最低需求。第一步是在 GCP 主控台中開啟資源管理工具。
建立新專案或選取現有專案:

請確認符合下列最低需求:
- 確認您具備專案的擁有者角色。
- 確認專案已啟用「帳單」。
- 如果您使用 GCP 免費方案,或享有 12 個月的試用期和 $300 美元抵免額,請注意,您無法執行 MiniKF 的預設 GCP 安裝作業,因為免費方案提供的資源不足。您需要升級為付費帳戶。
如需設定 GCP 專案的詳細說明,請參閱 GCP 說明文件。
設定 GCP 專案後,請直接參閱 MiniKF 安裝說明。
開啟預先分配的 GCP 專案
如要開啟預先分配的 GCP 專案,請按一下下方按鈕前往 GCP 主控台,然後開啟左上角漢堡選單中的「首頁」面板。如果畫面空白,請在提示中按一下「是」建立資訊主頁。

如果尚未選取專案,請按一下「選取專案」:

選取所需的專案,你應該只會看到一個:

3. 安裝 MiniKF
建立包含 MiniKF 的 Compute 執行個體
在 GCP Marketplace 中搜尋「MiniKF」。
選取 Arrikto 的 MiniKF 虛擬機器:

按一下「啟動」按鈕,然後選取專案:

在「Configure & Deploy」視窗中,為 MiniKF 執行個體選擇名稱和區域,並保留預設選項。然後按一下「部署」按鈕:

等待 MiniKF Compute 執行個體啟動:

登入 MiniKF
MiniKF VM 啟動後,按一下「SSH」SSH按鈕即可連線並登入。按照畫面上的指示執行 minikf 指令,開始部署 Minikube、Kubeflow 和 Rok。這項作業需要幾分鐘才能完成。

登入 Kubeflow
安裝完成且所有 Pod 都準備就緒後,請前往 MiniKF 資訊主頁。使用 MiniKF 使用者名稱和密碼登入 Kubeflow:


Chrome 使用者會看到這個畫面:

Firefox 使用者會看到這個畫面:

Safari 使用者會看到這個畫面:

登入 Rok
登入 Kubeflow 後,按一下漢堡圖示開啟左選單。按一下「快照」,然後使用 MiniKF 使用者名稱和密碼登入 Rok。


恭喜!您已成功在 GCP 上部署 MiniKF。您現在可以建立筆記本、撰寫機器學習程式碼、執行 Kubeflow Pipelines,以及使用 Rok 進行資料版本控管和重現。
4. 從筆記本內執行管道
在本節中,您將執行 Udacity AI Nanodegree 的專案「Dog Breed Identification」範例。只要提供狗的圖片,最終模型就會估算狗的品種。
在 Kubeflow 叢集中建立筆記本伺服器
前往 Kubeflow 中央資訊主頁的「Notebooks」(筆記本) 連結。

按一下「新增伺服器」。

指定筆記本伺服器的名稱。

請確認您已選取下列 Docker 映像檔 (請注意,映像檔標記可能有所不同):
gcr.io/arrikto/jupyter-kale:f20978e
新增大小為 5 GB 的空白資料磁碟區,並命名為「data」。

按一下「啟動」即可建立筆記本伺服器。

筆記本伺服器可用時,按一下「連線」即可連線。

下載資料和筆記本
系統會開啟新分頁,並顯示 JupyterLab 登陸頁面。在 JupyterLab 中建立新的終端機。

在終端機視窗中執行下列指令,前往 data 資料夾,並下載本實驗室其餘部分會用到的筆記本和資料:
cd data/ git clone https://github.com/kubeflow-kale/kale
複製的存放區包含一系列精選範例,內含資料和註解筆記本。
在側欄中,前往 data/kale/examples/dog-breed-classification/ 資料夾並開啟 dog-breed.ipynb 筆記本。

探索「狗品種辨識」範例的機器學習程式碼
目前請勿執行下載資料集的儲存格,因為您要使用剛複製的存放區中包含的一些較小資料集。如果您在家中自行執行這個範例,歡迎下載資料集。
執行 imports 儲存格,匯入所有必要程式庫。請注意,程式碼會失敗,因為缺少程式庫:

一般來說,您應該建立新的 Docker 映像檔,才能將這個 Notebook 做為 Kubeflow pipeline 執行,並納入新安裝的程式庫。幸好,Rok 和 Kale 會確保您在開發期間安裝的任何程式庫都會進入管道,這要歸功於 Rok 的快照技術,以及 Kale 將這些快照磁碟區裝載到管道步驟中。
執行下一個儲存格,安裝缺少的程式庫:

按一下「Restart」圖示,重新啟動筆記本核心:

安裝正確的程式庫後,再次執行 imports 儲存格,即可順利完成。
在 Kubeflow Pipelines 中將筆記本轉換為管道
按一下筆記本左側窗格中的 Kubeflow 圖示,啟用 Kale:

按一下「Kale Deployment Panel」(Kale 部署面板) 中的滑桿,啟用 Kale:

探索筆記本中各儲存格的依附元件。如要瞭解多個筆記本儲存格如何成為單一管道步驟的一部分 (如儲存格左側的色條所示),以及管道步驟如何取決於先前的步驟 (如儲存格上方的「depends on」標籤所示),舉例來說,下圖顯示屬於相同管道步驟的多個儲存格。兩者顏色相同 (紅色),且取決於先前的管道步驟。

按一下「Compile and Run」(編譯並執行) 按鈕:

現在 Kale 會接手,將筆記本轉換為 Kubeflow Pipelines 管道,並建構筆記本。此外,由於 Kale 會與 Rok 整合,擷取目前筆記本的資料量快照,因此您可以查看快照進度。Rok 會負責處理資料版本管理,並重現您點選「Compile and Run」(編譯並執行) 按鈕時的整個環境。這樣一來,您就能擁有資料和程式碼的時間機器,且管道會在您開發程式碼的相同環境中執行,不必建構新的 Docker 映像檔。

管道已編譯並上傳至 Kubeflow Pipelines。現在請點選連結前往 Kubeflow Pipelines UI,並查看執行作業。

Kubeflow Pipelines 使用者介面會在新分頁中開啟。等待執行完成。


恭喜!您剛才在 Kubeflow Pipelines 中執行端對端管道,一切都從筆記本開始!
5. 使用超參數調整進行遷移學習
查看結果
查看 cnn-from-scratch 步驟的記錄。(在 Kubeflow Pipelines 使用者介面中,按一下圖表中的步驟,然後點選「記錄」分頁標籤)。這個步驟是從頭訓練卷積類神經網路 (CNN)。請注意,訓練模型的準確率非常低,而且完成這個步驟需要很長時間。

查看 cnn-vgg16 步驟的記錄。在這個步驟中,您對預先訓練的 VGG-16 模型 (由 Visual Geometry Group (VGG) 訓練的類神經網路) 進行遷移學習。準確率比先前的模型高出許多,但仍有進步空間。

現在,請查看 cnn-resnet50 步驟的記錄。在本步驟中,您對預先訓練的 ResNet-50 模型使用了遷移學習。準確度大幅提升。因此,您會在接下來的程式碼研究室中使用這個模型。

超參數調整
返回 Kubeflow UI 中的筆記本伺服器,然後開啟名為 dog-breed-katib.ipynb 的筆記本 (位於 data/kale/examples/dog-breed-classification/ 路徑)。您將使用 Katib,對這個筆記本中的 ResNet-50 模型執行一些超參數調整實驗。請注意,筆記本開頭有一個儲存格,用於宣告參數:

在筆記本的左側窗格中,啟用「HP Tuning with Katib」,執行超參數調整:

然後按一下「Set up Katib Job」(設定 Katib 工作),設定 Katib:

為每個參數定義搜尋空間,並定義目標:

按一下「Compile and Run Katib Job」(編譯並執行 Katib 工作) 按鈕:

查看 Katib 實驗的進度:

按一下「查看」即可查看 Katib 實驗:

按一下「完成」,即可在 Kubeflow Pipelines (KFP) 中查看執行作業:

在 Katib 實驗頁面中,您會看到新的試驗:

在 KFP UI 中,您會看到新的執行作業:

我們來看看剛剛發生了什麼事。先前,Kale 是從筆記本產生管道執行作業,現在則會產生多個管道執行作業,每個作業都會饋送不同的引數組合。
Katib 是 Kubeflow 的元件,可執行一般用途的超參數調整工作。Katib 對實際執行的工作 (在 Katib 術語中稱為試驗) 一無所知。Kale 只會關注搜尋空間、最佳化演算法和目標。Katib 支援以試驗形式執行簡單的 Job (即 Pod),但 Kale 會實作墊片,讓試驗實際在 Kubeflow Pipelines 中執行管道,然後從管道執行作業收集指標。
Katib 實驗產生試驗時,您會在 Katib UI 中看到更多試驗:

在 KFP UI 中執行更多作業:

Katib 實驗完成後,您可以在 Katib UI 中查看所有試驗:

以及 KFP UI 中的所有執行作業:

返回 Notebook 後,您會在 Kale 面板中看到 Katib 實驗旁的資訊按鈕:

按一下即可查看最佳結果和產生該結果的參數:

6. 清理
終止 MiniKF VM
前往 GCP Console 的 Deployment Manager,然後刪除 minikf-on-gcp 部署作業。
7. 恭喜
恭喜!您已成功使用 Kubeflow (MiniKF)、Kale 和 Rok,執行端對端資料科學工作流程!
後續步驟
加入 Kubeflow 社群:
