メルカリShopsのML立ち上げ奮闘記

こんにちは。ソウゾウの Software Engineer の @wakanapo です。連載:「メルカリShops」プレオープンまでの開発の裏側の 11日目を担当します。

メルカリShops唯一の ML (Machine Learning) 担当メンバーとして、メルカリShopsへのML導入を推進しています。まだ、絶賛立ち上げ中ではありますが、これまでの歩みについてお話します。

序章

私は、2019年4月に新卒入社以降メルカリJPの写真検索機能を中心に担当していました。当時写真検索はリリースされたばかりの機能だったので、バグの修正やシステムの改善を担当していました。その中で次のような課題を感じるようになりました。

写真検索のシステムは、継続的に出品された画像を検索に加える必要があるという特性から非常に複雑なものでした。またその indexing から serving までの Pipeline を実行する基盤として、Lykeion という内製の Platform を使っていました。写真検索システム自体も Lykeion も Document が用意されていなかったため、理解するにはコードから紐解くしかありませんでした。これによりオンボーディングコストが高く、新規メンバーがなかなか活躍できないため、既存のメンバーに負担が集中。その結果、既存のメンバーの中には、より楽しい仕事がしたいとチームを去る人も多く、残されたメンバーはますます運用だけで精一杯になり長い間機能の改善が全く行われないという状況が続きました。

さらに、機能改善を行おうにも、プロダクトチームと接点が薄かったため、メルカリアプリ本体に関わるような改善は行える地盤が整っていませんでした。ちょっとした速度改善やコストダウンのような改善にとどまっていました。

この状況はシステムの再設計やチームの再編を通して今では改善されていますが、この経験を通してシステムやチームの運用の難しさを学びました。そして、いつか「私の思う最強のMLチーム/システム」を作ってみたいと思うようになりました。

その機会は10年後くらいかなとゆったりと構えていましたが、思ったよりもめちゃくちゃすぐにその機会を得ることができました。2021年1月はじめ Souzoh CEO の maze さんより

「Souzoh一人目のML担当として来てほしい。」

とお話をもらいました。

確かに社内公募に応募はしたのですが、私は直前にチームを移動したばかりで、また、もっとシニアなメンバーが選ばれると思っていたのでかなりびっくりしました。

「私の思う最強のMLチーム/システム」を作ってみたいとは思っていたものの、まだまだ経験も浅かったので、右も左もわからずとりあえず「MLチーム 立ち上げ」で検索するところからはじめました。

他社の事例や、メリカリShopsの状況を踏まえた上でチーム立ち上げの最初の一歩として次の3つをやっていくことにしました。

採用

どの他社のチーム立ち上げの事例でも、必ずその重要性が書かれていたのが採用です。そもそも人が集まらなければチームにならないので当然です。採用には時間がかかるので、メルカリShopsのMLチームでもまず先に採用に取り掛かりました。

会社自体立ち上がったばかりの段階で、ML担当エンジニアのヘッドカウントを確保し採用を進めていくためにまず、社内でその必要性を理解してもらうことからはじめました。

MLに必要なスキルをリストアップし各スキルに対して、Bronze, Silver, Gold のレベルを定義。そして私のスキルを可視化。同時にMLチームとしてのロードマップも作成。 これによってどの時期にどのようなスキルを持った人材が必要になるかを明確にしました。ちなみにこのロードマップは、今すぐにでも人が欲しいことをアピールするために爆速で進んだ理想的な場合を書いたので、あまり現実的なものではなかったかもしれません(実際マネージャー陣にはこの通りには行かないと思うと突っ込まれました)が、採用の必要性は無事伝わり、早急に採用をスタートすることができました。

スキルマップは採用の解像度を上げるためだけでなく、新しいメンバーが入ってきたときに互いに強みを把握するのにも役立つと思っているので定期的にアップデートしておこうと思っています。

私のスキルマップの一部。図にある DS/ML, システム設計・構築・運用の他にエンジニアリング、プロジェクト管理の項目がある。私の場合 DS/ML の項目に Bronze が多いため、この部分に強いエンジニアの採用を目指している。プロジェクト管理に関しても Bronze が多かったが、私自身が伸ばして行きたいスキルだったので、あえてここは採用するのではなく自分で頑張ることにした。

社内でのブランディング

これは立ち上げフェーズにおいていろいろな意味で重要だと考えています。 MLは通常の開発とはペースが異なることが多いと思います。そもそもある程度データが集まってからのスタートになったり、開発が始まっても一直線に進むというよりは進んだり戻ったり試行錯誤をしながら進んでいくことになります。また、そもそも最速でプロダクトをリリースしようとしている段階では、MLのことは完全に後回しになる場合が多いと思います。実際リリース前のメルカリShopsも同じ状況でした。

優先順位上仕方ない部分はありますが、このまま完全に取り残されてしまうと、「MLって何やってんの?」という印象になってしまい、プロダクトチームと距離ができてしまうことが心配でした。そうなると、MLが力を発揮できるフェーズが来てからも話がうまく進まずなかなか新規機能の開発ができなくなってしまいます。

そこで社内でのMLチームを認知してもらうために次のことを行いました。

1つ目に関して、例えば、違反出品物検知に関する会話をみつけました。違反出品物検知へのMLの導入はすでにメルカリ日本事業で実績があったため、「日本事業と同様の手法を使うことでそれなりに容易にMLを導入することができそうです。必要なタイミングで一度話ましょう。」と伝えました。これによって、実際の導入は優先度的にまだですが、すでに何度か関係者とはすり合わせをすることができました。

また、MLでできることをアピールするにはやはりなんといってもデモ。毎週の全社会のなかでデモの時間が設けられていたので、そこで積極的にMLを使った機能のデモを行いました。毎週デモを行うことを目標に頑張りましたが、2週間で力尽きました。ただ、デモのおかげでできる機能の解像度が上がったと言う声を頂いたので、今後も毎週は無理にしても、継続的に披露していきたいと思っています。

ML基盤の選定・構築 – Vertex AI採用

私がモデリングよりもシステム側が得意だったこと、MLの機能開発にPMのリソースを避ける余裕がなかったことから、MLの機能開発を始める前に、まず「時が来たときに最速で開発が行えるためのML基盤」の構築から行うことにしました。

メルカリJPでは、ML基盤として Kubeflow (特に Kubeflow Pipeline) を使っていました。Kubeflow は、デファクトスタンダードとも言えるML基盤で、慣れれば Kubernetes に詳しくないエンジニアでも使いこなせていたので、メルカリShopsでも採用することにしました。

しかしながら、メルカリShopsのサービスは主に CloudRun で動いており、Kubernetes基盤を持っていません。(メルカリShopsの技術スタックについては「メルカリShops の技術スタックと、その選定理由」を御覧ください。) そこで、取りうる選択肢は以下の3つです。

メルカリShopsのMLチームでKubeflow基盤を持つのは、最も自由度が高くはなりますが、運用コストが非常に高いため、可能な限り避けたい選択です。

検証を始めた当初、GCP managedなKubeflow基盤としては、AI Platform Pipeline がありましたが、AI Platform Pipeline はmanaged とはいえ、自プロジェクト内に Kubernetes Cluster が構築されるため、バージョンアップなどの最低限の運用コストは発生するようでした。それであれば、会社をまたぐことによるコミュニケーションコストや制約が発生するにしても、メルカリ日本事業の基盤を使うほうがよいように思えました。

そんなとき、折よく AI Platform の後継である Vertex AI が発表されました。Vertex AI Pipeline では Kubernetes Cluster は完全にGCP側で運用され、ユーザーは完全にサービスとして Kubeflow Pipeline を使うことができます。Pipeline を定義してそれを投げればいきなり使い始める事ができるので、MLの開発のみに集中することができます。まだプレビュー版という懸念はありましたが、それ以上に利点が大きいと考え Vertex AI を使うことに決めました。

Pipeline の利便性を中心に考え Vertex AI の使用を決めましたが、notebook や endpoint, Matching Engine など他の Vertex AI の機能も有用なものが多く、メルカリShopsでは Vertex AI の機能を駆使してMLの開発を行っています。

おわりに

ここまでメルカリShopsにおけるMLチームのファーストステップについてお話してきました。現在は、このファーストステップを終え、徐々に機能の開発を始めている段階です。しかし、立ち上げは始まったばかりでこれからまだまだたくさんのチャレンジが待ち受けていることでしょう。MLチームでは、一緒にこのチャレンジに立ち向かう仲間を募集しています。私と一緒に「最強のMLチーム」をつくりませんか?ご応募お待ちしております。

メルカリShopsではメンバーを募集中です。メルカリShopsの開発に興味を持ったり、チャレンジしてみたいという方がいれば、ぜひこちらも覗いてみてください。またカジュアルに話だけ聞いてみたい、といった方も大歓迎です。こちらの申し込みフォームよりぜひご連絡ください!

また、2021/08/18 から 2021/09/28 にかけて「ソウゾウ TECH TALK」というイベントを開催中です。テーマを分け、技術的な知見を共有しあうことを目的とした勉強会です。興味のある方はぜひご参加ください!

明日は「All for Oneでたのしいおさわりかいをするよ!」というタイトルで QA Engineer の @____rina____ が登場予定です。お楽しみに!