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
1.1k
メルカリの写真検索を支えるバックエンド
Hirofumi Nakagawa/中河 宏文
May 29, 2019
Tweet
Share
More Decks by Hirofumi Nakagawa/中河 宏文
See All by Hirofumi Nakagawa/中河 宏文
IoTデバイスでMLモデルを動かす技術
hnakagawa
0
170
Kanazawa_AI.pdf
hnakagawa
0
190
メルカリ写真検索における Amazon EKS の活用事例と プロダクトにおけるEdgeAI technologyの展望
hnakagawa
5
8.9k
メルカリの写真検索を支えるバックエンド CCSE 2019 version
hnakagawa
0
320
メルカリ写真検索における Amazon EKS の活用事例
hnakagawa
6
29k
Mercari ML Platform
hnakagawa
1
17k
mlct.pdf
hnakagawa
2
2.1k
機械学習によるマーケット健全化施策を支える技術
hnakagawa
0
240
メルカリのマーケット健全化施策を支えるML基盤
hnakagawa
10
9.1k
Other Decks in Programming
See All in Programming
PHPカンファレンス関西2025 基調講演
sugimotokei
6
1.1k
Strands Agents で実現する名刺解析アーキテクチャ
omiya0555
1
110
Bedrock AgentCore ObservabilityによるAIエージェントの運用
licux
8
560
Go製CLIツールをnpmで配布するには
syumai
2
1.1k
MCP連携で加速するAI駆動開発/mcp integration accelerates ai-driven-development
bpstudy
0
260
LLMは麻雀を知らなすぎるから俺が教育してやる
po3rin
3
1.9k
Streamlitで実現できるようになったこと、実現してくれたこと
ayumu_yamaguchi
2
270
Flutterと Vibe Coding で個人開発!
hyshu
1
220
副作用と戦う PHP リファクタリング ─ ドメインイベントでビジネスロジックを解きほぐす
kajitack
3
520
Dart 参戦!!静的型付き言語界の隠れた実力者
kno3a87
0
160
知って得する@cloudflare_vite-pluginのあれこれ
chimame
1
140
一人でAIプロダクトを作るならAIにはもっと働いてもらいたい / I want AI to work harder
rkaga
3
260
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Side Projects
sachag
455
43k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.5k
Statistics for Hackers
jakevdp
799
220k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Done Done
chrislema
185
16k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Six Lessons from altMBA
skipperchong
28
3.9k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Typedesign – Prime Four
hannesfritz
42
2.7k
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