[レポート] Amazon EKSとKubeflowを使った機械学習基盤の構築 #CON306 #reinvent

本エントリはAWS re:Invent 2019のセッション CON306 Building machine-learning infrastructure on Amazon EKS with Kubeflowのレポートです。 Kubeflowの概要とBabylon社での事例について
2019.12.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

本エントリはAWS re:Invent 2019のセッション CON306 Building machine-learning infrastructure on Amazon EKS with Kubeflowのレポートです。 このセッションの動画資料はそれぞれ公開されています。

セッション概要

Data science, machine learning (ML), and artificial intelligence have exploded in popularity in the last few years, with companies building out dedicated ML teams. Kubeflow is the ML toolkit for Kubernetes and provides useful components resolving problems in multiple areas. For enterprise users, it still cannot fulfill all the requirements for out-of-the-box deployment. Some customizations need to be made, like authentication, training job monitoring, user profile, and resource quota management. In this session, we show you a real use case of how to build ML using Kubeflow, along with challenges and solutions to address them.

スピーカー

  • Yaniv Donenfeld - Sr. Business Development Manager, Amazon Web Services
  • Jean-Marie Ferdegue - Director of Platform Engineering, Babylon Health
  • Jeremie Vallee - AI Infrastructure Lead, Babylon Health

Kubeflow

機械学習になぜKubernatesを用いるのか

他のKubernates上のアプリケーションと同じように次のようなメリットがあるから

  • Composability
    • kubernates上で動作するフレームワークを利用できる
    • カスタムリソースを構築したり、APIを使ってカスタマイズができる
  • Portability
    • ラップトップやデスクトップGPUから始めて、データ量が増えモデルが大きくなってきたらクラウド上で実行可能
    • ヴァンガードのように世界中のあらゆるロケーションにデプロイできる
  • Scalability

Amazon EKS

  • マネージドなKubernatesのコンロールプレーン、データプレーンはアタッチ可能
  • アップストリームのKubernatesと同じ機能を提供(フォークしていない)
  • エンタープライズの本番ワークロードを実行可能な環境を提供
  • AWSサービスとの統合が可能

機械学習に関わる各ロールからみた時

  • 機械学習の専門家は下記のものがあるといい
    • インフラの抽象化: EC2やEBS・・・などインフラの詳細を知らずともモデルのデプロイができるAPIやGUI
    • Sharing and collaboration
    • モデルのビルド、学習、テスト、デプロイなどend to endで実行できるワークフロー
    • Experiment management
    • ハイパーパラメータチューニングなどを行うツール
  • 運用チームは下記を実装する必要がある
    • An end to end platform
    • Infrastructure abstraction
    • Authentication and authorization support (multi-tenant access): グループや個人のリソースへのアクセスと操作の権限を管理する必要がある
    • Resource and quota management

Kubeflowの紹介

これまで述べたような目的を満たすOSSツールとしてKubeflowがある。 KubeflowはKubernates上に構築されたプラグイン可能な多数のコンポーネントから構成されている。 プラガブルな仕組みを提供しているメリットは、例えば予測コンポーネントにある時点では少数のオプションしかなくても、明日には多くの選択肢が提供されるかもしれない、ということ。 コンポーネントには次のようなものがある - モデルのデプロイ - 学習 - ノートブック - ハイパーパラメータチューニングy

プロトタイピング

  • Jupyter、Jupyter Notebookによるプロトタイピング
  • モデルのビルド、デプロイ、学習が行える
  • コードのライブ実行や、数式、ビジュアル化と説明テキストを記述できる
  • 40以上のプログラミング言語をサポート
  • ノートの共有と共同作業が行える
  • AWS上では
    • EFSを使うことでトレーニングデータと結果の再利用が可能
    • awscliとECRのサポート

分散学習

  • 分散学習によって自動運転用ディープラーニングモデルのような学習に時間がかかるモデルの学習を効率化できる
  • Horovod + MPIJobによるマルチノードでの学習
  • FSx Lustre / EFSを使ったデータセットコピー、共有、再利用
    • 一度FSx Lustreにデータをコピーするとその後は複数のトレーニングジョブからデータを参照できる
    • S3上のファイルを透過的に参照できる
  • 参考

推論

  • KFServingによってモデルを推論用のエンドポイントとしてデプロイできる
  • KFServingはKnative上のServingコンポーネント
  • 複数のフレームワーク(SKLearn, pytorch, tensor flow)をサポートしている
  • デプロイ時には設定ファイルでもモデルファイルのパスとフレームワークを指定するだけ

パイプライン

  • Kubeflow Pipelines
    • GUIによって実験やジョブの実行を管理、トラッキングできる
    • 複数ステップからなるワークフローを管理できるワークフローエンジンArgoを備えている
    • SDKを使ってパイプラインやコンポーネントを記述する
  • パイプラインの記述
    • パイプラインはPythonで記述する
    • 各ステップは、パラメータなどのメタデータと実処理に相当するコンテナイメージから構成されている
  • SageMakerのパイプラインのコンポーネントとして利用できる => GitHub

Kubeflow 1.0

  • 2020 1月リリース予定
  • AWS関連のアップデート
    • Multi user support
    • Kubeflow pipelines
    • Managed contributors
    • IAM Roles for Service Accounts integration with notebooks

Babylonでの事例

概要

  • モバイルアプリを使った遠隔での医師や医療専門家との遠隔相談を提供している
  • チャットボットによって収集した情報を元にAIによる症状の分析、医療診断を行う

BabylonのAI Platform

  • チャレンジ
    • 安全でセキュアな環境をリサーチチームへ提供する
    • データのローカリティ
    • モデルのトレーニングと管理をグローバルで行う
    • エンジニアリング効率全体の改善
  • ソリューション
    • AI toolkit: Kubeflow
    • 1リージョン、1クラスタ構成
    • デプロイフロー
      • Kustomize manifestsで生成したyamlをGitHubで管理し、GitHub上の変更をトリガーとしてweave fluxで自動デプロイを行う
      • デプロイ作業を自動化し、ミスを防ぐとともに誰がいつ何をデプロイしたのかトレースできるようにしている
      • Kubernatesの設定ファイルを生成するツール shipcat を内製しデプロイ時の設定記述を簡略化している
    • プロジェクトの分離とコラボレーション
      • プロジェクトごとに名前空間による分離を行なっている
      • ユーザー管理はRBAC
    • ワークロードのモニタリングはPrometheus, Grafana
    • Service mesh: Istio
    • Orchestration: EKS
    • Infrastructure: AWS
    • ワークロードごとに異なるインスタンスタイプ
    • スポットインスタンスの利用による節約
    • EBS, AMIの暗号化
    • GPUs on EKS
    • ネットワーク
      • ネットワークには2つのレイヤー、VPCとサービスメッシュ
      • 全てプライベートなネットワーク、外部との通信はNAT
      • ディスクとEBS、Podsが別のAZで起動して接続できないことがあったので1AZ、インスタンタイプごとに1つのASGにしている
      • サービスメッシュによるネットワークの制御、デフォルトでは全ての通信はブロック
      • ゼロトラストポリシー, mutal TLSにより全ての通信を暗号化

最後に

Kubeflowは名前は知っている、程度だったのですが、どういったもので何ができるのか知ることができました。 Kubernatesそれ自体はプラットフォームでその上に動作するツールやフレームワークによるエコシステムがかなり出来上がっているのだなと今更ながら感じました。