アダコテックの研究開発クラウド

2021/06/22に公開

はじめに

こちらはJDSCさんと合同で開催された勉強会で使ったスライドの内容です。

従来の研究開発フロー

研究開発クラウドが生まれるまで、アダコテックでは次のような形で研究開発が行われていました

  • 各々のPCでPythonやJupyter Notebookを入れて開発、いろいろ試行錯誤してモデルを作って評価
  • 結果が出たらslack等で報告
  • リーダーは結果を集めてお客様に報告

課題

このやり方には次のような課題がありました

  • ローカルにインストールされたモジュールのバージョンが合わずリーダーのPCで結果が再現できない
  • チームの開発環境が定まらないため、新加入のメンバーのセットアップに時間がかかる
  • メンバーが試行錯誤したコードが共有されず車輪の再発明が多発

このため機械学習のエンジニアが共通して使える学習基盤が求められました。弊社はAWSを使ってクラウドサービスを開発していることもあり、AWSを利用したJupyter Notebook環境を作ることにしました。

AWSの既存のサービスの検討

Jupyter Notebookを使えるAWSの既存のサービスは既に存在していて、まずはその調査からしました。

  • SageMaker (Notebook Instance)
  • Amazon EMR

どちらのサービスもAWSから公式に提供されており、追加料金無し(インスタンス代は必要)で利用でき、以下のような特徴が有ります。

  • S3やEFSといったストレージサービスと統合できる
  • jupyter環境と学習環境はインスタンスが分かれていてそれぞれインスタンスタイプを選べる

SageMakerとEMRの違いは、目的で分かれていて、SageMakerは機械学習寄りで、EMRはデータ分析寄りでプリインストールされているモジュールが異なっています。

検討結果

しかしながら、以下の理由により、自力で機械学習の環境を作ることにしました

理由

  • プリインストールされているモジュールのバージョンが決まっているのでアダコテックのブロダクトと整合性を取るのが困難になる
  • ノートブックインスタンスを自力で立てたり、終了したりする手間がかかる。使いこなすのにAWSの知識が必要
  • アダコテックはディープラーニングじゃないのでそんなにSageMakerの機能を欲していない
  • 機械学習用のインスタンスを気軽に立てられるとコストがかさむ
  • 自力で環境を構築したほうがノウハウも貯まって資産になる

※ 2020年のSageMakerのアップデートによりいくつかは改善されているようです。

課題への対応と設計

  • ローカルにインストールされたモジュールのバージョンが合わずリーダーのPCで結果が再現できない
    • DockerベースのJupyterコンテナを用意して、環境を再現する
    • conda envを使って環境をexportしたものでイメージをビルド
  • チームの開発環境が定まらないため、新加入のメンバーのセットアップに時間がかかる
    • マルチユーザのJupyter Notebook環境であるJupyterHubを採用
    • GitHub Authenticatorを使って認証させることで、GitHubアカウントをOrganizationに紐付けることで直ちに環境セットアップ
  • メンバーが試行錯誤したコードが共有されず車輪の再発明が多発
    • Amazon ECSのEFSマウントを使って、notebookを自動的に共有する

追加でやった改善

  • クラウドサービスと同じく、ALBを介してドメインと証明書を取ってhttps化
  • EC2インスタンス、ECSコンテナを自動でスケーリング
  • 弊社独自のジョブキューと連携して機械学習バッチを動かせるよう対応
  • mflowを使った学習結果管理
    • API GatewayのVPCLinkおよびLambda Authorizerを使って、インターネットアクセスでは認証を通すようにする

完成図

architechture_diagram

OSSへの貢献

成果物のうち、汎用性が高く、他のプロジェクトにも役立ちそうなものは積極的にオープンソース化します。

今後やりたいこと

  • EC2のインスタンスタイプを自由に選べるようにしたい
  • 機械学習バッチのジョブ監視をGUIでできるようにしたい
  • 画像ファイルアップロードのよいインタフェースをクラウド側に用意したい

まとめ

弊社では機械学習エンジニアが効率よく仕事を進めるためにクラウド開発基盤をAWS上に構築しました。SageMakerなどの既存サービスも検討しましたが、独自にJupyterのコンテナを管理することにしました。JupyterHubなどのオープンソースソフトウェアやECSの機能を利用して、開発とビジネスがシームレスにつながるMLOpsを実現しています。

Discussion