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

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

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

More Decks by Hirofumi Nakagawa/中河 宏文

Other Decks in Programming

Transcript

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

    • デバイスドライバ開発からフロントエン ド開発までやる何でも屋 • Twitter: hnakagawa14 GitHub: hnakagawa 中河 宏文(hnakagawa)
  2. 4 Confidential - Do Not Share 基本的な写真検索の仕組み 1. Deep Neural

    Networks (DNN)を使用して商品画像から特徴ベクトルを取 得 2. 取得した特徴ベクトルをApproximate Nearest Neighbor Index(ANN Index)に追加して画像indexを構築 3. 検索時には同じく商品画像からDNNを介して特徴量ベクトルを取得し、ANN Indexから検索 ◦ ANN Indexはオンメモリの物を使用しており、そのた めコンテナ化する為にシステム上の工夫が色々ある(後 述
  3. 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
  4. 9 Confidential - Do Not Share Creating training custom resource

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

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

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

    Resource • 全てのbatch実行情報が CRD resourceとして k8s上に残る • batchの再実行を伴う障 害復旧作業が容易
  8. 17 Confidential - Do Not Share Building container image •

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

    • Image Builderはコンテ ナ・イメージをビルドしたあ と、Serving custom resourceを作成 • CRD controllerは custom resourceを元 にDeployment、 Service等のk8sリソース を作成しIndex Service をdeploy
  10. 21 Confidential - Do Not Share Service discovery • 異なる期間・粒度のIndex

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