1. 簡介
| Kubeflow 是 Kubernetes 的機器學習工具包,這項專案旨在簡化在 Kubernetes 中部署機器學習 (ML) 工作流程的作業,並提高其可攜性與可擴充性。此專案目標是提供直觀的方式,協助使用者將領先業界的 ML 專屬開放原始碼系統部署至各個不同的基礎架構。 |
Kubeflow 部署作業的流程為何?
Kubeflow 部署作業是指:
- 可攜性 - 無論 Kubernetes 叢集位於 Google Cloud Platform (GCP)、內部部署環境或不同供應商之間,都可以使用。
- 可擴充:可運用變動的資源,且只受限於分配給 Kubernetes 叢集的資源數量。
- 可組合 - 透過 Service Worker 強化,可在離線或低品質網路環境下運作。
這項技術可將鬆散耦合的微服務整理成單一單元,並部署至各種位置,無論是筆電或雲端都適用。
本程式碼研究室將逐步說明如何使用 MiniKF 建立自己的 Kubeflow 部署作業,以及如何從 Jupyter Notebook 內執行 Kubeflow Pipelines 工作流程。
建構項目
在本程式碼研究室中,您將使用 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,只要按一下按鈕即可
- 如何在 Notebook 和每個管道步驟中自動為資料建立版本
軟硬體需求
- 您擁有「擁有者」權限的有效 GCP 專案
本程式碼研究室為進階主題,著重於 Kubeflow。如需更多背景資訊和平台簡介,請參閱「Kubeflow 簡介」說明文件。我們不會對與主題無關的概念和程式碼多做介紹,但會事先準備好這些程式碼區塊,屆時您只要複製及貼上即可。
2. 設定環境
設定 GCP 專案 ID 和叢集名稱
如要尋找專案 ID,請前往 GCP 主控台的首頁面板 (位於左上方的漢堡選單中)。如果畫面空白,請在提示中按一下「是」建立資訊主頁。

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

然後選取專案。你應該只會看到一個:

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

按一下「在 Compute Engine 上啟動」按鈕,然後選取專案。

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

等待 MiniKF Compute 執行個體啟動。

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

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


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

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

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

登入 Rok
登入 Kubeflow 後,按一下漢堡圖示開啟左選單。前往 Snapshot Store,並使用 MiniKF 使用者名稱和密碼登入 Rok。


恭喜!您已成功在 GCP 上部署 MiniKF!您現在可以建立 Notebook、編寫機器學習程式碼,以及執行 Kubeflow Pipelines。使用 Rok 進行資料版本管理和重現。
4. 從筆記本內執行管道
在本節中,您將執行鐵達尼號範例,這是 Kaggle 競賽,目的是預測哪些乘客在鐵達尼號沉船事故中生還。
建立 Notebook 伺服器
前往 Kubeflow 中央資訊主頁的「Notebook Servers」(筆記本伺服器) 連結。

按一下「新增伺服器」。

指定 Notebook 伺服器的名稱。

確認已選取這張圖片:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
新增大小為 5 GB 的空白資料磁碟區,並命名為「data」。

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

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

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

在終端機視窗中執行下列指令,前往 data 資料夾,並下載本實驗室其餘部分會用到的筆記本和資料。
cd data/ git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples
這個存放區包含一系列精選範例,以及資料和註解的 Notebook。前往側欄中的 data/examples/titanic-ml-dataset/ 資料夾,然後開啟 titanic_dataset_ml.ipynb 筆記本。

探索鐵達尼號挑戰的機器學習程式碼
逐步執行筆記本。請注意,由於缺少程式庫,程式碼會失敗。

返回終端機並安裝缺少的程式庫。
pip3 install --user seaborn

按一下「重新整理」圖示,重新啟動筆記本核心。

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

探索每個儲存格的依附元件。瞭解多個儲存格如何成為單一管道步驟的一部分,以及管道步驟如何取決於先前的步驟。

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

查看快照的進度。

查看管道執行的進度。

按一下連結前往 Kubeflow Pipelines 使用者介面,並查看執行作業。

等待作業完成。


恭喜!您剛從筆記本執行端對端 Kubeflow Pipeline!
5. 使用磁碟區快照進行重現
查看結果
查看倒數第二個管道步驟「結果」的記錄。請注意,所有預測指標的分數都是 100%。經驗豐富的資料科學家會立即發現這點有異。這表示模型無法一般化,而是過度配適訓練資料集。這可能是因為模型使用的資料有問題。

重現先前的狀態
幸好,Rok 會負責處理資料版本控管,並重現您點選「Compile and Run」(編譯並執行) 按鈕時的整個環境。這樣一來,您就能為資料和程式碼建立時光機。因此,我們來恢復訓練其中一個模型前的管道狀態,看看發生了什麼事。查看 randomforest 步驟,然後按一下「構件」。

按照「Markdown」一文的步驟操作,也就是點選相應連結,在 Rok UI 中查看快照。

複製 Rok 網址。

前往「Notebook Servers」連結。

按一下「新增伺服器」。

貼上先前複製的 Rok 網址,然後按一下「自動填入」按鈕。

指定筆記本的名稱。

確認已選取這張圖片:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
按一下「啟動」即可建立筆記本伺服器。

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

請注意,筆記本會開啟您產生的管道步驟的確切儲存格。

在背景中,Kale 會匯入所有程式庫,並載入先前步驟中的變數,藉此恢復 Notebook 的狀態。
偵錯先前狀態
在這個儲存格中新增列印指令:
print(acc_random_forest)
按下 Shift + Return 鍵執行現用儲存格,重新訓練隨機森林並列印分數。100。

現在來看看訓練資料是否有任何奇怪之處。如要探索及修正這個問題,請選取前一個儲存格,然後按一下加號圖示 (+),在隨機森林 Markdown 上方新增儲存格。

新增下列文字並執行儲存格,即可列印訓練集。
train_df

糟糕!訓練標籤所在的資料欄 (「Survived」) 誤列為輸入特徵!模型已學會專注於「Survived」特徵,並忽略其餘特徵,導致輸入內容受到污染。這個資料欄與模型的目標完全相符,且預測時不會出現,因此必須從訓練資料集中移除,讓模型從其他特徵學習。
新增錯誤修正
如要移除這個資料欄,請編輯儲存格,加入下列指令:
train_df.drop('Survived', axis=1, inplace=True)
train_df

啟用 Kale,並確認移除「Survived」標籤的儲存格屬於 featureengineering 管道步驟 (應具有相同的外框顏色)。
按一下「Compile and Run」(編譯並執行) 按鈕,再次執行管道。
按一下連結前往 Kubeflow Pipelines 使用者介面,並查看執行作業。
等待「結果」步驟完成,然後查看記錄檔中的最終結果。現在您可取得實際的預測分數!

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