《從 Notebooks to Kubeflow Pipelines with HP Tuning》(透過 HP 調整將筆記本遷移至 Kubeflow 管道:數據資料學旅程)

1. 簡介

KubeflowKubernetes 的機器學習工具包,這項專案旨在簡化在 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 主控台中開啟資源管理工具。

建立新專案或選取現有專案:

99b103929d928576.png

請確認符合下列最低需求:

  • 確認您具備專案的擁有者角色
  • 確認專案已啟用「帳單」
  • 如果您使用 GCP 免費方案,或享有 12 個月的試用期和 $300 美元抵免額,請注意,您無法執行 MiniKF 的預設 GCP 安裝作業,因為免費方案提供的資源不足。您需要升級為付費帳戶

如需設定 GCP 專案的詳細說明,請參閱 GCP 說明文件

設定 GCP 專案後,請直接參閱 MiniKF 安裝說明。

開啟預先分配的 GCP 專案

如要開啟預先分配的 GCP 專案,請按一下下方按鈕前往 GCP 主控台,然後開啟左上角漢堡選單中的「首頁」面板。如果畫面空白,請在提示中按一下「是」建立資訊主頁。

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

3. 安裝 MiniKF

建立包含 MiniKF 的 Compute 執行個體

在 GCP Marketplace 中搜尋「MiniKF」。

選取 Arrikto 的 MiniKF 虛擬機器:

d6b423c1911ea85a.png

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

7d07439db939b61c.png

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

7d5f7d17a80a1930.png

等待 MiniKF Compute 執行個體啟動:

5228086caadc44c6.png

登入 MiniKF

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

774e83c3e96cf7b3.png

登入 Kubeflow

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

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

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

6258e0f09e46a6c2.png

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

8cff90ce2f0670bd.png

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

1c6fd768d71c0a92.png

登入 Rok

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

16171f35a935a9af.png

80aad6ba5d298a7e.png

恭喜!您已成功在 GCP 上部署 MiniKF。您現在可以建立筆記本、撰寫機器學習程式碼、執行 Kubeflow Pipelines,以及使用 Rok 進行資料版本控管和重現。

4. 從筆記本內執行管道

在本節中,您將執行 Udacity AI Nanodegree 的專案「Dog Breed Identification」範例。只要提供狗的圖片,最終模型就會估算狗的品種。

在 Kubeflow 叢集中建立筆記本伺服器

前往 Kubeflow 中央資訊主頁的「Notebooks」(筆記本) 連結。

60825e935fd0f39b.png

按一下「新增伺服器」

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

請確認您已選取下列 Docker 映像檔 (請注意,映像檔標記可能有所不同):

gcr.io/arrikto/jupyter-kale:f20978e

新增大小為 5 GB 的空白資料磁碟區,並命名為「data」

8544d9b05826b316.png

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

28c024bcc55cc70a.png

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

52f1f8234988ceaa.png

下載資料和筆記本

系統會開啟新分頁,並顯示 JupyterLab 登陸頁面。在 JupyterLab 中建立新的終端機。

ab9ac96f1a1f0d09.png

在終端機視窗中執行下列指令,前往 data 資料夾,並下載本實驗室其餘部分會用到的筆記本和資料:

cd data/
git clone https://github.com/kubeflow-kale/kale

複製的存放區包含一系列精選範例,內含資料和註解筆記本。

在側欄中,前往 data/kale/examples/dog-breed-classification/ 資料夾並開啟 dog-breed.ipynb 筆記本。

2bc436465522f65b.png

探索「狗品種辨識」範例的機器學習程式碼

目前請勿執行下載資料集的儲存格,因為您要使用剛複製的存放區中包含的一些較小資料集。如果您在家中自行執行這個範例,歡迎下載資料集。

執行 imports 儲存格,匯入所有必要程式庫。請注意,程式碼會失敗,因為缺少程式庫:

5e2b97ab2512f139.png

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

執行下一個儲存格,安裝缺少的程式庫:

c483da77943a6f01.png

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

376b5203209c2c91.png

安裝正確的程式庫後,再次執行 imports 儲存格,即可順利完成。

在 Kubeflow Pipelines 中將筆記本轉換為管道

按一下筆記本左側窗格中的 Kubeflow 圖示,啟用 Kale:

7b96241f2ab6c389.png

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

804cfbf9d76b7e23.png

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

fcd0fb351cdfb359.png

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

18f2f6f0e12393d5.png

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

de1b88af76df1a9a.png

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

e0b467e2e7034b5d.png

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

21a9d54a57f3e20c.png

39e6fa39516d2773.png

恭喜!您剛才在 Kubeflow Pipelines 中執行端對端管道,一切都從筆記本開始!

5. 使用超參數調整進行遷移學習

查看結果

查看 cnn-from-scratch 步驟的記錄。(在 Kubeflow Pipelines 使用者介面中,按一下圖表中的步驟,然後點選「記錄」分頁標籤)。這個步驟是從頭訓練卷積類神經網路 (CNN)。請注意,訓練模型的準確率非常低,而且完成這個步驟需要很長時間。

62bf0835e9896c67.png

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

2b45072da65e20ae.png

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

a1dc84ea48a87820.png

超參數調整

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

87b9f6c98dc1823e.png

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

a518eba74d341139.png

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

f4e34fff6a93aa60.png

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

cfc6b7bcdc685a02.png

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

f9c1ab0a6a3c5e8d.png

查看 Katib 實驗的進度:

f3514011876564db.png

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

ab2f5a5edd48e8dc.png

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

410a843b6f044a4b.png

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

a511dca519580133.png

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

43dd34ee2b75018d.png

我們來看看剛剛發生了什麼事。先前,Kale 是從筆記本產生管道執行作業,現在則會產生多個管道執行作業,每個作業都會饋送不同的引數組合。

Katib 是 Kubeflow 的元件,可執行一般用途的超參數調整工作。Katib 對實際執行的工作 (在 Katib 術語中稱為試驗) 一無所知。Kale 只會關注搜尋空間、最佳化演算法和目標。Katib 支援以試驗形式執行簡單的 Job (即 Pod),但 Kale 會實作墊片,讓試驗實際在 Kubeflow Pipelines 中執行管道,然後從管道執行作業收集指標。

Katib 實驗產生試驗時,您會在 Katib UI 中看到更多試驗:

3e854d3d4bb766c.png

在 KFP UI 中執行更多作業:

ffd30dcefa739962.png

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

9096ae9caa77e42a.png

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

7acc64dfee4f35a3.png

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

95b092180d71dc80.png

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

3b0ce47e548e5afb.png

6. 清理

終止 MiniKF VM

前往 GCP Console 的 Deployment Manager,然後刪除 minikf-on-gcp 部署作業。

7. 恭喜

恭喜!您已成功使用 Kubeflow (MiniKF)、Kale 和 Rok,執行端對端資料科學工作流程!

後續步驟

加入 Kubeflow 社群:

其他資訊