ハギング・フェイスTEICompatible with Milvus 2.6.x
Hugging FaceText Embeddings Inference (TEI)は、特にテキスト埋め込みモデルのために設計された高性能推論サーバーです。このガイドでは、MilvusでHugging Face TEIを使用し、効率的にテキスト埋め込みを生成する方法を説明します。
TEIはHugging Face Hubが提供する以下のような多くのテキスト埋め込みモデルに対応しています:
BAAI/bge-*シリーズ
sentence-transformers/* シリーズ
E5モデル
GTEモデル
その他多数
最新の対応機種一覧は、TEI GitHubリポジトリおよびHugging Face Hubをご参照ください。
TEIの導入
MilvusにTEI機能を設定する前に、TEIサービスが動作している必要があります。Milvusは2つのTEIデプロイ方法をサポートしています:
標準デプロイメント(外部デプロイメント)
Hugging Faceの公式メソッドを使用して、TEIをスタンドアロンサービスとしてデプロイすることができます。このアプローチでは、TEIサービスを最大限に柔軟にコントロールすることができます。
Dockerやその他の方法を用いたTEIのデプロイに関する詳しい説明は、Hugging Face Text Embeddings Inferenceの公式ドキュメントを参照してください。
デプロイ後、MilvusのTEI機能を使用する際に必要となりますので、TEIサービスのエンドポイント(例:http://localhost:8080 )を控えておいてください。
Milvus Helm Chartのデプロイ(統合)
Kubernetes環境向けに、MilvusはHelmチャートによる統合デプロイオプションを提供しています。これにより、Milvusと一緒にTEIのデプロイと設定を行うことで、プロセスを簡素化することができます。
MilvusのHelmデプロイメントでTEIを有効にするには:
TEIを有効にするためにvalues.yamlを設定します:
tei: enabled: true image: repository: ghcr.io/huggingface/text-embeddings-inference tag: "1.7" # Modify based on hardware model: "BAAI/bge-large-en-v1.5" # Modify based on requirements # revision: "main" # hfTokenSecretName: "my-huggingface-token-secret" # apiKey: "your_secure_api_key" # apiKeySecret: # name: "my-tei-api-key-secret" # key: "api-key" resources: requests: cpu: "1" memory: "4Gi" # nvidia.com/gpu: "1" # For GPU limits: cpu: "2" memory: "8Gi" # nvidia.com/gpu: "1" # For GPU extraArgs: []Milvusをデプロイまたはアップグレードします:
helm install my-release milvus/milvus -f values.yaml -n <your-milvus-namespace> # or helm upgrade my-release milvus/milvus -f values.yaml --reset-then-reuse-values -n <your-milvus-namespace>Helmチャートデプロイメントを使用する場合、TEIサービスはKubernetesクラスタ内の
http://my-release-milvus-tei:80(リリース名を使用)でアクセスできるようになります。これをTEI機能設定のエンドポイントとして使用します。
milvusでの設定
TEIサービスをデプロイした後、TEIエンベッディング関数を定義する際にエンドポイントを指定する必要があります。MilvusではデフォルトでTEIが有効になっているため、ほとんどの場合、追加の設定は必要ありません。
ただし、TEIサービスがAPIキー認証(--api-key フラグ)付きでデプロイされている場合、Milvusがこのキーを使用するように設定する必要があります:
credential:# milvus.yaml credential: tei_key: # You can use any label name apikey: <YOUR_TEI_API_KEY>milvus.yamlでクレデンシャルを参照する:
function: textEmbedding: providers: tei: credential: tei_key # ← choose any label you defined above enable: true # enabled by default. no action required.
埋め込み関数を使用する
TEIサービスが設定されたら、以下のステップに従って埋め込み関数を定義し、使用してください。
ステップ1:スキーマ・フィールドの定義
埋め込み関数を使用するには、特定のスキーマを持つコレクションを作成します。このスキーマには、少なくとも3つの必要なフィールドが含まれていなければなりません:
コレクション内の各エンティティを一意に識別するプライマリフィールド。
埋め込む生データを格納するスカラーフィールド。
スカラー・フィールドに対して関数が生成するベクトル埋め込みを格納するために予約されたベクトル・フィールド。
次の例では、テキストデータを格納するためのスカラーフィールド"document" と、Functionモジュールによって生成される埋め込みデータを格納するためのベクトルフィールド"dense_vector" を持つスキーマを定義しています。ベクトル次元(dim)は、選択した埋め込みモデルの出力に合わせて設定することを忘れないでください。
from pymilvus import MilvusClient, DataType, Function, FunctionType, CollectionSchema, FieldSchema
# Assume you have connected to Milvus
# client = MilvusClient(uri="http://localhost:19530")
# 1. Create Schema
schema = MilvusClient.create_schema()
# 2. Add fields
schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False)
schema.add_field("document", DataType.VARCHAR, max_length=9000) # Store text data
# IMPORTANT: Set dim to exactly match the TEI model's output dimension
schema.add_field("dense_vector", DataType.FLOAT_VECTOR, dim=1024) # Store embedding vectors (example dimension)
ステップ 2: スキーマへの埋め込み関数の追加
MilvusのFunctionモジュールは、スカラーフィールドに格納された生データを自動的に埋め込みデータに変換し、明示的に定義されたベクトルフィールドに格納します。
下の例では、スカラーフィールド"document" をエンベッディングに変換する Function モジュール (tei_func) を追加し、結果のベクトルを先に定義した"dense_vector" ベクトルフィールドに格納しています。
埋め込み関数を定義したら、コレクションスキーマに追加します。これにより、Milvusは指定された埋め込み関数を使用して、テキストデータの埋め込みを処理し、格納するようになります。
# 3. Define TEI embedding function
text_embedding_function = Function(
name="tei_func", # Unique identifier for this embedding function
function_type=FunctionType.TEXTEMBEDDING, # Indicates a text embedding function
input_field_names=["document"], # Scalar field(s) containing text data to embed
output_field_names=["dense_vector"], # Vector field(s) for storing embeddings
params={ # TEI specific parameters (function-level)
"provider": "TEI", # Must be set to "TEI"
"endpoint": "http://your-tei-service-endpoint:80", # Required: Points to your TEI service address
# Optional parameters:
# "truncate": "true", # Optional: Whether to truncate long input (default false)
# "truncation_direction": "right", # Optional: Truncation direction (default right)
# "max_client_batch_size": 64, # Optional: Client max batch size (default 32)
# "ingestion_prompt": "passage: ", # Optional: (Advanced) Ingestion phase prompt
# "search_prompt": "query: " # Optional: (Advanced) Search phase prompt
}
)
# Add the configured embedding function to your existing collection schema
schema.add_function(text_embedding_function)
パラメータ |
必須 |
説明 |
値の例 |
|---|---|---|---|
|
はい |
埋め込みモデルプロバイダ。TEI "に設定する。 |
"TEI" |
|
Yes |
デプロイされたTEIサービスを指すネットワークアドレス。Milvus Helm Chart 経由でデプロイされた場合、通常は内部サービスアドレスになります。 |
"http://localhost:8080", "http://my-release-milvus-tei:80" |
|
いいえ |
モデルの最大長を超える入力テキストを切り捨てるかどうか。デフォルトはfalse。 |
"true" |
|
いいえ |
truncateがtrueの場合に有効。左から切り捨てるか、右から切り捨てるかを指定します。デフォルトは右。 |
"left" |
|
いいえ |
MilvusクライアントがTEIに送信する最大バッチサイズ。デフォルトは32。 |
64 |
|
いいえ |
(詳細) 文節変換設定プロンプト辞書のキーを指定する。特定のプロンプト形式を必要とする特定のモデルに使用される。TEIのサポートは制限される場合があり、Hub上のモデルの設定に依存する。 |
"your_prompt_key" |
|
いいえ |
(詳細)データ挿入(取り込み)フェーズで使用するプロンプトを指定します。使用するTEIモデルによって異なります。モデルはプロンプトをサポートしている必要があります。 |
「プロンプトをサポートしている必要があります:" |
|
いいえ |
(詳細)検索フェーズで使用するプロンプトを指定する。使用するTEIモデルに依存する。モデルはプロンプトをサポートしていなければならない。 |
"query:" |
次のステップ
埋め込み関数を設定した後、インデックス設定、データ挿入例、セマンティック検索操作に関する追加ガイダンスについては、「関数の概要」を参照してください。