Kubeflow for Docker に依存する

Kubeflow を Docker Desktop for Mac または Windows でネイティブに実行する

これは、Docker Captainであり、Shell New EnergiesのフルスタックソフトウェアおよびインフラストラクチャアーキテクトであるAlex Iankoulskiによるゲスト投稿です。 ここで表明された見解は彼自身のものであり、シェルやドッカーによって反対も支持もされていません。 

このブログでは、MacまたはWindows用のDockerデスクトップを使用してKubeflowを実行する方法を紹介します。 これを簡単にするために、 Githubで見つけることができるDockerプロジェクトに依存するを使用しました。

根拠

クラウド時代の開発ワークフローがホスト環境とリモート環境へと地殻変動しているにもかかわらず、開発者のローカルマシンでは依然としてかなりの量の作業と実験が行われています。 スケールダウン機能により、ローカルでクラウド展開を模倣でき、安全で分離された環境でプレイし、迅速に学習し、変更を加えることができます。 この 理論的根拠 の良い例は、 Kubeflow とMiniKFによって提供されています。

概要

Kubeflowが2018年にGoogleによって最初にリリースされて以来、特に機械学習パイプラインのオーケストレーションのためのデータサイエンスの世界では、採用が大幅に増加しています。 Kubeflowをデスクトップとサーバーの両方に展開するには、 入門 ガイドで説明されているように、さまざまな方法があります。 ただし、MacとWindowsのデスクトップ展開は、 VagrantVirtualBoxを使用した仮想マシンの実行に依存しています。 MacまたはPCにVagrantとVirtualBoxをインストールしたくないが、Kubeflowを実行したい場合は、単にDockerに依存することができます。 この記事では、Kubeflow を Docker デスクトップにネイティブにデプロイする方法について説明します。 

セットアップ

前提 条件

Kubeflow は Kubernetes と Docker ランタイムに大きく依存しています。 Mac または Windows でこれらの要件の両方を満たす最も簡単な方法は、 Docker Desktop (バージョン 2.1.x.x 以降) をインストールすることです。 Docker Desktop の設定で、[Kubernetes] タブに移動し、[Kubernetes を有効にする] をオンにします。

ドッカーデスクトップでkubernetesを有効にするには、[設定]で選択します。
図1 – Docker Desktop の Kubernetes 設定

Docker Desktop で Kubernetes 機能を有効にすると、ローカル マシン上に単一ノードの Kubernetes クラスターが作成されます。

この記事では、Mac 用 Docker デスクトップで Kubeflow をセットアップするための詳細なチュートリアルを提供します。 Linux コンテナーを使用して Docker Desktop for Windows に Kubeflow をデプロイするには、次の 2 つの追加の前提条件が必要です。 

  1. Linux シェル – Kubeflow のインストール手順から bash コマンドを実行します。 
  2. Kfctl および kubectl CLI – Kubeflow デプロイを初期化、生成、および適用する

これらの依存関係の両方を満たす最も簡単な方法は、kfctl ユーティリティと kubectl ユーティリティを持つ Linux コンテナーを実行することです。 この目的のために、Docker に依存するプロジェクト が作成されました。 2つのCLIを使用可能な状態でbashシェルを起動するには、次のコマンドを実行します。

docker run -it --rm -v <kube_config_folder_path>:/root/.kube iankoulski/kfctl bash

Mac と Windows の両方の残りのセットアップ手順は同じです。

リソース要件

既存の Kubernetes クラスターに Kubeflow をデプロイするための 手順 では、次のリソース要件を指定します。

  • 4 個の仮想プロセッサ
  • 50 GBストレージ
  • 12 GB のメモリ

Docker デスクトップの設定は、以下に示すように、これらの要件に対応するように調整する必要があります。

ドッカーデスクトップのドッカーエンジンで使用可能なリソース制限を設定します。
図2 – DockerデスクトップのCPUとメモリの設定
Dockerデスクトップでのディスクイメージサイズの構成。
図3 – Dockerデスクトップでのディスクイメージサイズの設定

設定は、ローカル コンピューターで実行されている可能性のあるシステム コンテナーやその他のアプリケーションに対応するために、最低限必要なリソース以上に調整されることに注意してください。

配備

kfctl_k8s_istio 構成 の手順に従います 。

  1. リリースアーカイブからお好みのバージョンをダウンロードします。
    curl -L -o kfctl_v0.6.2_darwin.tar.gz https://github.com/kubeflow/kubeflow/releases/download/v0.6.2/kfctl_darwin.tar.gz
  2. アーカイブを抽出します。
    tar -xvf kfctl_v0.6.2_darwin.tar.gz
  3. 環境変数を設定します。
    export PATH=$PATH:$(pwd)
    export KFAPP=localkf
    export CONFIG=https://raw.githubusercontent.com/kubeflow/kubeflow/v0.6-branch/bootstrap/config/kfctl_k8s_istio.0.6.2.yaml

  4. デプロイの初期化:
    kfctl init ${KFAPP} --config=${CONFIG}
    cd ${KFAPP}
    kfctl generate all -V

注: 上記の手順は Kubeflow リリース 0.6.2 用であり、例として使用するためのものです。 他のリリースでは、アーカイブ・ファイル名、環境変数の名前と値、および kfctl コマンドが若干異なります。 これらは、リリース固有の展開手順で使用できます。

  1. プリプル コンテナー イメージ (オプション)

Kubeflow のローカルでのデプロイを容易にするために、必要なすべての Docker イメージを事前にプルできます。 コンテナー イメージがマシンに既に存在する場合、Docker Desktop のメモリ使用量は低いままです。 デプロイ時にすべてのイメージをプルすると、メモリ使用率が大幅にスパイクし、Docker デーモンのリソースが不足する可能性があります。 画像を事前にプルすることは、16GBのラップトップでKubeflowを実行する場合に特に役立ちます。

すべてのコンテナー イメージを事前にプルするには、$KFAPP/kustomize フォルダーで次の 1 行のスクリプトを実行します。

for i in $(grep -R image: . | cut -d ':' -f 3,4 | uniq | sed -e 's/ //' -e 's/^"//' -e 's/"$//'); do echo "Pulling $i"; docker pull $i; done;
kubeflow コンテナー イメージを事前にプルしたときの cli 出力。
図4 – Kubeflowコンテナのプリプル画像

インターネット接続によっては、完了するまでに数分かかる場合があります。 Docker Desktop のリソースが不足した場合でも、再起動してスクリプトを再度実行すると、中断したところから残りのイメージのプルが再開されます。 

Windows で kfctl コンテナーを使用している場合は、上記の 1 行のスクリプトを変更して、docker プル コマンドをファイルに保存し、任意の Docker シェルから実行することをお勧めします。

  1. Kubeflow デプロイを Kubernetes に適用します。
cd ${KFAPP}
kfctl apply all -V
ドッカーデスクトップで実行している場合のデプロイ出力ポッドとkubeflowポッド。
図5 – デプロイ出力とKubeflowポッド – Docker Desktopで実行されている「kubectl get pods –すべての名前空間」を実行することで見つかります。

注: 既存のデプロイメントは、"kfctl delete all -V" を実行することで削除できます。

  1. Kubeflow エントリポイントを決定する

エンドポイントを特定するには、istio-system 名前空間内のすべてのサービスを一覧表示します。
kubectl get svc -n istio-system

入力ゲートウェイ サービスの CLI 出力。
図 6 – Istio イングレス ゲートウェイ サービス

Kubeflow エンドポイント サービスは、既定の HTTP ポート (80) で接続された NodePort 上のイングレス ゲートウェイ サービスを介して行われます。 ノードのポート番号は 31380 です。 Kubeflowにアクセスするには 、以下を使用します http://127.0.0.1:31380

クベフローの使用

Kubeflow中央ダッシュボードにアクセスできるようになりました。

kubeflow 中央ダッシュボード。
図7 – Kubeflowダッシュボード

Kubeflow に含まれているサンプル パイプラインの 1 つを実行できます。 [パイプライン]、[実験] の順に選択し、[条件式] を選択します (または、ダッシュボード画面の [サンプル] 基本 – 条件式 ] リンクをクリックします)。 

kubeflow 条件付き実行パイプライン ビュー。
図 8 – 条件付き実行パイプライン

次に、[ + 実行の作成 ] ボタンをクリックし、名前を入力します (例: 条件付き実行テスト)、実験を選択し、[ 開始 ] をクリックして実行を開始します。 実行の一覧からパイプラインを選択して、パイプラインに移動します。

kubeflow 条件付き実行パイプラインが実行されます。
 図 9 – 条件付き実行パイプラインの実行

完成したパイプラインの実行は、上記の図 9 のようになります。 このパイプラインのコイン投げはランダムな性質を持っているため、実際の出力は異なる可能性があります。 グラフ内のノードを選択して、そのノードに関連付けられているさまざまなアセット (ログを含む) を確認します。

結論

Docker Desktop を使用すると、Kubernetes クラスターを必要とするものを含め、ローカル マシン上でコンテナー アプリケーションを簡単に実行できます。 Kubeflow は、通常、クラウド環境またはオンプレミス環境の大規模なクラスターを対象とするデプロイです。 この記事では、Kubeflow を Docker デスクトップにローカルにデプロイして使用する方法について説明しました。 

参照

  1. Docker Desktop
  2. クベフローについて
  3. ミニKFの理論的根拠
  4. Kubernetes
  5. クベフローはじめに
  6. 放浪者
  7. バーチャルボックス
  8. Kubeflowの展開手順
  9. ドッカープロジェクトに依存
  10. Kfctl コンテナー イメージ

クレジット

この投稿と関連トピックに協力してくれた次の人々に感謝します。

  • ヤニス・ザルカダス、アリクト 
  • コンスタンティノス・ヴェネタノプロス、アリクト
  • ジョシュ・ボタム、アリクト
  • ファビオ・ノナト・デ・パウラ、シェル
  • ジェニー・ブルシオ、ドッカー
  • デビッド・アロンチック、マイクロソフト
  • スティーブンターナー、ドッカー
  • デビッドフリードランダー、ドッカー

Docker Desktop と Docker での Kubernetes の実行の詳細については、以下を参照してください。