Technology Topics by Brains

ブレインズテクノロジーの研究開発機関「未来工場」で働くエンジニアが、先端オープン技術、機械学習×データ分析(異常検知、予兆検知)に関する取組みをご紹介します。

AWS re:Invent 2019 Session - Building machine-learning infrastructure on Amazon EKS with Kubeflow

Impulseの開発をしている樋口です。

今回は表題のセッションについて少しまとめます。

モチベーション

セッションはEKSで機械学習基盤を構築するという題目でしたが、AWSにはAmazon SageMakerというEnd to Endの機械学習サービスがあります。 aws.amazon.com

なぜSageMakerを使わずにEKSを利用して個別に機械学習のインフラを作り上げるのか(しかも今回のre:Inventで相当のアップデートが発表されました)、理由は以下が紹介されていました。

  • Portability
  • Composability
  • Scalability

以下そのうち2つを詳しく書いておきます。(ScalabilityはSageMakerでも,,,というところはあるので)

Portability

オンプレミス環境でもプロダクトを動作させる事が求められる場合、クラウドサービスにロックインした形で実装を進めてしまうと、クラウドサービスが担っていてくれた部分を一部自分で実現しなくてはならなく、 同じロジックを違う手段で実装し直すということが発生する。 クラウド・オンプレミス両方で同じ手段を使い動作する事で最小限の手間でプロダクトをポータブルにすることができる。

Composability

現在Kubernetes界隈にはたくさんのOSSがあり、それらを組み合わせることにより様々な機能を実現することができる。コンテナ基盤として使えるので、追加の個別の要件にも対応しやすい。

機械学習基盤

機械学習基盤として、満たすべき要件は

  • Authentication/Authorizationのサポート
  • Notebookを使ったデータ分析者による分析
  • パイプラインの実行
  • 並列分散処理によるモデル構築
  • スケーラブルな推論
  • メトリクスの可視化
  • インフラレイヤーの抽象化

など多々ありますが、これらを満たすために手段としてkubeflowが紹介されていました。 f:id:mhigu:20191204123205j:plain www.kubeflow.org kubeflowの各機能詳細については、公式ドキュメントを参照してもらうとして確かにこれだけでも機械学習基盤として必要な要件は最低限満たせるかもしれません。

kubeflowのパイプラインではTensorFlow, scikit-learn, PyTorchのいずれの処理でもパイプラインの一つの要素として定義することができます。 f:id:mhigu:20191205022107j:plain

一つのライブラリに依存せず基盤を準備できるのは便利( ゚∀゚)・∵. グハッ!!

まぁ、kubeflowの裏ではargoというもっと抽象的なworkflow engineが動いているので、何でも実行できるのは不思議では無いですね。 github.com

また、kubeflowと一緒にhorovodというライブラリが紹介されていました。 github.com 一応スピーカいわく現在一番洗練された分散学習のフレームワークの一つらしいです。

事例

実際にEKSをベースにして、この様な基盤を組んだ企業の事例紹介がありました。

基本的には上記で紹介したkubeflowをベースに以下の様な構成で、 f:id:mhigu:20191204125352j:plain

追加でPrometheus/Grafanaを導入して以下項目の可視化も行っていたとのことでした。

  • cpu
  • memory
  • cluster state
  • job metrics
  • cost f:id:mhigu:20191204130206j:plain コストが見えてるのいいですね。

また、この企業ではEKSベースの機械学習基盤をグローバルに展開しており、それをどこからでも利用できるようにするために複数の機械学習基盤をまとめるREST APIを作ってユーザーにはREST API経由で実際のジョブの実行をさせる様にしていました。

f:id:mhigu:20191204130439j:plain

こうすることで複数の基盤をまとめる事ができたのに加えて、ユーザーが指定しなければならない項目をシンプルにできたとも言っていました。 (kubernetesの利用障壁に煩雑なyamlを書く作業があるが、REST APIにすることでその部分を隠蔽できる。wall of YAML 突破か,,,(ヾノ・∀・`)ムリムリ)

所感

このセッションを通じて話されていた事は弊社のプロダクトにも共通の部分が多くあり、実際に同じようなものを動かしている人の話を聞くとやる気が上がりますね。 見聞きした事は、今後またImpulseの開発に生かしていきます。