ローカルでMilvus Liteを動かす
このページでは、Milvus Liteを使ってローカルでMilvusを実行する方法を説明します。Milvus LiteはMilvusの軽量版です。Milvusはオープンソースのベクトルデータベースで、ベクトル埋め込みと類似性検索によりAIアプリケーションを強化します。
概要
Milvus LiteはPythonアプリケーションにインポートすることができ、Milvusのコアとなるベクトル検索機能を提供します。Milvus LiteはMilvusのPython SDKに含まれています。デプロイはpip install pymilvus
で簡単に行うことができます。
Milvus Liteを使えば、ベクトル類似性検索を使ったAIアプリケーションを数分で作り始めることができます!Milvus Liteは以下の環境で動作します:
- Jupyter Notebook / Google Colab
- ラップトップ
- エッジデバイス
Milvus LiteはMilvus StandaloneおよびDistributedと同じAPIを共有し、ベクトルデータの永続化と管理、ベクトルCRUD操作、スパースおよびデンスベクトル検索、メタデータフィルタリング、マルチベクトルおよびhybrid_searchなど、ほとんどの機能をカバーしています。これらを組み合わせることで、エッジデバイスからクラウド上のクラスタまで、さまざまなタイプの環境にわたって一貫したエクスペリエンスを提供し、さまざまな規模のユースケースにフィットします。同じクライアント側のコードで、ラップトップやJupyter Notebook上のMilvus Lite、Dockerコンテナ上のMilvus Standalone、または本番環境で数十億のベクターに対応する大規模なKubernetesクラスタ上のMilvus DistributedでGenAIアプリを実行することができます。
前提条件
Milvus Liteは現在以下の環境をサポートしています:
- Ubuntu >= 20.04 (x86_64およびarm64)
- MacOS >= 11.0 (Apple Silicon M1/M2およびx86_64)
Milvus Liteは小規模なベクトル検索のユースケースにのみ適しています。大規模なユースケースでは、Milvus StandaloneまたはMilvus Distributedのご利用をお勧めします。また、フルマネージドのMilvus onZilliz Cloudもご検討ください。
Milvus Liteのセットアップ
pip install -U pymilvus
pymilvus
の利用を推奨します。milvus-lite
はpymilvus
バージョン2.4.2以上に含まれているため、pip install
を-U
で強制的に最新版にアップデートすると、milvus-lite
が自動的にインストールされます。
milvus-lite
パッケージを明示的にインストールしたい場合や、古いバージョンのmilvus-lite
をインストールしており、それをアップデートしたい場合は、pip install -U milvus-lite
。
Milvus Liteへの接続
pymilvus
で、MilvusClientのuriパラメータにローカルファイル名を指定すると、Milvus Liteが使用されます。
from pymilvus import MilvusClient
client = MilvusClient("./milvus_demo.db")
上記のコードを実行すると、カレントフォルダにmilvus_demo.dbというデータベースファイルが生成されます。
client = MilvusClient(uri="http://localhost:19530", token="username:password")
注:同じAPIがMilvus Standalone, Milvus Distributed, Zilliz Cloudにも適用されます。唯一の違いはローカルファイル名をリモートサーバーエンドポイントと認証情報に置き換えることです。
例
以下はMilvus Liteを使ったテキスト検索の簡単なデモです。RAG、画像検索、LangChainや LlamaIndexのような一般的なRAGフレームワークでのMilvus Liteの使用など、Milvus Liteを使用したアプリケーションを構築するためのより包括的な例があります!
from pymilvus import MilvusClient
import numpy as np
client = MilvusClient("./milvus_demo.db")
client.create_collection(
collection_name="demo_collection",
dimension=384 # The vectors we will use in this demo has 384 dimensions
)
# Text strings to search from.
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
# For illustration, here we use fake vectors with random numbers (384 dimension).
vectors = [[ np.random.uniform(-1, 1) for _ in range(384) ] for _ in range(len(docs)) ]
data = [ {"id": i, "vector": vectors[i], "text": docs[i], "subject": "history"} for i in range(len(vectors)) ]
res = client.insert(
collection_name="demo_collection",
data=data
)
# This will exclude any text in "history" subject despite close to the query vector.
res = client.search(
collection_name="demo_collection",
data=[vectors[0]],
filter="subject == 'history'",
limit=2,
output_fields=["text", "subject"],
)
print(res)
# a query that retrieves all entities matching filter expressions.
res = client.query(
collection_name="demo_collection",
filter="subject == 'history'",
output_fields=["text", "subject"],
)
print(res)
# delete
res = client.delete(
collection_name="demo_collection",
filter="subject == 'history'",
)
print(res)
制限事項
Milvus Liteを使用する場合、いくつかの機能がサポートされていないことに注意してください。以下の表はMilvus Liteの利用制限をまとめたものです。
コレクション
メソッド / パラメータ | Milvus Liteでサポートされる機能 |
---|---|
create_collection() | 制限付きパラメータでサポート |
collection_name | Y |
dimension | Y |
primary_field_name | Y |
id_type | Y |
vector_field_name | Y |
metric_type | Y |
auto_id | Y |
schema | Y |
index_params | Y |
enable_dynamic_field | Y |
num_shards | N |
partition_key_field | N |
num_partitions | N |
consistency_level | N (Strong のみサポート。どのような設定もStrong として扱われる) |
get_collection_stats() | コレクション統計の取得をサポートする。 |
collection_name | Y |
timeout | Y |
describe_collection() | num_shards レスポンスのconsistency_level およびcollection_id は無効です。 |
timeout | Y |
has_collection() | コレクションが存在するかどうかのチェックをサポート。 |
collection_name | Y |
timeout | Y |
list_collections() | すべてのコレクションの一覧をサポートします。 |
drop_collection() | コレクションの削除をサポートします。 |
collection_name | Y |
timeout | Y |
rename_collection() | コレクション名の変更はサポートしていません。 |
フィールドとスキーマ
メソッド / パラメータ | Milvus Liteでサポートされているもの |
---|---|
create_schema() | 限られたパラメータでサポート |
auto_id | Y |
enable_dynamic_field | Y |
primary_field | Y |
partition_key_field | N |
add_field() | 限られたパラメータでのサポート |
field_name | Y |
datatype | Y |
is_primary | Y |
max_length | Y |
element_type | Y |
max_capacity | Y |
dim | Y |
is_partition_key | N |
挿入と検索
メソッド / パラメータ | milvus Liteでサポートされている |
---|---|
検索() | 限られたパラメータでサポート |
collection_name | Y |
data | Y |
filter | Y |
limit | Y |
output_fields | Y |
search_params | Y |
timeout | Y |
partition_names | N |
anns_field | Y |
クエリ() | 限られたパラメータでのサポート |
collection_name | Y |
filter | Y |
output_fields | Y |
timeout | Y |
ids | Y |
partition_names | N |
get() | 限られたパラメータでのサポート |
collection_name | Y |
ids | Y |
output_fields | Y |
timeout | Y |
partition_names | N |
削除() | パラメータを限定してサポート |
collection_name | Y |
ids | Y |
timeout | Y |
filter | Y |
partition_name | N |
インサート() | 限定されたパラメータでのサポート |
collection_name | Y |
data | Y |
timeout | Y |
partition_name | N |
upsert() | 限定されたパラメータでのサポート |
collection_name | Y |
data | Y |
timeout | Y |
partition_name | N |
ロード&リリース
方法 / パラメータ | Milvus Liteでサポートされています。 |
---|---|
ロード_コレクション() | Y |
collection_name | Y |
timeout | Y |
リリース_コレクション() | Y |
collection_name | Y |
timeout | Y |
get_load_state() | ロード状態の取得はサポートされていません。 |
refresh_load() | ロードされたコレクションのアンロードされたデータをロードすることはサポートされていません。 |
close() | Y |
インデックス
メソッド / パラメータ | Milvus Liteでサポートされている。 |
---|---|
list_indexes() | インデックスのリストがサポートされています。 |
collection_name | Y |
field_name | Y |
インデックスの作成 | FLAT インデックス型のみをサポートします。 |
index_params | Y |
timeout | Y |
drop_index() | インデックスの削除に対応。 |
collection_name | Y |
index_name | Y |
timeout | Y |
describe_index() | インデックスの記述がサポートされている |
collection_name | Y |
index_name | Y |
timeout | Y |
ベクトルインデックス型
Milvus LiteはFLATインデックスタイプのみをサポートしています。コレクションで指定されたインデックスタイプに関係なく、FLATタイプを使用します。
検索機能
Milvus Liteはスパースベクトル、マルチベクトル、ハイブリッド検索をサポートしています。
パーティション
Milvus Liteはパーティションおよびパーティション関連メソッドをサポートしていません。
ユーザとロール
Milvus Liteはユーザとロールおよび関連メソッドをサポートしていません。
エイリアス
Milvus Liteはエイリアスおよびエイリアス関連メソッドに対応しておりません。
Milvus Liteからのデータ移行について
Milvus Liteに保存されている全てのデータは、Docker上のMilvus Standalone、K8s上のMilvus Distributed、Zilliz Cloud上のフルマネージドMilvusなど、他のタイプのMilvusデプロイメントに簡単にエクスポートおよびロードすることができます。
Milvus Liteは、milvusや Zilliz Cloud(Milvusのフルマネージドクラウドサービス)にインポート可能なデータをjsonファイルにダンプするコマンドラインツールを提供します。milvus-liteコマンドはmilvus-lite pythonパッケージと一緒にインストールされます。
# Install
pip install -U "pymilvus[bulk_writer]"
milvus-lite dump -h
usage: milvus-lite dump [-h] [-d DB_FILE] [-c COLLECTION] [-p PATH]
optional arguments:
-h, --help show this help message and exit
-d DB_FILE, --db-file DB_FILE
milvus lite db file
-c COLLECTION, --collection COLLECTION
collection that need to be dumped
-p PATH, --path PATH dump file storage dir
以下の例では、./milvus_demo.db
(Milvus Liteデータベースファイル)に保存されているdemo_collection
コレクションの全データをダンプします。
データをエクスポートする:
milvus-lite dump -d ./milvus_demo.db -c demo_collection -p ./data_dir
# ./milvus_demo.db: milvus lite db file
# demo_collection: collection that need to be dumped
#./data_dir : dump file storage dir
このダンプファイルを使って、Data ImportでZilliz Cloudにデータをアップロードしたり、Bulk InsertでMilvusサーバにデータをアップロードすることができます。
次のステップ
Milvus Liteに接続すると、次のことができます:
クイックスタートでMilvusの機能を確認する。
Milvusの基本操作を学ぶ:
Milvusクラスターをクラウド上にデプロイする:
MilvusのデータバックアップのためのオープンソースツールであるMilvus Backupをご紹介します。
Milvusのデバッグとダイナミックコンフィギュレーションアップデートのためのオープンソースツール、Birdwatcherのご紹介。
Milvusを直感的に管理するオープンソースのGUIツールAttuをご覧ください。