感動出品の起案からリリースまで (Mercari ML Ops Night Vol.1)
感動出品の起案からリリースまでMercari ML Ops Night Vol.1Takuma YamaguchiMachine Learning Engineer
View Slide
My Background2001年〜• 画像認識および機械学習アルゴリズム研究• 博士(工学)• その他,コンピュータビジョン / オペレーションズリサーチ分野での研究• CUDA 1.0の頃から GPGPU を利用2012年〜• データエンジニア• Hadoop や Spark を中心としたデータ分析基盤の開発・運用• ユーザ行動トラッキング,LTV 推定等のアルゴリズム開発2016年〜• 株式会社メルカリ• 画像認識を中心とした機械学習に基づく機能開発• 2017年: 出品時の画像認識機能をリリース (on Kubernetes)2
Agenda3• 感動出品の歴史• 感動出品のシステム側の紹介• 内容は大いに被ります。。。• https://speakerdeck.com/kumon/maikurosabisuapurikesiyontositefalseji-jie-xue-xi
4メルカリの画像認識機能• 出品時の作業効率化が目的• 撮影した商品画像を認識• 商品名 / カテゴリ / ブランド の自動入力• 内部的には色識別も行っており,商品検索時の色フィルターに利用
5
6
7US版メルカリでもリリースUSのデータを利用して一部再学習しただけでロジック自体は日本版と全く同じ
8プロジェクトのはじまりいつの間にか設定されていたブレスト
9画像による出品という最高の体験についてブレスト (2017/07/19)お客様を感動させたいんですよ。画像撮影するだけで、自動入力されて出品とか。精度20%くらいでもいいんで。いいですね〜カテゴリとブランドは、わりとすぐにできるとおもいます。タイトルについても、なんとなくのアイデアはあります。色も欲しいですね〜色は、実はわりと難しい課題なんですよね。リリース目標っていつ頃でしょうか?えっと〜、今Q中ですねあららやってみます!(†) 今Q中: 2017年9月末がデッドライン(‡) 課題も開発期間も難易度高いのでリリースできればラッキーくらいの感覚(†)(‡)
10画像による出品という最高の体験についてブレスト (2017/07/19)お客様を感動させたいんですよ。画像撮影するだけで、自動入力されて出品とか。精度20%くらいでもいいんで。いいですね〜カテゴリとブランドは、わりとすぐにできるとおもいます。タイトルについても、なんとなくのアイデアはあります。色も欲しいですね〜色は、実はわりと難しい課題なんですよね。リリース目標っていつ頃でしょうか?えっと〜、今Q中ですねあららやってみます!(†) 今Q中: 2017年9月末がデッドライン(‡) 課題も開発期間も難易度高いのでリリースできればラッキーくらいの感覚(†)(‡)プロジェクト名: 感動出品
11タイトル生成: なんとなくのアイデアを形に (2017/07末)• 画像のタイトル・説明文の生成は知識も経験もない• なんとなくのアイデアの方向性が悪くないかサーベイ• Bernardi, Raffaella, et al. Automatic Description Generation from Images.• プロトタイプの実装 (( )内は当時の自分用メモへの独り言 )• 関連ワードとスコア• データは100万商品程度 (だったはず)(うん、悪くない)(まさに感動出品) (これが感動出品)(日差しも結果も眩しい)(ブランドへの感度を高めたい)
12タイトル生成: なんとなくのアイデアを形に (2017/07末)• 画像のタイトル・説明文の生成は知識も経験もない• なんとなくのアイデアの方向性が悪くないかサーベイ• Bernardi, Raffaella, et al. Automatic Description Generation from Images.• プロトタイプの実装 (( )内は当時の自分用メモへの独り言 )• 関連ワードとスコア• データは100万商品程度 (だったはず)(うん、悪くない)(まさに感動出品) (これが感動出品)(日差しも結果も眩しい)(ブランドへの感度を高めたい)プロトタイプから● いけそうな予感● 季節性や商品の多様性を考慮するとデータは100万商品では足りない● ブランドへの感度を高めたい● 変なタイトルが生成されるのが不安● カテゴリ認識・ブランド認識は、過去の経験からたぶん大丈夫
13モデル洗練 (8月)サマーインターンも貢献
14※ 価格推定は、興味本位で実装したもので、本番では使われていない間違えることもあるものの、本番運用に耐えられそうなモデルはできた
15メルカリアプリへの実装 (9月)のこり1ヶ月
メルカリアプリに実装されるまでの残タスク16• 機械学習エンジニア• APIの実装• システム設計• SRE• システム構築• データサイエンティスト• ログ / KPI設計• バックエンドエンジニア• Mercari-API 改修• デザイナー• UI / UX設計• クライアントエンジニア• iOS / Androidアプリの改修• QAエンジニア• QA
メルカリアプリに実装されるまでの残タスク17• 機械学習エンジニア• APIの実装• システム設計• SRE• システム構築• データサイエンティスト• ログ / KPI設計• バックエンドエンジニア• Mercari-API 改修• デザイナー• UI / UX設計• クライアントエンジニア• iOS / Androidアプリの改修• QAエンジニア• QA機械学習エンジニア 1人では、API実装、システム設計、 SREとのシステム構築で、手一杯で、この期間はモデルには一切触れず
実際の環境構築依頼18● 機械学習を使った新機能をリリースしたい● 1サーバで 4リクエスト/秒ほど処理できる● API (Gunicorn + Django) + Queue + Worker (TensorFlow)● Worker では,常時 25GB のメモリが必要で起動に10分かかる● 機械学習モデルのファイルサイズは 15GB 超● モデルは定期的に更新し GPU が必要機械学習を使った機能追加の相談
実際の環境構築依頼19● 機械学習を使った新機能をリリースしたい● 1サーバで 4リクエスト/秒ほど処理できる● API (Gunicorn + Django) + Queue + Worker (TensorFlow)● Worker では,常時 25GB のメモリが必要で起動に10分かかる● 機械学習モデルのファイルサイズは 15GB 超● モデルは定期的に更新し GPU が必要機械学習を使った機能追加の相談とりあえずDockerfile用意してくださいなんとかします
201週間後
21System Architecture
メルカリアプリに実装されるまでの残タスク22• 機械学習エンジニア• APIの実装• システム設計• SRE• システム構築• データサイエンティスト• ログ / KPI設計• バックエンドエンジニア• Mercari-API 改修• デザイナー• UI / UX設計• クライアントエンジニア• iOS / Androidアプリの改修• QAエンジニア• QA機械学習エンジニア 1人では、API実装、システム設計、 SREとのシステム構築で、手一杯で、この期間はモデルには一切触れず短期間でリリースできたのは● USを中心にMicroservicesへシフト中だった● 協力的なSRE○ Dockerfile渡して○ 1週間で○ 全て構築されてた■ デプロイ■ モニタリング■ etc...
23System Architecture機械学習エンジニアの担当部分画像がS3に保存されていることとGPUの利用のため,バッチサーバはAWSに.
24System Architecture通常の運用で見る部分
25Monitoring & Deployment通常の運用では,Datadog でのモニタリングと Spinnaker でのデプロイ・リソース管理のみ
26System Architecture
Blue-Green Deployment27機械学習モデルはファイルサイズ(10GB+)の都合で Docker Image に含まれないものの,Persistent Volume(ReadOnlyMany)によって,Imutable Infrastructure を実現モデル更新のたびにPersistent Volumeを生成コードの更新だけの場合はそのまま(Redisは共通)
28感動出品リリース(2017/10/03〜)KPIや世論の反応を見ながら段階的に解放
29
30
31
まとめ32• 感動出品の起案からリリースまでを紹介• Microservices化の流れのおかげもあり短期間でリリース• 雛形や指針が整っていれば機械学習エンジニアでもサービス運用は可能• 機械学習のシステム面を見る専任チームを用意するのが理想的• 機械学習エンジニアが専門領域で力を発揮• モデリングだけしかできないという意味ではないモデリングとリリースをシームレスにつなげて魅力的な機能を素早くリリースしていきたい
Create value in a global marketplacewhere anyone can buy & sell