Slide 1

Slide 1 text

OpenSearchで実現する画像検索と テスト追加で目指す安定運用 【10X/M3/CADDi】検索エンジン運用勉強会 #Search_C10Xm3 CADDi - AI Lab - MLE 志水彰太 @banbiossa

Slide 2

Slide 2 text

目次 • OpenSearch で knn を用いた画像検索 • Drawerと 、図面と • 検索システム 全体アーキテクチャ • OpenSearch • モデル • テスト追加で目指す安定運用 • unit test • integration test • IO, mapping, many requests, filter • 監視 • 運用 移行 Copyright 2017-2022 CADDi Inc. All rights reserved. 2

Slide 3

Slide 3 text

CADDi DRAWER 図面管理 aa . 今年7月に正式ローンチ.
 類似図面 検索、図面 解析(読み取り)、発注実績 紐付け等を提供.


Slide 4

Slide 4 text

図面って何? 4 製造業、も を作る過程で設計図、レシピとなるも . こ 素材 も をこ 形で加工してほしい、等々と設計/製造 ナレッジが詰め込まれている 寸法値 寸法線 テーブル情報 記号

Slide 5

Slide 5 text

図面にまつわる pain Copyright 2017-2022 CADDi Inc. All rights reserved. 5 業務都合上「似た」図面を作る機会が多く(勝手違いや寸法違いなど)見た目で 類似が検索できることに価 値がある.業務や会社を跨ぐ際に pdf 化されることが多く、pdf で 実現が必要. 寸法違い 例

Slide 6

Slide 6 text

検索システム 全体アーキテクチャ Copyright 2017-2022 CADDi Inc. All rights reserved. 6 検索システム 検索エンジンと、そこにデータを出し入れするコンポーネントで構成される ペンギン本 p.17より 今日 登壇者全員読んでます! @po3rin 紹介ありがとう!

Slide 7

Slide 7 text

検索システム 全体アーキテクチャ Copyright 2017-2022 CADDi Inc. All rights reserved. 7 Drawer 検索システム 検索エンジン(OpenSearch) とそれにアクセスするAPIで構成. ペンギン本 p.17より CADDi で Drawer (サービス)と Kaleido (検索システム) 構成

Slide 8

Slide 8 text

検索システム 全体アーキテクチャ Copyright 2017-2022 CADDi Inc. All rights reserved. 8 クエリ、モデル、検索エンジンをAI Labが開発/運用している. DRAWERチーム: サービス全体(灰色) AI Lab: Kaleido (水色) が責任分界点

Slide 9

Slide 9 text

OpenSearchと ● https://www.elastic.co/blog/why-license-change-aws
 ○ o why the change? AW and Amazon Elasticsearch ervice. hey have been doing things that we think are just NO OK since 2015 and it has only gotten worse. If we don’t stand up to them now, as a successful company and leader in the market, who will?
 ● https://aws.amazon.com/Open earch-service/the-elk-stack/what-is-Open earch/
 ○ On January 21, 2021, Elastic NV announced that they would change their software licensing strategy and not release new versions of Elasticsearch and Kibana under the permissive Apache License, Version 2.0 (ALv2).
 ● https://aws.amazon.com/blogs/opensource/stepping-up-for-a-truly-open-source-elasticsearch/
 ○ Choosing to fork a project is not a decision to be taken lightly, but it can be the right path forward when the needs of a community diverge—as they have here.
 ● https://www.elastic.co/blog/elastic-and-amazon-reach-agreement-on-trademark-infringement-lawsuit
 ○ We’re pleased to share that Elastic and Amazon have resolved the trademark infringement lawsuit related to the term Elasticsearch. Copyright 2017-2022 CADDi Inc. All rights reserved. 9 元々あった が Elasticsearch. それを AWS managed として提供していた.Elastic が怒って license を変えた. aws 怒って fork (OpenSearch) を作った.(そ 後仲直りした but the damage is done) docs 綺麗ですが如何せんElasticsearch に比べて歴史が浅い で、ちょっとしたエラーメッセージでググると何にも出てきませ ん. そ 場合 `s/OpenSearch/Elasticsearch/g` して検索するとちゃんとヒットします.そしてそ コピペで大体動きます.

Slide 10

Slide 10 text

なぜOpenSearch? 技術選定時点において以下を考慮した - kNN + filter が必要要件だった - 形状で似ているも を出してきた後に、素材が同じも だけに絞る、とか値段が近いも だけに絞る、など ユースケース - OpenSearch に導入された時期: v1.0 (2021/07/13) - Elasticsearch に導入された時期: Elasticsearch 8.2 (2022/05/04) thank you @po3rin - ANN (approximate nearest neighbor) 活用を考えていて、ANN OpenSearch が elastic に先行して導入さ れていた - OpenSearch に導入された時期: v1.2 (2021/11/23) - Elastic に導入された時期: Elasticsearch 8.0 (2022/02/07) - ANN だと post filter になってしまう で今 使ってません - (HNSW 結構感動する で読む or 見てみてほしい) 今からスタートするなら Elasticsearch でもできる! Copyright 2017-2022 CADDi Inc. All rights reserved. 10 HNSW解説動画

Slide 11

Slide 11 text

why k8s? managed ? - 現在 k8s 上に自前でやっている - k8s があった でk8s 上に構築してしまった - managed 検討されなかった - つらみ ? - ディスク スケール等課題が出た (platform team にかなり協力をお願いした) - managed 検討 - OpenSearch managed AWS に あるけど GCP に ない - CADDi インフラ今 ところ GCP - Elastic Cloud on GCP - @metalunk に教えてもらった - ai-lab-sandbox なかで enable してもらった で、やっていき...! Copyright 2017-2022 CADDi Inc. All rights reserved. 11

Slide 12

Slide 12 text

モデル - 1280 次元大きくない? - 大きいんだけど、検索自体 ~20msec あたりでちゃんと返ってきます! - もちろんデータ オーダーによる、DRAWER だと各社 1k ~ 1M あたり オーダー Copyright 2017-2022 CADDi Inc. All rights reserved. 12 図面から 母材形状認識 【ABEJA × CADDi】 Computer Vision ビジネス活用を考える

Slide 13

Slide 13 text

indexing 周り - 画像を得る -> deep 推論にかける -> OpenSearch に挿入、が画像特徴量部分. - 現状結構な待ちが発生する(最大20秒とか) で呼出側が pub-sub にしている - 早くするため 全体アーキテクチャ 再考をした - 推論部分を k8s から切り出し VertexModel/Endpoint に - 必要に応じてスケールするし、モデル 再デプロイも容易に - (今まで .pkl ファイルをDockerに含めてました) - Filtering 実現 ために metadata (素材/表面処理/部品名など)を同時に insert している (ここ 現状 ops heavy) - 価格 情報(価格、製造会社、日時等)紐づけ - 図面IDをkey にした外部テーブルだが、 join した状態で持ってある Copyright 2017-2022 CADDi Inc. All rights reserved. 13 index されるデータ イメージ

Slide 14

Slide 14 text

目次 • OpenSearch で knn を用いた画像検索 • Drawerと 、図面と • 検索システム 全体アーキテクチャ • OpenSearch • モデル • テスト追加で目指す安定運用 • unit test • integration test • IO, mapping, many requests, filter • 監視 • 運用 移行 Copyright 2017-2022 CADDi Inc. All rights reserved. 14

Slide 15

Slide 15 text

テストってなんだっけ 全体像 Copyright 2017-2022 CADDi Inc. All rights reserved. 15 Unit Test Integration Test UI Test Users CI / CD Application

Slide 16

Slide 16 text

テスト追加で目指す安定運用: unit test function ごとにテストをする が unit test. - code coverage 100% 近い - 一番難しいコードってどこ? - クエリプロセッサ(pre/post) クラスを作成 - Deep推論部分 型付けを厳密にして安全性を担保 - endpoint api client を mock Copyright 2017-2022 CADDi Inc. All rights reserved. 16

Slide 17

Slide 17 text

integration test Copyright 2017-2022 CADDi Inc. All rights reserved. 17 検索システム全体 整合性を担保する が integrationt test. テストによりサービス IOを明確化 - Drawer サービスに繋げるに際して、検索エンジン部分 動作 contract をしたかった - unit test だけで カバーしきれない部分 - index 作成、mock データ作成、データ 挿入と検索まで - meta データ み→deep 特徴→発注実績と複雑化に伴いテストも追加

Slide 18

Slide 18 text

integration test: snapshotでmapping整合性 devを破壊したり bug を見つけるたびに追加している. - search ロジックに破壊的変更をしてしまった - 返却されたデータに対して `[]` でアクセス、新しいデータに あるけど古いデータに ない field - integration test 通るけど古い index で 落ちる状態 (`.get()` であれ 問題 無かった) - snapshot をとっておき、復元した index に対してもsearch が動くことを確認 Copyright 2017-2022 CADDi Inc. All rights reserved. 18 罪深いコード 対応に追われる関係者 目先+今後 対応方針

Slide 19

Slide 19 text

integration test: checkerboard features knn search 後 filter で、filter 結果 みが残り knn 結果が反映されないことがわかった - search 書き方が悪かったため、score=replace で対応 - こ 現象 テストに knn で類似した結果が出ることを mock data で保証する必要があった - mock data 中身を random で なく checkerboard features に置き換え、テストで検知できるこ とを確認した Copyright 2017-2022 CADDi Inc. All rights reserved. 19 障害 周知 ポストモーテムで原因を共有 キャッチするため テスト追加

Slide 20

Slide 20 text

integration test: pruning power で消すことも大事 - 増えすぎたり、integration test 内 依存が発生したりする - pruning したり、restructure する努力 必要 Copyright 2017-2022 CADDi Inc. All rights reserved. 20 差分がでかくなりがちですが必要で す...!

Slide 21

Slide 21 text

監視 - Datadogにログ、Sentryでエラー、Slack 専用チャネルに - 一部 opsgenie で電話対応もある - 定性テストで引っかかるも も多い - エラーが上がったら - ダッシュボードを見に行く - や そう、作業者がいそうなら全体チャネルで共有 - 必要ならPDM,CSが顧客対応(モーダルを出したり) - 手元で動作確認して同じ現象を確認する - ググったりちょっとずつ触ったりして直してみる - dev環境に反映して動作確認 - stg, prod へも反映 - 後日ポストモーテム Copyright 2017-2022 CADDi Inc. All rights reserved. 21

Slide 22

Slide 22 text

PM「ちょっと精度悪いんだけど?」 画像検索あるある - こ 時やるべきこと - 1件1件場合たり的に対応しなくていい仕組みを作る - 定性的評価に右往左往しない様にする - 要望改善リストをまとめる - スプレッドシートを用意し、「これいまいち!」みたいな声を集める - 量があって傾向が存在するなら対応する必要がある - スプレッドシート カラム こんなやつ - 定量評価データセットを用意する - 前モデルと比較し、定量データ評価セット上 よくなっていることを論拠とする - 定量 評価と定性 評価に相関がある、と言えるとなおよい - 定量データセット - 「類似」に関して クエリ図面と候補図面を用意し、評価者複数による「類似」 基準を作る Copyright 2017-2022 CADDi Inc. All rights reserved. 22

Slide 23

Slide 23 text

運用 移譲 開発当初(今年初め〜今あたりまで) リソースやら検索へ 知見やらで Drawer 要件を整理して AI Lab が開発、運用を担ってきた. 一方で サービス側がローンチされ、要件が増えるに従って当初考えていた「Deep 特徴による類似」 から各種条件によるフィルタリング、通貨へ 対応等サービスと息を合わせた開発が必要になってき た. 何を開発するか ロードマップ 整理、使っている技術 整理、モブプロによる知識 移行を少しずつ 進めてDrawerチームが持てるように進めている. Copyright 2017-2022 CADDi Inc. All rights reserved. 23

Slide 24

Slide 24 text

We are hiring!! 「キャディ エンジニア採用」で検索!