コンテンツに移動
Containers & Kubernetes

GKE で AI ノートブックと JupyterHub を使用する

2024年1月16日
Google Cloud Japan Team

※この投稿は米国時間 2024 年 1 月 10 日に、Google Cloud blog に投稿されたものの抄訳です。

分散型でコンピューティング負荷の高い ML アプリケーションの昨今の増加により、データ サイエンティストや ML 担当者は、ML モデルのプロトタイプ作成や開発を簡単に行える方法を模索するようになりました。Jupyter ノートブックや JupyterHub を Google Kubernetes Engine(GKE)で実行すると、プラットフォームのコア要素としてセキュリティとスケーラビリティが組み込まれたソリューションを実行する方法を提供できます。

GKE は、コンテナ化アプリケーションをデプロイおよび管理できるスケーラブルで柔軟なプラットフォームを提供するマネージド コンテナ オーケストレーション サービスです。GKE は、基盤となるインフラストラクチャの複雑さを軽減し、デプロイと管理を容易にします。

JupyterHub は、強力なマルチテナント型のサーバーベースのウェブ アプリケーションで、Jupyter ノートブック上でのインタラクションやコラボレーションを可能にします。ユーザーは、ノートブックを実行するためのカスタム イメージや計算リソースを備えたカスタム コンピューティング環境を作成できます。「Zero to JupyterHub for Kubernetes(z2jh)」 は、Kubernetes に JupyterHub をインストールするために使用できる Helm チャートで、複雑なユーザー シナリオに対応した多くの構成を提供します。

このたび、GKE で JupyterHub を使い始めるのに役立つソリューション テンプレートをご利用いただけるようになりました。これにより、GKE テンプレートでの z2jh の使用が大幅に簡素化され、事前構成された GKE クラスタ、JupyterHub 構成、カスタム機能を利用して、JupyterHub を迅速かつ簡単にセットアップできるようになります。さらに、認証や永続ストレージなどの機能を追加し、モデル プロトタイピングや実験に伴う複雑さを軽減しました。このブログ投稿では、ソリューション テンプレート、GKE での JupyterHub エクスペリエンス、GKE で実行することで得られる固有の特性、カスタム認証や永続ストレージなどの機能について説明します。

GKE での Jupyter エクスペリエンス

GKE で Zero to JupyterHub を実行すると、ML アプリケーションのための強力なプラットフォームを提供できますが、インストール プロセスは複雑です。ML 担当者の負担を最小限に抑えるために、このソリューション テンプレートは、インフラストラクチャのセットアップの複雑さを軽減し、認証やセキュリティやノートブックの永続ストレージなどのエンタープライズ プラットフォームに共通の課題を解決します。

セキュリティと認証

ノートブックへの適切なアクセス権を付与することは、センシティブ データを扱う場合に特に困難になることがあります。デフォルトでは、JupyterHub は誰でもアクセスできるパブリック エンドポイントを公開します。このエンドポイントは、意図しないアクセスを防ぐためにロックする必要があります。Google Cloud のソリューションは、Identity-Aware Proxy(IAP)を利用してパブリック エンドポイントへのアクセスを制限します。IAP は、HTTPS によってアクセスされる JupyterHub アプリケーションの一元的な認可レイヤを作成し、アプリケーション レベルのアクセスモデルを利用して、ノートブックへの IAM ベースのアクセス制御を可能にし、ユーザーのデータをより安全に保護します。JupyterHub に認証を追加することで、ユーザーの正当性とノートブックのセキュリティが確保されます。

デフォルトでは、このテンプレートは Google Cloud IAP を通じて IP アドレスを予約します。プラットフォーム管理者は、代わりに、JupyterHub エンドポイントをホストするドメインを提供することもできます。これは、IAP によって保護されます。IAP を構成したら、プラットフォーム管理者はユーザーに「IAP-secure Web App User」のロールを付与してサービス許可リストを更新する必要があります。デプロイされた JupyterHub へのアクセスを許可する方法は、こちらで説明しています。以下の画像もご覧ください。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1-GCP_IAP.max-1800x1800.png

ユーザーが IAP によって制限された JupyterHub エンドポイントに移動すると、Google ログイン画面(下図)が表示され、Google ID でログインできるようになります。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2-Login_Page.max-2000x2000.png

永続ストレージ

GKE で JupyterHub を実行する場合、すぐに使える永続的なストレージ ソリューションは用意されていないため、クラスタが削除されるとノートブックも失われます。ノートブックのデータを永続化するために、このテンプレートには FilestoreGCSFuseCompute Engine Persistent Disk などの Google のストレージ ソリューションと統合するオプションが用意されています。これらは、それぞれのユースケースに応じたさまざまな機能を提供します。

  • Filestore - 動的プロビジョニングと標準的な POSIX をサポートします。永続ボリュームの標準ティアの最小サイズは 1Ti ですが、費用を最適化するためにマルチシェアをサポートしています。
  • GCSFuse - Cloud Storage バケットを永続ボリュームとして使用しますが、手動でバケットを作成する必要があります。したがって、プラットフォーム エンジニアは、ユーザーごとにバケットをプロビジョニングする必要があります。Cloud Storage は Google Cloud コンソールの UI サポートを介して管理でき、アクセス制御は IAM を介して構成できます。
  • Compute Engine Persistent Disk - 動的プロビジョニングをサポートし、異なるディスクタイプをサポートしながら自動的にスケーリングできます。

ストレージ ソリューションの詳細については、こちらのガイドをご覧ください。

ソリューションの概要

このソリューション テンプレートでは、Terraform と Helm チャートを使用して JupyterHub をプロビジョニングします。README ファイルにある段階的な手順に沿って、ご利用を開始してください。このソリューションには、プラットフォーム レベルと JupyterHub レベルの 2 つのリソース グループが含まれています。

プラットフォーム レベルのリソースは、システム管理者が開発環境ごとに 1 回デプロイすることが想定されています。これには、すべてのユーザーが共有する共通のインフラストラクチャと Google Cloud サービスの統合が含まれます。システム管理者は、すでにデプロイされている開発環境を再利用することもできます。

  • GKE クラスタとノードプール - このモジュールは main.tf ファイル内に構成されており、GPU ノードプールを備えた GKE クラスタをデプロイします。GKE では、代替の GPU とマシンタイプも提供します。
  • Kubernetes システムの Namespace とサービス アカウント、および必要な IAM ポリシー バインディング。

システム管理者がクラスタに JupyterHub をインストールすると、以下のリソースが作成されます。システム管理者は、JupyterHub 構成に加えられた変更(つまり、こちらにリストされている変更)を適用するために再インストールする必要があります。

  • JupyterHub z2jh サーバー - ユーザーのために Jupyter ノートブック環境をスピンアップします。
  • IAP 関連の k8s デプロイ - これには、Ingress、バックエンドの構成、Google Cloud IAP と JupyterHub を統合するマネージド証明書が含まれます。
  • ユーザーの選択に応じて、Filestore、GCSFuse、Persistent Disk のいずれかでストレージ ボリュームが作成されます。

カスタマイズ可能なユーザー プロファイル / リソース

GKE の柔軟なコンテナのカスタマイズとノードプール構成は、Jupyter のノートブック プロファイルのコンセプトとうまく合致します。JupyterHub 構成では、事前定義された Jupyter ノートブック イメージ、メモリ、CPU、GPU など、カスタマイズ可能な多数のプリセット プロファイルが提供されます。プロファイルを使用することで、エンジニアは GPU や TPU のような GKE インフラストラクチャを活用してノートブックを実行できます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/3-Jupyterhub_Profiles.max-1700x1700.png

便利な組み合わせ: Jupyter と GKE

Jupyter と GKE の組み合わせは、AI ワークロードを構築、実行、管理するための強力かつシンプルなソリューションを提供します。JupyterHub は使いやすいため、ML モデルやデータ探索に利用することが一般的になっています。GKE と組み合わせると、JupyterHub のスケーラビリティと信頼性が高まり、それ以上のことを行えるようになります。

Ray を使用して JupyterHub を実行する方法については、こちらをご覧ください。

GKE と JupyterHub の使用方法についてご質問がある場合は、GitHub で issue を作成してください。GKE を使用した AI Platform の構築の詳細については、ユーザーガイドをご覧ください。

ー ソフトウェア エンジニア Aaron Liang

ー シニア ソフトウェア エンジニア Anu Reddy

投稿先