Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
メルカリの写真検索を支えるバックエンド
Search
Hirofumi Nakagawa/中河 宏文
May 29, 2019
Programming
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
メルカリの写真検索を支えるバックエンド
Hirofumi Nakagawa/中河 宏文
May 29, 2019
More Decks by Hirofumi Nakagawa/中河 宏文
See All by Hirofumi Nakagawa/中河 宏文
IoTデバイスでMLモデルを動かす技術
hnakagawa
0
240
Kanazawa_AI.pdf
hnakagawa
0
240
メルカリ写真検索における Amazon EKS の活用事例と プロダクトにおけるEdgeAI technologyの展望
hnakagawa
4
9.2k
メルカリの写真検索を支えるバックエンド CCSE 2019 version
hnakagawa
0
390
メルカリ写真検索における Amazon EKS の活用事例
hnakagawa
6
29k
Mercari ML Platform
hnakagawa
1
18k
mlct.pdf
hnakagawa
2
2.1k
機械学習によるマーケット健全化施策を支える技術
hnakagawa
0
280
メルカリのマーケット健全化施策を支えるML基盤
hnakagawa
10
9.2k
Other Decks in Programming
See All in Programming
フロントエンドUIフレームワークのこれまでとこれから
ssssota
1
510
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
55
36k
自分的「カンファレンスの楽しみ方」
syumai
0
190
Foundry Localでエージェント開発
seosoft
0
150
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
2
2.6k
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
680
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
200
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
170
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.5k
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
600
Press start. Python's next generation.
willingc
PRO
3
320
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
460
Featured
See All Featured
How to build a perfect <img>
jonoalderson
1
6k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Design in an AI World
tapps
1
310
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
Rails Girls Zürich Keynote
gr2m
96
14k
Docker and Python
trallard
47
4.2k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Bash Introduction
62gerente
615
220k
Odyssey Design
rkendrick25
PRO
2
800
Prompt Engineering for Job Search
mfonobong
0
440
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
The Curse of the Amulet
leimatthew05
2
14k
Transcript
1 Confidential - Do Not Share メルカリの写真検索を支えるバックエンド 大規模画像検索システムの裏側
2 Confidential - Do Not Share • 2017年7月入社 • 所属はSRE→今QからAI/MLチーム
• デバイスドライバ開発からフロントエン ド開発までやる何でも屋 • Twitter: hnakagawa14 GitHub: hnakagawa 中河 宏文(hnakagawa)
3 Confidential - Do Not Share 写真検索とは 所謂、画像検索機能 商品名を知らなくても画像から商 品を検索できる機能の事です
動画リンク: https://youtu.be/kTni8EvOCgI
4 Confidential - Do Not Share 基本的な写真検索の仕組み 1. Deep Neural
Networks (DNN)を使用して商品画像から特徴ベクトルを取 得 2. 取得した特徴ベクトルをApproximate Nearest Neighbor Index(ANN Index)に追加して画像indexを構築 3. 検索時には同じく商品画像からDNNを介して特徴量ベクトルを取得し、ANN Indexから検索 ◦ ANN Indexはオンメモリの物を使用しており、そのた めコンテナ化する為にシステム上の工夫が色々ある(後 述
5 Confidential - Do Not Share Architecture概要図
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
7 Confidential - Do Not Share Indexing architecture
8 Confidential - Do Not Share Creating training custom resource
9 Confidential - Do Not Share Creating training custom resource
• Training custom resourceをCronJobが作成 • CRD controllerがcustom resourceで設定された (YAMLベース)pipelineを実 行 • Batch単位としては Hourly,Daily,Montlyが存 在
10 Confidential - Do Not Share Download image
11 Confidential - Do Not Share Download image • Image
store(S3)上に存在する商品画像をダウンロード • 実はPipeline上もっとも時間がかかる工程 ◦ そのため商品画像をk8sのPersistent Volume(PV) に保存し一定期間キャッシュする事によって、再インデッ クスが必要な時には素早くPipelineを回せるようにして いる
12 Confidential - Do Not Share Upload assets
13 Confidential - Do Not Share Upload assets • ETL
Pipelineの成果物、写真検索では特徴ベクトルとANN indexを、 Model Repositoryと呼ばれるモデルストアにバージョン管理された状態で保 存します • Model RepositoryはGCS上に構築
14 Confidential - Do Not Share Batch Execution as Custom
Resource • 全てのbatch実行情報が CRD resourceとして k8s上に残る • batchの再実行を伴う障 害復旧作業が容易
15 Confidential - Do Not Share Serving アーキテクチャ
16 Confidential - Do Not Share Building container image
17 Confidential - Do Not Share Building container image •
Model RepositoryをImage Builderと呼ばれるdaemonが監視 • 新しいindexが追加されると自動でServingコンテナ・イメージをビルドし Container Registry(GCR)にプッシュ
18 Confidential - Do Not Share Create serving custom resource
19 Confidential - Do Not Share Create serving custom resource
• Image Builderはコンテ ナ・イメージをビルドしたあ と、Serving custom resourceを作成 • CRD controllerは custom resourceを元 にDeployment、 Service等のk8sリソース を作成しIndex Service をdeploy
20 Confidential - Do Not Share Service discovery
21 Confidential - Do Not Share Service discovery • 異なる期間・粒度のIndex
Service(Hourly, Daily, Monthly) を自動的に組 み合わせる • REST <-> Index Service間のプロトコルは gRPCを使用
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