使用 MiniKF 和 Kale 從筆記本到 Kubeflow 管道

1. 簡介

KubeflowKubernetes 專用的機器學習工具包。這個專案旨在實現機器學習 (ML) 工作流程的部署,簡化 Kubernetes 的可攜性與擴充性。目標是提供簡單明瞭的方式,將業界最佳的機器學習開放原始碼系統部署至多樣化的基礎架構。

Kubeflow 部署是什麼樣子?

Kubeflow 部署具有以下優點:

  • 可攜式:支援任何 Kubernetes 叢集,無論是位於 Google Cloud Platform (GCP)、地端部署或不同供應商中皆可使用。
  • 可擴充 - 可運用波動資源,且只會受限於分配給 Kubernetes 叢集的資源數量。
  • 可組合函式 - 強化服務工作處理程序,方便服務人員離線或使用品質不佳的網路工作。

也就是將鬆耦合的微服務整理成單一單元,並部署至各種位置,無論是筆電還是雲端都沒問題。

本程式碼研究室會逐步引導您使用 MiniKF 建立自己的 Kubeflow 部署作業,並從 Jupyter 筆記本中執行 Kubeflow Pipelines 工作流程。

建構項目

在本程式碼研究室中,您將使用 Kubeflow Pipelines 建立複雜的數據資料學管道,過程中不需使用任何 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 管道
  • 如何在筆記本和每個管道步驟中自動建立資料版本

軟硬體需求

這是著重於 Kubeflow 的進階程式碼研究室。如需更多背景資訊和平台簡介,請參閱 Kubeflow 簡介說明文件。我們不會對與本主題無關的概念和程式碼多做介紹,但會事先準備好這些程式碼區塊,屆時您只要複製及貼上即可。

2. 設定環境

設定 GCP 專案 ID 和叢集名稱

如要查看專案 ID,請前往 GCP 控制台的首頁面板,然後點選左上方的漢堡選單。如果畫面空白,請在系統提示時按一下 [是],即可建立資訊主頁。

開啟 GCP 控制台

3fdc4329995406a0.png

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

e8952c0b96067dea.png

然後選取所需專案。您只能有一個:

fe25c1925487142.png

3. 安裝 MiniKF

建立 Compute 執行個體

在 GCP Marketplace 中搜尋「MiniKF」。

選取 Arrikto 的 MiniKF 虛擬機器。

d6b423c1911ea85a.png

按一下 [Launch on Compute Engine] (在 Compute Engine 上啟動) 按鈕,然後選取專案。

b5eeba43053db4bd.png

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

dc401e2bb5a884d9.png

等待 MiniKF Compute 執行個體啟動。

5228086caadc44c6.png

登入 MiniKF

MiniKF VM 啟動後,請按一下「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 後,按一下漢堡圖示以開啟左選單。前往「Snapshot Store」(快照儲存) 並使用 MiniKF 使用者名稱和密碼登入 Rok。

a683198ac4ba900d.png

80aad6ba5d298a7e.png

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

4. 從筆記本中執行管道

在這個部分中,您將執行「鐵達尼號」(Kaggle) 比賽範例,預測哪些乘客在鐵達尼號船難中生存過世。

建立筆記本伺服器

前往 Kubeflow 中央資訊主頁中的「Notebook Servers」連結。

4115cac8d8474d73.png

按一下「New Server」

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

確認您已選取這張圖片:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

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

8544d9b05826b316.png

按一下「Launch」來建立筆記本伺服器。

28c024bcc55cc70a.png

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

2f06041475f45d3.png

下載資料和筆記本

系統隨即會開啟新分頁,顯示 JupyterLab 到達網頁。在 JupyterLab 中建立新的終端機。

2482011174f7bc75.png

在「Terminal」視窗中執行下列指令,找出 data 資料夾,並下載筆記本和後續研究室接下來用到的資料。

cd data/
git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples

這個存放區包含一系列收錄的範例,內含資料和已加註的 Notebooks。前往側欄中的資料夾 data/examples/titanic-ml-dataset/,然後開啟筆記本 titanic_dataset_ml.ipynb

c85baf68b36c63b2.png

探索鐵達尼號挑戰中的機器學習程式碼

逐步執行筆記本。請注意,程式碼會因為缺少程式庫而失敗。

bf2451fd7407e334.png

返回終端機,然後安裝缺少的程式庫。

pip3 install --user seaborn

d90593b21425dd12.png

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

a21f5f563b36ce4d.png

已安裝正確程式庫後再次執行儲存格,看看是否成功。

將筆記本轉換為 Kubeflow 管道

按一下左側窗格中的 Kubeflow 圖示來啟用 Kale。

3f4f9c93b187b105.png

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

15cca32444c1f12e.png

按一下「Compile and Run」按鈕。

bde5cef34f00e258.png

查看快照的進度。

9408f46abb2493f5.png

查看管道執行作業的進度。

9edbde68032f5e4b.png

點選連結前往 Kubeflow Pipelines UI,並查看執行作業。

a81646a22584e1b9.png

請等待作業完成。

44bee7dc0d24ec21.png

d377b6d574a4970.png

恭喜!您剛從筆記本執行了端對端 Kubeflow 管道!

5. 磁碟區快照的可重現性

查看結果

查看記錄檔,瞭解第二個管道步驟 Results。請注意,所有預測者顯示的分數都是 100%。經驗豐富的數據資料學家會立即發現這件事很可疑。這表示我們的模型並未一般化,而是過度配適訓練資料集。這可能是因為模型使用的資料有問題。

2a594032c2dd6ff6.png

重現先前的狀態

幸好,Rok 負責處理資料版本管理,並且重現整個環境,就像您點選「Compile and Run」按鈕當時的一樣。如此一來,您就有時間機器可以儲存資料和程式碼。先恢復管道的狀態,再訓練其中一個模型,看看情況發生了。請查看「隨機森林」步驟,然後按一下「成果」

4f25ca4560711b23.png

按照Markdown 中的步驟進行,也就是點按對應的連結,在 Rok UI 中查看數據匯報。

e533bc781da9355a.png

複製 Rok 網址。

d155d19731b5cedd.png

前往「Notebook Servers」連結。

aafeab01f3ef0863.png

按一下「New Server」

f2265a64e8f9d094.png

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

9ba4d4128a3bdeea.png

指定筆記本的名稱。

7685c3bf35fc74b2.png

確認您已選取這張圖片:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

按一下「Launch」來建立筆記本伺服器。

28c024bcc55cc70a.png

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

34955a64ae316de1.png

請注意,筆記本會在您已建立的管道步驟的確切儲存格中開啟。

a1f7c81f349e0364.png

在背景中,Kale 已匯入所有程式庫並載入先前步驟中的變數,恢復筆記本的狀態。

先前的狀態進行偵錯

在這個儲存格中新增列印指令:

print(acc_random_forest)

按下 Shift + Return 鍵執行使用中的儲存格,重新訓練隨機樹系並顯示分數。是 100,

e2a8a3b5465fcb5d.png

現在來看看訓練資料中是否有異常現象。如要探索及修正這個問題,請選取上一個儲存格,然後按一下加號圖示 (+),即可在隨機森林標記的上方新增儲存格。

d1077f32dff9620f.png

新增下列文字,然後執行儲存格來輸出訓練集。

train_df

2854798ff01aed4e.png

糟糕!含有訓練標籤 (「Survived」) 的資料欄誤以為輸入特徵加入!模型學會如何聚焦在「Survived」並忽略其餘部分,汙染輸入內容這個資料欄與模型的目標完全相符,且不會在預測期間顯示,因此必須從訓練資料集中移除,才能協助模型從其他特徵學習。

新增錯誤修正

如要移除此欄,請編輯儲存格,新增這個指令:

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566.png

啟用 Kale,並確認移除「Survived」標籤的儲存格是「特徵工程」管道步驟的一部分 (外框顏色應相同)。

按一下「Compile and Run」按鈕,再次執行管道。

點選連結前往 Kubeflow Pipelines UI,並查看執行作業。

請等候 results 步驟完成,然後查看記錄檔,即可看到最終結果。您現在已經獲得實際的預測分數!

8c6a9676b49e5be8.png

6. 清除所用資源

刪除 MiniKF VM

前往 GCP 控制台中的「Deployment Manager」,然後刪除 minikf-1 部署作業。

7. 恭喜

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

後續步驟

加入 Kubeflow 社群:

其他資訊