Slide 1

Slide 1 text

感動出品の起案からリリースまで Mercari ML Ops Night Vol.1 Takuma Yamaguchi Machine Learning Engineer

Slide 2

Slide 2 text

My Background 2001年〜 • 画像認識および機械学習アルゴリズム研究 • 博士(工学) • その他,コンピュータビジョン / オペレーションズリサーチ分野での研究 • CUDA 1.0の頃から GPGPU を利用 2012年〜 • データエンジニア • Hadoop や Spark を中心としたデータ分析基盤の開発・運用 • ユーザ行動トラッキング,LTV 推定等のアルゴリズム開発 2016年〜 • 株式会社メルカリ • 画像認識を中心とした機械学習に基づく機能開発 • 2017年: 出品時の画像認識機能をリリース (on Kubernetes) 2

Slide 3

Slide 3 text

Agenda 3 • 感動出品の歴史 • 感動出品のシステム側の紹介 • 内容は大いに被ります。。。 • https://speakerdeck.com/kumon/maikurosabisuapurikesiyontositefalseji-jie-xue-xi

Slide 4

Slide 4 text

4 メルカリの画像認識機能 • 出品時の作業効率化が目的 • 撮影した商品画像を認識 • 商品名 / カテゴリ / ブランド の自動入力 • 内部的には色識別も行っており,商品検索時の色フィルターに利用

Slide 5

Slide 5 text

5

Slide 6

Slide 6 text

6

Slide 7

Slide 7 text

7 US版メルカリでもリリース USのデータを利用して一部再学習しただけでロジック自体は日本版と全く同じ

Slide 8

Slide 8 text

8 プロジェクトのはじまり いつの間にか設定されていたブレスト

Slide 9

Slide 9 text

9 画像による出品という最高の体験についてブレスト (2017/07/19) お客様を感動させたいんですよ。画像撮影する だけで、自動入力されて出品とか。 精度20%くらいでもいいんで。 いいですね〜 カテゴリとブランドは、わりとすぐにできるとおも います。タイトルについても、なんとなくのアイ デアはあります。 色も欲しいですね〜 色は、実はわりと難しい課題なんですよね。 リリース目標っていつ頃でしょうか? えっと〜、今Q中ですね あらら やってみます! (†) 今Q中: 2017年9月末がデッドライン (‡) 課題も開発期間も難易度高いのでリリースできればラッキーくらいの感覚 (†) (‡)

Slide 10

Slide 10 text

10 画像による出品という最高の体験についてブレスト (2017/07/19) お客様を感動させたいんですよ。画像撮影する だけで、自動入力されて出品とか。 精度20%くらいでもいいんで。 いいですね〜 カテゴリとブランドは、わりとすぐにできるとおも います。タイトルについても、なんとなくのアイ デアはあります。 色も欲しいですね〜 色は、実はわりと難しい課題なんですよね。 リリース目標っていつ頃でしょうか? えっと〜、今Q中ですね あらら やってみます! (†) 今Q中: 2017年9月末がデッドライン (‡) 課題も開発期間も難易度高いのでリリースできればラッキーくらいの感覚 (†) (‡) プロジェクト名: 感動出品

Slide 11

Slide 11 text

11 タイトル生成: なんとなくのアイデアを形に (2017/07末) • 画像のタイトル・説明文の生成は知識も経験もない • なんとなくのアイデアの方向性が悪くないかサーベイ • Bernardi, Raffaella, et al. Automatic Description Generation from Images. • プロトタイプの実装 (( )内は当時の自分用メモへの独り言 ) • 関連ワードとスコア • データは100万商品程度 (だったはず) (うん、悪くない) (まさに感動出品) (これが感動出品) (日差しも結果も眩しい) (ブランドへの感度を高めたい)

Slide 12

Slide 12 text

12 タイトル生成: なんとなくのアイデアを形に (2017/07末) • 画像のタイトル・説明文の生成は知識も経験もない • なんとなくのアイデアの方向性が悪くないかサーベイ • Bernardi, Raffaella, et al. Automatic Description Generation from Images. • プロトタイプの実装 (( )内は当時の自分用メモへの独り言 ) • 関連ワードとスコア • データは100万商品程度 (だったはず) (うん、悪くない) (まさに感動出品) (これが感動出品) (日差しも結果も眩しい) (ブランドへの感度を高めたい) プロトタイプから ● いけそうな予感 ● 季節性や商品の多様性を考慮するとデータは100万商品では足りない ● ブランドへの感度を高めたい ● 変なタイトルが生成されるのが不安 ● カテゴリ認識・ブランド認識は、過去の経験からたぶん大丈夫

Slide 13

Slide 13 text

13 モデル洗練 (8月) サマーインターンも貢献

Slide 14

Slide 14 text

14 ※ 価格推定は、興味本位で実装したも ので、本番では使われていない 間違えることもあるものの、本 番運用に耐えられそうなモデ ルはできた

Slide 15

Slide 15 text

15 メルカリアプリへの実装 (9月) のこり1ヶ月

Slide 16

Slide 16 text

メルカリアプリに実装されるまでの残タスク 16 • 機械学習エンジニア • APIの実装 • システム設計 • SRE • システム構築 • データサイエンティスト • ログ / KPI設計 • バックエンドエンジニア • Mercari-API 改修 • デザイナー • UI / UX設計 • クライアントエンジニア • iOS / Androidアプリの改修 • QAエンジニア • QA

Slide 17

Slide 17 text

メルカリアプリに実装されるまでの残タスク 17 • 機械学習エンジニア • APIの実装 • システム設計 • SRE • システム構築 • データサイエンティスト • ログ / KPI設計 • バックエンドエンジニア • Mercari-API 改修 • デザイナー • UI / UX設計 • クライアントエンジニア • iOS / Androidアプリの改修 • QAエンジニア • QA 機械学習エンジニア 1人では、 API実装、システム設計、 SREとのシステム構築 で、手一杯で、この期間はモデルには一切触れず

Slide 18

Slide 18 text

実際の環境構築依頼 18 ● 機械学習を使った新機能をリリースしたい ● 1サーバで 4リクエスト/秒ほど処理できる ● API (Gunicorn + Django) + Queue + Worker (TensorFlow) ● Worker では,常時 25GB のメモリが必要で起動に10分かかる ● 機械学習モデルのファイルサイズは 15GB 超 ● モデルは定期的に更新し GPU が必要 機械学習を使った機能追加の相談

Slide 19

Slide 19 text

実際の環境構築依頼 19 ● 機械学習を使った新機能をリリースしたい ● 1サーバで 4リクエスト/秒ほど処理できる ● API (Gunicorn + Django) + Queue + Worker (TensorFlow) ● Worker では,常時 25GB のメモリが必要で起動に10分かかる ● 機械学習モデルのファイルサイズは 15GB 超 ● モデルは定期的に更新し GPU が必要 機械学習を使った機能追加の相談 とりあえずDockerfile用意してください なんとかします

Slide 20

Slide 20 text

20 1週間後

Slide 21

Slide 21 text

21 System Architecture

Slide 22

Slide 22 text

メルカリアプリに実装されるまでの残タスク 22 • 機械学習エンジニア • APIの実装 • システム設計 • SRE • システム構築 • データサイエンティスト • ログ / KPI設計 • バックエンドエンジニア • Mercari-API 改修 • デザイナー • UI / UX設計 • クライアントエンジニア • iOS / Androidアプリの改修 • QAエンジニア • QA 機械学習エンジニア 1人では、 API実装、システム設計、 SREとのシステム構築 で、手一杯で、この期間はモデルには一切触れず 短期間でリリースできたのは ● USを中心にMicroservicesへシフト中だった ● 協力的なSRE ○ Dockerfile渡して ○ 1週間で ○ 全て構築されてた ■ デプロイ ■ モニタリング ■ etc...

Slide 23

Slide 23 text

23 System Architecture 機械学習エンジニア の担当部分 画像がS3に保存されていることと GPUの利用のため,バッチサーバはAWSに.

Slide 24

Slide 24 text

24 System Architecture 通常の運用で見る部分

Slide 25

Slide 25 text

25 Monitoring & Deployment 通常の運用では,Datadog でのモニタリングと Spinnaker でのデプロイ・リソース管理のみ

Slide 26

Slide 26 text

26 System Architecture

Slide 27

Slide 27 text

Blue-Green Deployment 27 機械学習モデルはファイルサイズ(10GB+)の都合で Docker Image に含まれないものの, Persistent Volume(ReadOnlyMany)によって,Imutable Infrastructure を実現 モデル更新のたびに Persistent Volumeを生成 コードの更新だけの場合は そのまま (Redisは共通)

Slide 28

Slide 28 text

28 感動出品リリース (2017/10/03〜) KPIや世論の反応を見ながら段階的に解放

Slide 29

Slide 29 text

29

Slide 30

Slide 30 text

30

Slide 31

Slide 31 text

31

Slide 32

Slide 32 text

まとめ 32 • 感動出品の起案からリリースまでを紹介 • Microservices化の流れのおかげもあり短期間でリリース • 雛形や指針が整っていれば機械学習エンジニアでもサービス運用は可能 • 機械学習のシステム面を見る専任チームを用意するのが理想的 • 機械学習エンジニアが専門領域で力を発揮 • モデリングだけしかできないという意味ではない モデリングとリリースをシームレスにつなげて 魅力的な機能を素早くリリースしていきたい

Slide 33

Slide 33 text

Create value in a global marketplace where anyone can buy & sell