Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

More Decks by Hirofumi Nakagawa/中河 宏文

Other Decks in Programming

Transcript

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

    View Slide

  2. 2
    Confidential - Do Not Share
    ● 2017年7月入社
    ● 所属はSRE→今QからAI/MLチーム
    ● デバイスドライバ開発からフロントエン
    ド開発までやる何でも屋
    ● Twitter: hnakagawa14
    GitHub: hnakagawa
    中河 宏文(hnakagawa)

    View Slide

  3. 3
    Confidential - Do Not Share
    写真検索とは
    所謂、画像検索機能
    商品名を知らなくても画像から商
    品を検索できる機能の事です
    動画リンク: https://youtu.be/kTni8EvOCgI

    View Slide

  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はオンメモリの物を使用しており、そのた
    めコンテナ化する為にシステム上の工夫が色々ある(後

    View Slide

  5. 5
    Confidential - Do Not Share
    Architecture概要図

    View Slide

  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

    View Slide

  7. 7
    Confidential - Do Not Share
    Indexing architecture

    View Slide

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

    View Slide

  9. 9
    Confidential - Do Not Share
    Creating training custom resource
    ● Training custom
    resourceをCronJobが作成
    ● CRD controllerがcustom
    resourceで設定された
    (YAMLベース)pipelineを実

    ● Batch単位としては
    Hourly,Daily,Montlyが存

    View Slide

  10. 10
    Confidential - Do Not Share
    Download image

    View Slide

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

    View Slide

  12. 12
    Confidential - Do Not Share
    Upload assets

    View Slide

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

    View Slide

  14. 14
    Confidential - Do Not Share
    Batch Execution as Custom Resource
    ● 全てのbatch実行情報が
    CRD resourceとして
    k8s上に残る
    ● batchの再実行を伴う障
    害復旧作業が容易

    View Slide

  15. 15
    Confidential - Do Not Share
    Serving アーキテクチャ

    View Slide

  16. 16
    Confidential - Do Not Share
    Building container image

    View Slide

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

    View Slide

  18. 18
    Confidential - Do Not Share
    Create serving custom resource

    View Slide

  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

    View Slide

  20. 20
    Confidential - Do Not Share
    Service discovery

    View Slide

  21. 21
    Confidential - Do Not Share
    Service discovery
    ● 異なる期間・粒度のIndex
    Service(Hourly, Daily,
    Monthly) を自動的に組
    み合わせる
    ● REST <-> Index
    Service間のプロトコルは
    gRPCを使用

    View Slide

  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

    View Slide