メルカリの写真検索を支えるバックエンド

 メルカリの写真検索を支えるバックエンド

Transcript

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

  2. 2 Confidential - Do Not Share • 2017年7月入社 • 所属はSRE→今QからAI/MLチーム

    • デバイスドライバ開発からフロントエン ド開発までやる何でも屋 • Twitter: hnakagawa14 GitHub: hnakagawa 中河 宏文(hnakagawa)
  3. 3 Confidential - Do Not Share 写真検索とは 所謂、画像検索機能 商品名を知らなくても画像から商 品を検索できる機能の事です

    動画リンク: https://youtu.be/kTni8EvOCgI
  4. 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. 5 Confidential - Do Not Share Architecture概要図

  6. 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. 7 Confidential - Do Not Share Indexing architecture

  8. 8 Confidential - Do Not Share Creating training custom resource

  9. 9 Confidential - Do Not Share Creating training custom resource

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

  11. 11 Confidential - Do Not Share Download image • Image

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

  13. 13 Confidential - Do Not Share Upload assets • ETL

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

    Resource • 全てのbatch実行情報が CRD resourceとして k8s上に残る • batchの再実行を伴う障 害復旧作業が容易
  15. 15 Confidential - Do Not Share Serving アーキテクチャ

  16. 16 Confidential - Do Not Share Building container image

  17. 17 Confidential - Do Not Share Building container image •

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

  19. 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. 20 Confidential - Do Not Share Service discovery

  21. 21 Confidential - Do Not Share Service discovery • 異なる期間・粒度のIndex

    Service(Hourly, Daily, Monthly) を自動的に組 み合わせる • REST <-> Index Service間のプロトコルは gRPCを使用
  22. 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