エムスリーテックブログスマートフォン用の表示で見るエムスリーテックブログエムスリー(m3)のエンジニア・開発メンバーによる技術ブログです2018-11-19推薦システムの改修と機械学習システムの開発プロセス改善、実施中!こんにちは、エムスリーエンジニアリングG・AIチームの大瀧です。この記事では、推薦システムの改修/プロセスの改善に至ったエピソードをお話させて頂こうと思います。これから開発・運用を行おうとする方と知見を共有できれば幸いです。Archimedesというシステムで初めてプロダクションレベルのコードを書くことになりました。SIerで研究開発をしていた私の目線からは学び・知見に満ちた経験でした。Archimedesについてこの記事の主役は、Archimedesという名前で呼ばれているシステムです。Blogを見てくださっている方の中には、覚えてくださっている方がいるかもしれません。2018年1月に紹介させて頂いた、ニュース記事推薦システムです。www.m3tech.blog推薦アルゴリズムの性能が認められ、エムスリーにおけるいくつかのメディアで利用されています。そんなArchimedesに、パフォーマンス上・モデル開発効率上の問題が発見されました。パフォーマンス上の問題Archimedesはリリース以降、多くのメディアに関わらせて頂いております。それらのメルマガにサイト内での記事推薦...などなど、多くの場所で急速に活用されるようになりました。活用されていく中で、理想と現実の間に乖離が生まれてきました。理想のArchimedes活用場所が増えても、学習・推論時のパフォーマンスに影響がない。AWSを利用しているので、インフラの機能で負荷の変化に対していい感じに動作してくれる。現実のArchimedes推論時に要求されるパフォーマンスを満たせなくなった。Archimedesは社内のメール配信システムから呼び出され、ユーザーごとに事前に計算しておいたオススメ記事を出力する形で動作しています。メルマガ配信システムはユーザーにとって都合の良い時間(仕事が終わる時間など、様々)を逃さぬよう、並列にArchimedesを呼び出します。そのためArchimedesには、短時間に高い負荷がかかることになります。Archimedesは事前にjmeterを用いた負荷試験等を実施しておりましたが、コミュニケーション上のミスからある時間帯において負荷試験時に想定していた以上の負荷がかかるようになってしまいました。負荷増に伴いArchimedesのレスポンス時間が伸び(メルマガが届くのが遅くなり)、コネクションプールを使い尽くし...様々な事件が起きました。実際には実施していないものも含め、メリット・デメリットの2側面からAIチームが検討した対策を見ていきましょう。皆様のチームなら、どの対策を実施するでしょうか?メルマガ配信の並列度を下げるArchimedesへのアクセスの並列度が想定以上に大きい...せや、小さくすればええんや!メリット:実施コストがとても低いです。初期対応として実施されたのも、この対策。デメリット:送信対象数を変化させずに並列度を下げるため、メルマガ送信にかかる時間は伸びてしまう。メルマガの送信は早すぎても遅すぎても良いことがない。遅い場合は迷惑に感じることも多いため、この対策を長期に渡って継続することはビジネスに悪い影響を与えることが予想される。メルマガ配信のタイミングをうまいことズラす1つの配信だったメルマガを複数の時間帯に分割したり、同時に送信される複数のメルマガ同士で送信時間を調整したりすることで並列数を下げよう!メリット:実装が発生せず、設定の変更で実施することが可能。デメリット:新しいメルマガが追加されるたび、再スケジューリングする必要が生まれる。サービスがスケールしなくなるため、未実施。APIサーバーの再実装Archimedesには、事前に計算しておいた推薦記事リストをDBから引っ張りレスポンスを作る/返す箇所があります。パフォーマンス低下の一因であるにも関わらず、チューニングできる人が現在のAIチームにいない「危ない」部分でした。パフォーマンスの問題が起きるまでは触る必要のない箇所でしたが、ビジネスに関わる問題が発生したなら話は別です。メリット:活用場所がさらに増えても、推論時のパフォーマンスには影響が出ない。メンテナンスすることが可能な人がチーム内に複数人いる状態を作ることができる。デメリット:新規実装が必要。エムスリーのAIチームでは最終的に、この選択肢をとることとしました。ある、"想定以上の負荷がかかりシステム障害が発生"を経験した私(スケールアウトはしているのに!)。類似事例を発生させないためにも、振り返りを実施しました。関係者との(本当に小さな)合意形成のミスから急速に負荷が高まり、障害に至りました。「タスクの終了/開始の合意の形成に失敗した」と捉えると、私はあるタイミングではプロジェクト管理の基本の「キ」で躓いていたように思います。現在はJIRAのチケットに合意状態を書く、プロジェクト開始前にも合意先を明確にするなど対策を実施しています。この対策も、近い将来私に新たな学びを与えてくれるハズです。現在活躍中のArchimedesですが、改善の余地はまだまだ存在します。日々改善にチャレンジしているのですが...理想と現実の間に乖離があることが見えてきました。その中でより良い結果を出すため/より正確に検証するために様々なパラメータの組み合わせを試します。キャッシュの弱さがモデル開発のボトルネックになっていました。対策Archimedesのコードに修正を加えて、必要な部分にキャッシュ機能を加えるArchimedes専用に、必要な機能をきめ細やかに作成する方針がこちらです。メリット:目的を達成するための工数は(比較的)小さい。デメリット:他のシステム・プロジェクトで同様の問題が発生する。機械学習向けのフレームワークを作成するキャッシュ機能等、共通で必要になる機能を提供するモジュールを作成する対処方法ですね。メリット:複数のプロジェクトで恩恵を受けることができる。この問題に関しては、チームの状況によって正解が異なると思います。機械学習システム全般での利用を考えたモジュールを作成することにしました。現在もluigiをベースとしたパイプラインフレームワーク/module群を開発しております。Archimedes以降に開発されたシステムには既に採用され、モデル開発の効率は格段に向上しました(Archimedesは移行中)。↓チームリーダーによる解説記事↓www.m3tech.blog学んだことこのケースにおける本当の失敗は、私は改善に至るまで時間がかかった点/改善せずにモデル開発を進めていた時期があった点であると考えています。2月にジョインした頃、私はエムスリーの開発/ビジネススピードはまさに目が回るようだと感じていました。スピードが不足しているなら、高速化するための策を練るべきだと当然考えることでしょう。振り返り、記事を書いている今は当たり前に発見できるこの対策が、しばらくの間私には見えていなかったのです。現在は広い視野でタスクの洗い出し/優先順位決定が行えるよう、少し異なるプロジェクトを担当しているメンバーと共に振り返りを実施しています。(こちらの施策の効果は現在確認中です...!)最後にArchimedesに色々な問題が発生し、改修/プロセス改善を実施することになったエピソードを紹介致しました。それ故切り拓く面白さがあると思います。良い機械学習システム開発プロセス誕生の一助になれれば幸いです。11:00推薦システムの改修と機械学習システムの開発プロセス改善、実施中!Tweet関連記事2019-11-12大手Web企業からエムスリーに転職し、プロダクトマネージャーとして働いた半年間の振り返りこんにちは。エムスリーエンジニアリンググループ、プロダクト...2019-11-11及川卓也さん新著「ソフトウェア・ファースト」コラム対談後記こんにちは。2019」にシルバースポンサーとして協賛&ブース出展しますこんにちは、エムスリーエンジニアリンググループの水野です。AI・機械学習チームの笹川です。今...2018-10-29通年募集!エンジニアインターンのすすめ人事の友永です。月別アーカイブ注目記事はてなブログをはじめよう!m3techさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。