Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
メルカリの写真検索を支えるバックエンド
Search
Hirofumi Nakagawa/中河 宏文
May 29, 2019
Programming
1
1.2k
メルカリの写真検索を支えるバックエンド
Hirofumi Nakagawa/中河 宏文
May 29, 2019
Tweet
Share
More Decks by Hirofumi Nakagawa/中河 宏文
See All by Hirofumi Nakagawa/中河 宏文
IoTデバイスでMLモデルを動かす技術
hnakagawa
0
200
Kanazawa_AI.pdf
hnakagawa
0
200
メルカリ写真検索における Amazon EKS の活用事例と プロダクトにおけるEdgeAI technologyの展望
hnakagawa
5
9k
メルカリの写真検索を支えるバックエンド CCSE 2019 version
hnakagawa
0
330
メルカリ写真検索における Amazon EKS の活用事例
hnakagawa
6
29k
Mercari ML Platform
hnakagawa
1
17k
mlct.pdf
hnakagawa
2
2.1k
機械学習によるマーケット健全化施策を支える技術
hnakagawa
0
250
メルカリのマーケット健全化施策を支えるML基盤
hnakagawa
10
9.1k
Other Decks in Programming
See All in Programming
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
310
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
500
20 years of Symfony, what's next?
fabpot
2
350
connect-python: convenient protobuf RPC for Python
anuraaga
0
400
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
110
AIコーディングエージェント(Gemini)
kondai24
0
210
大体よく分かるscala.collection.immutable.HashMap ~ Compressed Hash-Array Mapped Prefix-tree (CHAMP) ~
matsu_chara
2
220
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
130
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
160
開発に寄りそう自動テストの実現
goyoki
1
910
Microservices Platforms: When Team Topologies Meets Microservices Patterns
cer
PRO
1
1k
MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会|Jigsaw 15th Solution
hasibirok0
0
230
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
[SF Ruby Conf 2025] Rails X
palkan
0
510
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
Practical Orchestrator
shlominoach
190
11k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Facilitating Awesome Meetings
lara
57
6.7k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
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