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
160
Kanazawa_AI.pdf
hnakagawa
0
170
メルカリ写真検索における Amazon EKS の活用事例と プロダクトにおけるEdgeAI technologyの展望
hnakagawa
5
8.8k
メルカリの写真検索を支えるバックエンド CCSE 2019 version
hnakagawa
0
300
メルカリ写真検索における Amazon EKS の活用事例
hnakagawa
6
29k
Mercari ML Platform
hnakagawa
1
17k
mlct.pdf
hnakagawa
2
2k
機械学習によるマーケット健全化施策を支える技術
hnakagawa
0
230
メルカリのマーケット健全化施策を支えるML基盤
hnakagawa
10
9k
Other Decks in Programming
See All in Programming
Youtube Lofier - Chrome拡張開発
ninikoko
0
2.4k
いまさら聞けない生成AI入門: 「生成AIを高速キャッチアップ」
soh9834
15
4.5k
AWS で実現する安全な AI エージェントの作り方 〜 Bedrock Engineer の実装例を添えて 〜 / how-to-build-secure-ai-agents
gawa
8
690
Devinのメモリ活用の学びを自社サービスにどう組み込むか?
itarutomy
0
2k
Building a macOS screen saver with Kotlin (Android Makers 2025)
zsmb
1
140
自分のために作ったアプリが、グローバルに使われるまで / Indie App Development Lunch LT
pixyzehn
1
150
複数ドメインに散らばってしまった画像…! 運用中のPHPアプリに後からCDNを導入する…!
suguruooki
0
470
エンジニア未経験が最短で戦力になるためのTips
gokana
0
260
マルチアカウント環境での、そこまでがんばらない RI/SP 運用設計
wa6sn
0
710
Signal-Based Data FetchingWith the New httpResource
manfredsteyer
PRO
0
160
Going Structural with Named Tuples
bishabosha
0
200
AIコーディングワークフローの試行 〜AIエージェント×ワークフローでの自動化を目指して〜
rkaga
2
3.3k
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
GraphQLとの向き合い方2022年版
quramy
46
14k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Visualization
eitanlees
146
16k
Java REST API Framework Comparison - PWX 2021
mraible
30
8.5k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
RailsConf 2023
tenderlove
30
1.1k
Unsuck your backbone
ammeep
670
57k
A better future with KSS
kneath
239
17k
For a Future-Friendly Web
brad_frost
176
9.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