1. はじめに
| Kubeflow は、Kubernetes の機械学習ツールキットです。Kubeflow は、Kubernetes 上での機械学習(ML)ワークフローの Deployment をシンプル、ポータブル、そしてスケーラブルなものにすることに特化したプロジェクトです。その目標は、クラス最高のオープンソース ML 用システムをさまざまなインフラストラクチャに簡単にデプロイできるようにすることです。 |
Kubeflow のデプロイはどのような形で行われますか?
Kubeflow の Deployment のメリットは以下のとおりです。
- ポータブル - Google Cloud Platform(GCP)、オンプレミス、プロバイダ間など稼働場所に関係なく、あらゆる Kubernetes クラスタで動作します。
- スケーラブル - リソースの変動に対応可能であり、Kubernetes クラスタに割り当てられたリソース数によってのみ制限されます。
- 構成可能 - Service Worker で拡張されるため、オフラインや低品質のネットワーク上でも作業可能です。
疎結合のマイクロサービスを 1 つの単位にまとめて、ノートパソコンやクラウドなど、さまざまな場所にデプロイする手段です。
この Codelab では、MiniKF を使用して独自の Kubeflow デプロイを作成し、Jupyter ノートブック内から Kubeflow Pipelines ワークフローを実行する方法について説明します。
作成するアプリの概要
この Codelab では、CLI コマンドや SDK を使用せずに、Kubeflow Pipelines を使用して複雑なデータ サイエンス パイプラインを構築します。Kubernetes や Docker に関する知識は必要ありません。完了するとインフラストラクチャには以下が含まれるようになります。
- 自動的にインストールされる MiniKF(Mini Kubeflow)VM:
- Kubernetes(Minikube を使用)
- Kubeflow
- 汎用 Jupyter Notebook を Kubeflow Pipelines ワークフローに変換するツールである Kale(GitHub)
- データのバージョン管理と再現性のための Arrikto Rok
学習内容
- MiniKF を使用して Kubeflow をインストールする方法
- CLI コマンドや SDK を使用せずに Jupyter Notebook を Kubeflow Pipelines に変換する方法
- ボタンをクリックしてノートブック内から Kubeflow Pipelines を実行する方法
- Notebook とすべてのパイプライン ステップでデータを自動的にバージョン管理する方法
必要なもの
- オーナー権限があるアクティブな GCP プロジェクト
これは、Kubeflow に焦点を当てた上級者向けの Codelab です。背景とプラットフォームの概要については、Kubeflow の概要のドキュメントをご覧ください。関連のない概念とコードブロックについては軽く触れるにとどめ、そのままコピーして貼り付けられるようにしています。
2. 環境を設定する
GCP プロジェクト ID とクラスタ名を設定する
プロジェクト ID を確認するには、左上のハンバーガー メニューにある GCP Console の [ホーム] パネルにアクセスします。画面が空の場合は、プロンプトで [はい] をクリックしてダッシュボードを作成します。

プロジェクトがまだ選択されていない場合は、[プロジェクトを選択] をクリックします。

プロジェクトを選択します。1 つだけにする必要があります。

3. MiniKF をインストールする
Compute インスタンスを作成する
GCP Marketplace で「MiniKF」を検索します。
Arrikto の MiniKF 仮想マシンを選択します。

[Compute Engine 上で起動] ボタンをクリックして、プロジェクトを選択します。

[構成とデプロイ] ウィンドウで、MiniKF インスタンスの名前を選択し、デフォルトのオプションをそのままにします。[デプロイ] ボタンをクリックします。

MiniKF コンピューティング インスタンスが起動するまで待ちます。

MiniKF にログインする
MiniKF VM が起動したら、[SSH] ボタンをクリックして接続し、ログインします。画面上の手順に沿って minikf コマンドを実行します。これにより、Minikube、Kubeflow、Rok のデプロイが開始されます。完了するまでに数分かかります。

Kubeflow にログインする
インストールが完了し、すべての Pod の準備が整ったら、MiniKF ダッシュボードにアクセスします。MiniKF のユーザー名とパスワードを使用して Kubeflow にログインします。


Chrome ユーザーには次の画面が表示されます。

Firefox ユーザーには次の画面が表示されます。

Safari をご利用の場合は、次の画面が表示されます。

Rok にログインする
Kubeflow にログインしたら、ハンバーガー アイコンをクリックして左側のメニューを開きます。Snapshot Store に移動し、MiniKF のユーザー名とパスワードを使用して Rok にログインします。


おめでとうございます!GCP に MiniKF が正常にデプロイされました。これで、ノートブックを作成し、ML コードを記述して、Kubeflow Pipelines を実行できるようになりました。データのバージョニングと再現性には Rok を使用します。
4. ノートブック内からパイプラインを実行する
このセクションでは、タイタニック号の難破事故でどの乗客が生き残ったかを予測する Kaggle コンペティションであるタイタニック号の例を実行します。
ノートブック サーバーを作成する
Kubeflow の中央のダッシュボードで [ノートブック サーバー] リンクに移動します。

[新しいサーバー] をクリックします。

ノートブック サーバーの名前を指定します。

この画像が選択されていることを確認します。
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
このリポジトリには、データとアノテーション付きのノートブックを含む一連の厳選された例が含まれています。サイドバーの data/examples/titanic-ml-dataset/ フォルダに移動し、ノートブック titanic_dataset_ml.ipynb を開きます。

タイタニック チャレンジの ML コードを確認する
ノートブックをステップごとに実行します。ライブラリがないため、コードが失敗します。

ターミナルに戻り、不足しているライブラリをインストールします。
pip3 install --user seaborn

[更新] アイコンをクリックして、ノートブック カーネルを再起動します。

正しいライブラリをインストールしてセルを再度実行し、成功することを確認します。
ノートブックを Kubeflow パイプラインに変換する
左側のペインで Kubeflow アイコンをクリックして、Kale を有効にします。

セルごとの依存関係を確認します。複数のセルが 1 つのパイプライン ステップの一部になる方法と、パイプライン ステップが前のステップに依存する仕組みを確認します。

[コンパイルして実行] ボタンをクリックします。

スナップショットの進行状況を確認します。

パイプライン実行の進行状況を確認します。

リンクをクリックして Kubeflow Pipelines UI に移動し、実行を表示します。

完了するまで待ってください。


おめでとうございます!ノートブックからエンドツーエンドの Kubeflow パイプラインを実行しました。
5. Volume Snapshots による再現性
結果を調べる
最後から 2 番目のパイプライン ステップ Results のログを確認します。すべての予測子のスコアが 100% になっていることに注目してください。経験豊富なデータ サイエンティストであれば、すぐに不審な点に気づくでしょう。これは、モデルが一般化されておらず、トレーニング データセットに過剰適合していることを示す良い指標です。これは、モデルで使用されるデータに関する問題が原因である可能性があります。

以前の状態を再現する
幸いなことに、Rok はデータ バージョニングと、[コンパイルして実行] ボタンをクリックした時点の環境全体の再現を処理します。これにより、データとコードのタイムマシンが作成されます。モデルの 1 つをトレーニングする前のパイプラインの状態を再開して、何が起こっているかを確認しましょう。randomforest ステップを確認し、[アーティファクト] をクリックします。

マークダウンの手順に沿って、対応するリンクをクリックして Rok UI でスナップショットを表示します。

Rok URL をコピーします。

[Notebook Servers] リンクに移動します。

[新しいサーバー] をクリックします。

先ほどコピーした Rok URL を貼り付けて、[自動入力] ボタンをクリックします。

ノートブックの名前を指定します。

この画像が選択されていることを確認します。
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
[起動] をクリックして、ノートブック サーバーを作成します。

ノートブック サーバーが使用可能になったら、[接続] をクリックして接続します。

ノートブックは、生成したパイプライン ステップの正確なセルで開きます。

バックグラウンドで、Kale はすべてのライブラリをインポートし、前の手順から変数を読み込んで、ノートブックの状態を再開しました。
前の状態をデバッグする
このセルに print コマンドを追加します。
print(acc_random_forest)
Shift + Return キーを押してアクティブなセルを実行し、ランダム フォレストを再トレーニングしてスコアを出力します。100 です。

次に、トレーニング データに異常がないか確認します。この問題を調べて修正するには、前のセルを選択してプラスアイコン(+)をクリックし、ランダム フォレストのマークダウンの上にセルを追加します。

次のテキストを追加し、セルを実行してトレーニング セットを出力します。
train_df

エラー: トレーニング ラベル(「Survived」)を含む列が、誤って入力特徴として含まれています。モデルは「Survived」特徴量に注目し、残りの特徴量を無視するように学習したため、入力が汚染されています。この列はモデルの目標と完全に一致し、予測時には存在しないため、モデルが他の特徴から学習できるように、トレーニング データセットから削除する必要があります。
バグ修正を追加する
この列を削除するには、セルを編集して次のコマンドを追加します。
train_df.drop('Survived', axis=1, inplace=True)
train_df

Kale を有効にして、Survived ラベルを削除するセルが featureengineering パイプライン ステップの一部であることを確認します(同じアウトラインの色になっているはずです)。
[コンパイルして実行] ボタンをクリックして、パイプラインをもう一度実行します。
リンクをクリックして Kubeflow Pipelines UI に移動し、実行を表示します。
結果の手順が完了するまで待ってから、ログを表示して最終結果を確認します。これで、現実的な予測スコアが得られました。

6. クリーンアップ
MiniKF VM を破棄する
GCP Console で [Deployment Manager] に移動し、minikf-1 デプロイを削除します。
7. 完了
これで、Kubeflow(MiniKF)、Kale、Rok を使用してエンドツーエンドのデータ サイエンス ワークフローを正常に実行できました。
次のステップ
Kubeflow コミュニティに参加する:
