Slide 1

Slide 1 text

1 Confidential - Do Not Share メルカリの写真検索を支えるバックエンド 大規模画像検索システムの裏側

Slide 2

Slide 2 text

2 Confidential - Do Not Share ● 2017年7月入社 ● 所属はSRE→今QからAI/MLチーム ● デバイスドライバ開発からフロントエン ド開発までやる何でも屋 ● Twitter: hnakagawa14 GitHub: hnakagawa 中河 宏文(hnakagawa)

Slide 3

Slide 3 text

3 Confidential - Do Not Share 写真検索とは 所謂、画像検索機能 商品名を知らなくても画像から商 品を検索できる機能の事です 動画リンク: https://youtu.be/kTni8EvOCgI

Slide 4

Slide 4 text

4 Confidential - Do Not Share 基本的な写真検索の仕組み 1. Deep Neural Networks (DNN)を使用して商品画像から特徴ベクトルを取 得 2. 取得した特徴ベクトルをApproximate Nearest Neighbor Index(ANN Index)に追加して画像indexを構築 3. 検索時には同じく商品画像からDNNを介して特徴量ベクトルを取得し、ANN Indexから検索 ○ ANN Indexはオンメモリの物を使用しており、そのた めコンテナ化する為にシステム上の工夫が色々ある(後 述

Slide 5

Slide 5 text

5 Confidential - Do Not Share Architecture概要図

Slide 6

Slide 6 text

6 Confidential - Do Not Share ML Platform Lykeion 写真検索はLykeionと呼ばれる内製の MLPlatform上に構築されており、以下の機 能はPlatform側の機能を使用している ● Training/Serving custom resource definition controller ● Container based pipeline ● Serving/Training Image builder ● Model repository

Slide 7

Slide 7 text

7 Confidential - Do Not Share Indexing architecture

Slide 8

Slide 8 text

8 Confidential - Do Not Share Creating training custom resource

Slide 9

Slide 9 text

9 Confidential - Do Not Share Creating training custom resource ● Training custom resourceをCronJobが作成 ● CRD controllerがcustom resourceで設定された (YAMLベース)pipelineを実 行 ● Batch単位としては Hourly,Daily,Montlyが存 在

Slide 10

Slide 10 text

10 Confidential - Do Not Share Download image

Slide 11

Slide 11 text

11 Confidential - Do Not Share Download image ● Image store(S3)上に存在する商品画像をダウンロード ● 実はPipeline上もっとも時間がかかる工程 ○ そのため商品画像をk8sのPersistent Volume(PV) に保存し一定期間キャッシュする事によって、再インデッ クスが必要な時には素早くPipelineを回せるようにして いる

Slide 12

Slide 12 text

12 Confidential - Do Not Share Upload assets

Slide 13

Slide 13 text

13 Confidential - Do Not Share Upload assets ● ETL Pipelineの成果物、写真検索では特徴ベクトルとANN indexを、 Model Repositoryと呼ばれるモデルストアにバージョン管理された状態で保 存します ● Model RepositoryはGCS上に構築

Slide 14

Slide 14 text

14 Confidential - Do Not Share Batch Execution as Custom Resource ● 全てのbatch実行情報が CRD resourceとして k8s上に残る ● batchの再実行を伴う障 害復旧作業が容易

Slide 15

Slide 15 text

15 Confidential - Do Not Share Serving アーキテクチャ

Slide 16

Slide 16 text

16 Confidential - Do Not Share Building container image

Slide 17

Slide 17 text

17 Confidential - Do Not Share Building container image ● Model RepositoryをImage Builderと呼ばれるdaemonが監視 ● 新しいindexが追加されると自動でServingコンテナ・イメージをビルドし Container Registry(GCR)にプッシュ

Slide 18

Slide 18 text

18 Confidential - Do Not Share Create serving custom resource

Slide 19

Slide 19 text

19 Confidential - Do Not Share Create serving custom resource ● Image Builderはコンテ ナ・イメージをビルドしたあ と、Serving custom resourceを作成 ● CRD controllerは custom resourceを元 にDeployment、 Service等のk8sリソース を作成しIndex Service をdeploy

Slide 20

Slide 20 text

20 Confidential - Do Not Share Service discovery

Slide 21

Slide 21 text

21 Confidential - Do Not Share Service discovery ● 異なる期間・粒度のIndex Service(Hourly, Daily, Monthly) を自動的に組 み合わせる ● REST <-> Index Service間のプロトコルは gRPCを使用

Slide 22

Slide 22 text

22 Confidential - Do Not Share まとめ ● メルカリの写真検索はAWSとGCPのマルチクラウドで構築されている ○ Image storeにS3を使っているため ○ k8sでインフラを抽象化する事によって、AWSとGCPの 差異を埋め各クラウド・プロバイダの良いとこ取りができ る ● k8sの機能を活用し、ロバストなシステムを構築 ○ Training/Serving CRD controller ○ Batch Execution as Custom Resource ○ Service discovery