1
/
5

AWS Dev Day Tokyo 2018 で Wantedly の機械学習基盤と Amazon SageMaker の活用について話しました!

こんにちは、Wantedly の Infrastructure Engineer として働いている南(@south37)です。

先日、AWS Dev Day 2018 というイベントが行われ、「Amazon SageMaker で実現する生産性の高い機械学習基盤」というタイトルで登壇させていただきました!

AWS Dev Day Tokyo 2018 | AWS
AWS Dev Day は、アプリケーションデベロッパーのために世界主要都市で開催される、テクノロジーカンファレンスです。クラウド上でのアプリ開発における最新のテクノロジーとトレンドを、40 本のテクニカルセッション、10 コース以上のテクニカルハンズオンや、そのほかの様々な企画を通じてキャッチアップできるラーニングイベントです。
https://aws.amazon.com/jp/aws-devday-tokyo-2018/

AWS Dev Day は、アプリケーションデベロッパーのために世界主要都市で開催されるテクノロジーカンファレンスです。日本で開催された AWS Dev Day Tokyo の中に「Machine Learning」をテーマとしたトラックがあり、その中で登壇の機会をいただきました。

登壇内容について

Wantedly の機械学習基盤と Amazon SageMaker の活用について話しました。

Wantdly の機械学習基盤については、Wantedly が機械学習を活用するにあたって以下の5つの観点から基盤を整備しているという話をしました。

  1. データ基盤
  2. 開発&学習
  3. 評価
  4. デプロイ
  5. 計測

Amazon SageMaker については、導入以前にどういった課題を抱えていたか、どの様に課題を解決できたのか、どの様に導入を進めたか、利用する中で出て来た注意点などについて話しました。

このブログでは、登壇内容について簡単にまとめたいと思います!

Wantedly の機械学習基盤

機械学習をサービスに活かしていくという観点で、継続的な改善を行う為にはそれを支える基盤が必要となります。近年では ML ops というキーワードも登場しており、機械学習をプロダクションで運用するにあたって直面する課題をどう解決するか、どういった基盤を整えるかに注目が集まっています。

発表の際には、「Wantedly では以下の様な構成で基盤を整えている」というお話をしました。

  1. データ基盤 ... BigQuery と S3 を利用
  2. 開発&学習 ... Amazon SageMaker を利用
  3. 評価 ... ev という自社製 OSS の評価結果管理ツールを利用
  4. デプロイ ... Kubernetes を利用
  5. 計測 ... データ基盤で収集するログを利用

まずはデータ基盤。BigQuery にログやデータベースのデータを集約しており、また S3 には画像データや各 ML プロジェクトごとの学習データ、モデルデータを配置しています。機械学習エンジニアが、集約・整理されたデータを自由に触って分析、開発、学習が行える様になっています。

次に開発&学習。こちらでは Amazon SageMaker を利用しています。詳細は後に述べますが、Amazon SageMaker の活用によって生産性高く開発&学習が行えるようになりました。

次に評価について。学習したモデルの評価を「script/evaluate」という統一した名前の script で行なっており、どの ML レポジトリに対しても簡単に評価の実行ができる様になっています。また、ev という自社製 OSS の評価結果管理ツールを利用しており、統一したやり方で評価結果をメタデータ(commit hash、ハイパーパラメータ、学習データのバージョンなど再現に必要なデータ)と共に保存しています。また、定期的に master での評価結果を計測・保存する事で、改善の歴史を分かりやすく残しています。

ev は ev-cli という CLI ツールと ev-job-gen という Kubernetes の CronJob 生成ツールの2つを組み合わせたツールとなっています。ev については、また別の機械に詳細をブログでまとめようと思います。

wantedly/ev-cli
CLI tool for managing evaluation data. Contribute to wantedly/ev-cli development by creating an account on GitHub.
http://github.com/wantedly/ev-cli
wantedly/ev-job-gen
Generator of kubernetes manifest file for evaluation job. - wantedly/ev-job-gen
https://github.com/wantedly/ev-job-gen

次にデプロイについて。Kubernetes 上へのデプロイフローがドキュメント、ツールを通して整備されていて、誰でも簡単に推論用の API Server を立てる事ができます。スコア計算をバッチ実行したい場合には、Kubernetes の CronJob という機能を利用しています。

最後に計測について。データ基盤が整っている為、簡単にログが収集出来ています。A/B test などを通して、効果測定を行なっています。

Wantedly の基盤については、9月末に開催された Rejectcon でも発表しています。詳細についてはそちらの資料も参照してみてください。

Amazon SageMaker の活用

Wantedly では、機械学習のステップのうち「開発と学習にレールが無い」という課題を抱えていました。具体的には、以下の2つの課題がありました。

  1. 開発環境構築が負担になっていた
  2. 学習データ、モデルデータの扱いに厳格なルールを適用できていなかった

これらの課題を、Amazon SageMaker を活用する事で解決しました。

Amazon SageMaker とは

Amazon SageMaker は、機械学習を「開発」「学習」「デプロイ」の3つのフェーズに分割して、それぞれの用途に特化した専用 instance を利用できる機械学習基盤です。
(学習やデプロイについては、厳密には専用 instance を立てずに利用する機能も用意されていますが、それらは基本的にデバッグ用途であり中心的な使い方は「専用 instance を利用する」というものです)

開発時には Notebook Instance を、学習時には Training Instance を利用します。Notebook Instance は Jupyter Notebook がプリインストールされた状態で起動し、すぐに開発を始める事ができます。起動時に任意の script で環境セットアップする事も可能です。Training Instance は学習ジョブ実行時にだけ起動する instance で、高コストな instance を効率的に利用する事ができます。また、学習の際は Docker で自由に環境構築が可能です。

Amazon SageMaker 上で開発・学習・デプロイを行う際の基本サイクルは次のようなものになります。

Amazon SageMaker を利用する事でどうやって課題を解決したのか

Wantedly では、Amazon SageMaker が提供する機能のうち 開発(Notebook Instance)と学習(Training Instance)だけを選択的に利用しています。

これらを利用する事で、以下のように課題が解決できました。

  • 課題1. 「開発環境構築が負担になっていた」について
    • 解決策. Amazon Sagemaker の Notebook Instance を利用することで、適切に権限設定され、ライブラリ等含めて環境構築された Instance を即座に使い始めることが出来るようになりました。面倒な環境構築をせずとも、すぐに機械学習を行えるようになりました。
  • 課題2. 「学習データ、モデルデータの扱いに厳格なルールを適用できていなかった」について
    • 解決策. Amazon SageMaker の Training Instance を利用することで、S3 に常に学習データと学習済みのモデルデータを配置するというワークフローが徹底されました。

また、上記の課題を解決できたこと以外にも、Amazon SageMaker には様々なメリットがありました。

  1. 低コストで利用できる(Notebook Instance は低コストのものを利用可能であり、Training Instance は学習ジョブ実行時だけ起動するのでコストを抑えられる)
  2. Notebook Instance を動くドキュメントとしてシェア出来る
  3. Training Instance は Docker で自由に学習環境を構築できる
  4. 必要な機能だけを選択的に導入できる
  5. Amazon SageMaker の利用を前提にテンプレート整備を進められる

Amazon SageMaker を導入することで、生産性の高い機械学習基盤を整備できました。

Amazon SageMaker 利用時の注意点・Tips について

Amazon SageMaker には以下の様な注意点・Tips があります。これらを把握して利用すると良いでしょう。

  • Notebook Instance は ~/SageMaker ディレクトリ以下に必要なファイルを配置するべき
    • インスタンスを stop すると、~/SageMaker ディレクトリ以下のファイルだけが残り、その他のファイルは消えてしまいます。
  • Notebook Instance を利用する際はメモリの使いすぎに注意
    • メモリを使いすぎると Jupyter Notebook が freeze してしまいます。利用メモリが多い時は、instance type を事前に上げておきましょう。
  • 学習時の Try & Error では local mode の利用が推奨
    • Training Instance の起動には数分かかるので、Try & Error をする際には Instance の起動を待つ必要がなく高速な「local model での学習」が推奨されています。
  • 学習時に custom docker image を利用する際は `/opt/ml` の挙動を理解するべき
    • 「`/opt/ml` 以下の path」と「指定した s3 の path」の対応づけを Amazon SageMaker が行ってるので、それを知っておく必要があります。

なお、発表の際には注意点として「Amazon SageMaker の Disk は 5GB で固定」という話もしたのですが、その後 AWS 側で機能アップデートがあり、Disk サイズが最大16TBまで選べる様になりました!Amazon SageMaker は今も活発に開発されており、さらに便利になっているようです。

まとめ

Wantedly では、機械学習をサービスに活かしています。継続的な改善を実現するために、以下の5つの観点から機械学習基盤を整備しています。

  1. データ基盤 ... BigQuery と S3 を利用
  2. 開発&学習 ... Amazon SageMaker を利用
  3. 評価 ... ev という自社製 OSS 評価結果管理ツールを利用
  4. デプロイ ... Kubernetes を利用
  5. 計測 ... データ基盤で収集するログを利用

今年から Amazon SageMaker を導入して、より生産性の高い機械学習基盤が構築できました。今後も、さらに機械学習エンジニアが輝く環境を整備していきます!

エンジニア積極採用中!

価値を生み出したい機械学習エンジニアの方、基盤を構築してエンジニアの生産性を上げたい方、その他、興味を持ってくださった方は、ぜひ話を聞きに来てください!Twitter などで気軽にお声がけいただくのも大歓迎です!

Wantedly, Inc.'s job postings
14 Likes
14 Likes

Weekly ranking

Show other rankings
Invitation from Wantedly, Inc.
If this story triggered your interest, have a chat with the team?