2019年9月24日にニューヨークで開催された機械学習運用カンファレンス「MLOps NYS」に参加しました。MLOpsとはMachine Learning Operationsの略であり、機械学習を実際のサービスに組み込んで運用するエンジニアリングの領域です。
その中で特に面白かったNetflix社の事例を紹介します!
Netflix社では、「Metaflow」と呼ばれる独自フレームワークを開発して、データサイエンティストに提供することにより、機械学習アプリケーションの開発・運用を社内で拡大することを実現している。
コンテンツの発売前に、日毎の視聴者数の予測がしたい。これにより、優先度付やリソースの配置を考えている
ゴールは2つ
課題はプロトタイピング、本番化、リリース後のモデル更新に時間がかかること
プロトタイピング、本番化、そしてリリース後のモデル更新の面倒な部分を支援するために、自社で独自のツール「Metaflow」を開発した。
Netflixのデータ分析で必要なスタックは以下である。
Metaflowはこれらのスタック全体をカバーする
MetaflowはPythonのライブラリとして提供され、データサイエンティストはライブラリをインストールして使う
Pythonのデコレータ(@マークで関数を修飾する機能)をうまく活用して、できるだけ簡単な記法で様々なことができる
下図のような、PCA(主成分分析)とFE(特徴量エンジニアリング)を同時に行い合流するようなワークフローを作りたい場合、@stepといったデコレータを用いることで実現できる。また、途中で分岐するような処理をDAGをコードを使って作ることができる。これをローカルで作ることができる。作ったコードは「Artifact Store」に格納され、いつでも昔の状態を再現できる
前のステップの結果を次のステップで使うために、裏でS3に自動的に結果を保存してくれる。これにより、サイエンティストがローカルマシンで開発するときは簡単に開発できるし、本番で各ステップを別々のコンピュータで処理させたとしても問題なく動作する。
さらに各ステップの結果を永続化しておくことで、最後のステップだけが失敗した場合でもその直前から再開できるため、効率的に開発できる。
以下のようにPythonのデコレータとしてCPUやメモリをしていすると、その関数はそのリソースを確保した上で動作してくれる。これにより特徴量抽出などに必要な計算リソースをサイエンティスト自身が簡単にチューニングできる。
並列で処理したい処理があるforループを書くだけで並列実行される。
Netflix社内の謹製スケジューラMESONにデプロイすることができる。
デコレータを書くだけでREST APIができる。
デプロイされたDAGの状態を、いつでも手元のnotebookで見ることができる。最終状態だけでなく、各ステップでの中間結果も見ることができる
現在機械学習をサポートするプラットフォームはいろいろなITベンダが出しているのですが、これだけサイエンティストの目線に立って作られているツールは見たことありません。Pythonのデコレータはサイエンティストにとって使いやすいでし、インターフェースもサイエンティストの目線に立って非常に洗練されています。さすがNetflix社だと思いました。より詳しく知りたい人は、Youtubeの動画を見ることをおすすめします。
Mobility Technologies では共に日本のモビリティを進化させていくエンジニアを募集しています。話を聞いてみたいという方は、是非 募集ページ からご相談ください!