地平線まで行ってくる。

記録あるいは忘備録。時には検討事項。

ModernBERTのEmbedding APIサーバーをつくってみる。

ModernBERTのembeddingモデルをAPI経由で利用できるように挑戦してみました。ollamaでは現在対応していないようだすし、複雑なプログラムにはならないだろうとチャレンジしてみます。ついでなのでrerankも組み入れてみます。利用しやすいようにOpenAI互換を狙います。

 

まずは、GoogleのJulesをパートナーに選びます。まずは、要件を定義していき、実装方針を明確化していきます。

 

詳細は割愛しますが、ライブラリとしてはFastAPIとgunicornを採用します。どちらも定番です。これまで利用した経験では安定した動作していました。情報も多いので困ったときには安心です。

 

また、Embeddingモデルとしては、有難くruri-v3モデルを利用させていただきます。

EMBEDDING_MODELS : ["cl-nagoya/ruri-v3-30m", "cl-nagoya/ruri-v3-310m"]
RERANK_MODELS : ["cl-nagoya/ruri-v3-reranker-310m"]

 

Dockerで起動したいので、モデルは一度だけのダウンロードしたいので、ホスト側のキャッシュディレクトリをマウントします。もちろん、Dockerを利用しない場合も同じ個所にキャッシュが生成されるので気楽です。

 

また、調べるとlocustを利用すると負荷テストがでるというので、組み込みます。

 

以上で、Jules君と相談しつつ作成。多少の試行錯誤を行って、シンプルに実装できました。

 

github.com

 

 

負荷テストも実施しました。GPUだとBugやPyTorchのキャッシュの罠?にハマってVRAM食いつかされた経験があります。手探りでテストしましたが大丈夫そうです。信頼性を追求したいわけでもないので、これで良しとします。

 

さて、形になったので実際に組み込んで使ってみることにします。

LLMがすっかり賢くなったので、調査から実装まで楽になりました。