Re:ゼロから始めるML生活

どちらかといえばエミリア派です

【参加録】MLOps勉強会 #mlops_jp

MLOpsは個人的に最近非常に興味があるトピックで、MLOps事例 & ライブラリ・フレームワークなどを語る勉強会「MLOps勉強会」に参加しました。

m3-engineer.connpass.com

せっかく参加したので、備忘録として残しておきます。

gokart

gokartはluigiのラッパーライブラリで、エムスリーがOSSとして開発しています。

github.com

今回の登壇者のうち3人がgokartについて話していました。

エムスリーOSSのgokartを作った話(西場 正浩さん、エムスリー)

エムスリーで機械学習エンジニアをされている西場さん(@m_nishiba)のお話でした。

発表資料

speakerdeck.com

内容

なぜ作ろうと思ったか

機械学習システムを構築する際には、「モデルを一回作って終わり」ということはなく、何かしらのPDCAを継続的に回していく必要があり、精度を改善していくことが求められます。 そうした背景がある中、学習の処理の一部だけ変更して精度を改善したい、と言った状況があります。 その他にも、コードをシンプルに維持してコードレビューを効率化したいであったり、管理コスト・学習コストを下げたいであったりと、実際に機械学習システムを構築・運用している企業だからこそわかる「あったら良いな」という機能があり、それを実際に作り始めたのが始まりのようです。

やはり、機械学習のシステムに携わる人が課題感を持って、その周辺のライブラリをつくると本当にほしいものを作れる気がしますし、それを実践している形のようです。

今後どうしていく予定か

主には単体テスト周りの効率化や、ドキュメンテーションの充実化などを進めていくようです。

確かにエンジニアリング目線で言えば、開発者が効率よく開発を進めていけるようにテストやドキュメントの整備は地味ですが強力な気がしますね。

機械学習を無理なく広告システムに導入する(長谷川 大耀さん、fringe81)

Fringe81で機械学習による広告配信の最適化のためのプロダクトの開発と改善を行ってらっしゃる長谷川さん(@Hase8388)のお話でした。

発表資料

speakerdeck.com

内容

広告システム

広告配信のビジネスでは、広告のクリック時に収益が発生する仕組みなので、いかにユーザーが興味を持つ広告を打つかが収益を左右し、そのためにもCTR(クリック率)を正確に予測することが重要になってきます。

単純なアルゴリズムで広告を打つだけでも仕組み自体は可能ですが、機械学習を採用するとユーザーごとに柔軟に対応できるようになるため、非常に都合が良いといいます。

どこが難しいか

広告ビジネスの難しいところとして、レスポンスに制約がある点を挙げていました。 どうやら20ms以内に広告を配信する必要があるらしく、それに伴ってアプリケーションのエンジニアと機械学習のエンジニアが密に連携を取る必要があります。

性能要件、めちゃめちゃ厳しんですね。。。

取り組み・工夫

この問題に対しての取り組みとしては

  • リスクの洗い出し
  • チーム間で責任・担当範囲を明確化
  • 用語の統一
  • テストやパフォーマンスのために適切なログの設計(←重要)

などが工夫としてあるそうです。 また、互いのチーム間で相互レビューをしたりして、なるべく認識齟齬をなくすように努めているそうです。

また、配信に際して機械学習システムと広告配信のサーバーを明確に分けることで、問題発生時などに問題の切り分けがしやすくなるそうです。

機械学習システムを考える上でのポイントは、

  • 大量のデータを活用しつつ高速に学習すること
  • 実装したコードになるべく手を入れずに本番環境にデプロイすること

だそうです。

開発~リリースまでの技術的な面だけでなく、広告配信などではコミュニケーションがポイントになる点は非常に共感できます。。。

(仮)gokartの運用と課題について(ばんくし氏、エムスリー)

エムスリーで機械学習エンジニアをされているばんくしさん(@vaaaaanquish)のお話でした。

発表資料

speakerdeck.com

内容

gokartと他のライブラリとの比較

今回、gokartと他のワークフローライブラリ約70種類とを比較したそうです。 すごい。。。

それだけの比較をした上で、他の方のブログなどでも高評価を得ており、優れたライブラリであると結論づけています。

qiita.com

gokartでは

  • データ・特徴量加工の冪等性・再現性
  • MLモデルの保守性

を重点的にサポートしているそうで、西場さんの発表でもありましたが、PDCAを効率良く回すというコンセプトと合致しているかと思います。

gokartの周辺ライブラリ

cookiecutter-gokart

github.com

対話形式でgokartのプロジェクトを自動生成してくれるそうです。

Thunderbolt

github.com

gokartの出力結果を簡単に確認できるライブラリだそうです。

redshells

github.com

モデル構築に必要なパラメータチューニングなどを簡単に実装できるようです。

この辺の周辺ライブラリの整備まで、現在は進められているようです。

課題

課題として挙げられていたのは、

  • 並列処理ができない
    • (luigiはできるにはできるそうですが、得意ではない?)
  • オンライン学習には向かない
    • 基本的にバッチ学習を想定しているのが現状のようです

といったところが挙げられていました。 この辺は、システムの要件に応じてライブラリの選定をする際に考慮する点なのかもしれません。

gokart導入のきっかけと、運用の現状(仮)(水谷 優斗さん、fringe81)

Fringe81でHRプロダクトにおけるデータ活用を担当してらっしゃる水谷さん(@tenajima)のお話でした。

発表資料

speakerdeck.com

内容

Uniposというシステムでgokartを実際に使用した話でした。

gokart導入のきっかけ

mlppで機械学習パイプラインを知る
->手軽に使いたいからluigiを使ってみた
->「特徴量どこまで作ったっけな?」問題に直面
->gokart使ってみた

gokart所感

めっちゃ便利.。

luigiとして良いところ
  • Taskごとにコードが分離されており、修正が容易
  • DAGによって流れが追いかけやすい
  • 決まった形式で記述するからレビューがしやすい

やはり、開発の効率化という面でluigiは強力なようですね。

gokartで更に良いところ
  • output書かなくても勝手にpickleが保存されるから見るとこを減らせる
  • パラメータのバケツリレーが発生しなくなるように、意識するようになる
  • パラメータによってファイルのハッシュ値が変わるから、中間ファイルがパラメータごとに管理され、実験の際の再現性が取りやすい

gokartだと更に、より実験などの再現性が取りやすかったり、処理の再実行のしやすさ、管理のしやすさなどが評価されているんですね。

運用の現状

ライブラリ化して使用しているらしいです。

notebookでimportして使用しており、各機能についてはsphinxを使ってdocstringの中身を雑に検索できるようにしている模様です

感想

実際に使っている方からの話は非常に勉強になりました。 gokart激推しだったので、ちょっと興味湧いてきました。。。

あとは、github star乞食だったのがなんか面白かったです。