Milvus Quickstart:五分間だけでMilvus ベクトルデータベースをインストール

ようこそ、Vector Database 101へ。 前回のチュートリアルでは、Milvusの概要と歴史、そしてMilvus 1.xとMilvus 2.xの主な違いを簡単に説明しました。また、Milvus 2.xのアーキテクチャを一通り目を通し、Milvusのアーキテクチャがどのようにベクトルデータベースの必要な機能をすべて実現しているかを解説しました。 まだ前回のチュートリアル(非構造化データ、ベクトルデータベース、Milvusの概要)を読んでいない方は、ぜひ読んでみてください。既に読んでいたなら、尚更素晴らしいです。それでは、Milvusを始めましょう。 このチュートリアルでは、異なる展開方法を学び、初めてのベクトルデータベースをインストールするために、ステップバイステップのガイドを提供します。
では、始めましょう
Milvusは、以下の2つの展開方式を提供しています:スタンドアロンとクラスター。スタンドアロンモードでは、コーディネータ、ワーカーノード、フォワードプロキシなどのすべてのノードがシングルインスタンスとして展開されます。永続的なデータとメタデータには、それぞれMinIO
とetcd
を利用します。将来のリリースでは、これら2つのサードパーティ依存関係に頼らず、単一プロセスですべて実行できるようにする予定です。
クラスター版は、完全な機能を備えたMilvusです。8つのマイクロサービスコンポーネントに隔離したインスタンス/ポッドに加えて、MinIO
、etcd
、Pulsar
(ログブローカーとして機能し、ログの公開/購読サービスを提供)という3つのサードパーティ依存関係も含まれています。まだ Milvus の概要(前回のチュートリアル)を確認していない場合は、ぜひご覧になってください。各サードパーティ依存関係の用途と、Milvus クラスタに含めた理由を理解するのに大変役立ちます。
Milvusスタンドアロンのインストール(Docker Compose)
Milvus スタンドアロンは、非常に簡単にインストールできるように設計されています。このセクションでは、docker-compose を使用して Milvus をインストールする方法を説明します。推奨される前提条件については、Milvus のドキュメントページをご覧ください。 まず、スタンドアロンインストールに必要な docker-compose.yml 配置ファイルをダウンロードしましょう。Debian ベースの Linux (Ubuntu を含む) を使用している場合は、以下のコマンドを実行してください。
wget https://github.com/milvus-io/milvus/releases/download/v2.4.12/milvus-standalone-docker-compose.yml -O docker-compose.yml
sudo docker compose up -d
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.111.133, 185.199.109.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1303 (1.3K) [application/octet-stream]
Saving to: docker-compose.yml
docker-compose.yml 100%[===================>] 1.27K --.-KB/s in 0s
2022-06-29 13:58:49 (113 MB/s) - docker-compose.yml saved [1303/1303]
MacOS を使用している場合は、最初に Docker Desktop をインストールする必要があります。以下のように brew
を使用することをお勧めします:
brew install --cask docker
その後、以下のコマンドを実行してください:
curl https://github.com/milvus-io/milvus/releases/download/v2.0.2/milvus-standalone-docker-compose.yml -o docker-compose.yml
準備が整ったら、以下のコマンドで Milvus スタンドアロンインスタンスを起動できます:
docker-compose up -d
Docker Compose は現在 Docker CLI に統合されています。次のようにdocker compose up
を試してください:
Creating milvus-etcd ... done
Creating milvus-minio ... done
Creating milvus-standalone ... done
次のコマンドで、コンテナのステータスを確認できます:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
711d54ab15c7 milvusdb/milvus:v2.0.2 "/tini -- milvus run…" 42 seconds ago Up 40 seconds 0.0.0.0:19530->19530/tcp milvus-standalone
0d85f4927864 minio/minio:RELEASE.2020-12-03T00-03-10Z "/usr/bin/docker-ent…" 42 seconds ago Up 40 seconds (healthy) 9000/tcp milvus-minio
99de39278b35 quay.io/coreos/etcd:v3.5.0 "etcd -advertise-cli…" 42 seconds ago Up 40 seconds 2379-2380/tcp milvus-etcd
以下は、各コンテナの役割の簡単な説明です。 milvus-standalone
: 単一マシン上で機能するようにコンパイル/圧縮されたバージョンのMilvusです。
Milvus スタンドアロンを停止するには、以下のコマンドを実行してください:
$ docker-compose down
これで Milvus スタンドアロンの設定は完了です。簡単でしょう?
Milvus standalone (apt)
また、Debianベースの展開に向けて、便利な apt パッケージも提供しています。以下のコマンドを実行すれば良いです:
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:milvusdb/milvus
$ sudo apt update
$ sudo apt install milvus
これで完了です。実行中のサービスの状態を確認するには、以下のコマンドを使用できます:
$ sudo systemctl status milvus
$ sudo systemctl status milvus-etcd
$ sudo systemctl status milvus-minio
Milvusクラスター
前回のチュートリアルから、Milvusは主に以下の4つのコンポーネントで構成されていることがわかりました。それはそれぞれ、アクセスレイヤー、コーディネーターサービス、ワーカーノード、オブジェクトストレージです。リクエストはアクセスレイヤー内のプロキシクラスターに送信され、そこからコーディネーターレイヤーまたはベクトルデータ用のストリーミングサービスに転送されます。コーディネーターサービス内のステートフルなコーディネーターノードは、すべてのステートレスなワーカーノードを管理・制御し、容易な水平スケーリングを実現します。オブジェクトストレージは、S3や「S3ライク」のストレージレイヤーを通じて行われ、Milvusはクラウドおよびオンプレミスの環境でMinIOを使用して動作します。 Milvusの残りのサードパーティ依存関係であるPulsar/Kafkaおよびetcdは、どちらも分散型でクラウドネイティブなツールであり、Milvus全体をオーケストレーションエンジンとしてKubernetes上で実行することが可能です。ほぼすべての分散型アプリケーションに対して、Kubernetesを使用するのは最適な選択と言えるのは、アプリケーションの展開、維持およびスケーリングを独創的なサポートを提供しているからです。Helmを通じて、MilvusをKubernetesアプリケーションとして展開することをお勧めします:
% helm repo add milvus https://milvus-io.github.io/milvus-helm/
"milvus" has been added to your repositories
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "milvus" chart repository
Update Complete. Happy Helming
これで依存関係の準備が整いましたので、Milvus(クラスター)をインストールしてみましょう。
% helm install my-release milvus/milvus
W0629 16:01:00.674407 21803 warnings.go:70 policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
W0629 16:01:00.676536 21803 warnings.go:70 policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
W0629 16:01:00.678594 21803 warnings.go:70 policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
W0629 16:01:00.680671 21803 warnings.go:70 policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
W0629 16:01:00.808448 21803 warnings.go:70 policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
W0629 16:01:00.809339 21803 warnings.go:70 policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
W0629 16:01:00.809344 21803 warnings.go:70 policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
W0629 16:01:00.809594 21803 warnings.go:70 policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
NAME: my-release
LAST DEPLOYED: Wed Jun 29 16:01:00 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
インストールが完了すると、kubectl
を使用して起動中のポッドを確認できます:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-release-etcd-0 1/1 Running 0 2m23s
my-release-etcd-1 1/1 Running 0 2m23s
my-release-etcd-2 1/1 Running 0 2m23s
my-release-milvus-datacoord-6fd4bd885c-gkzwx 1/1 Running 0 2m23s
my-release-milvus-datanode-68cb87dcbd-4khpm 1/1 Running 0 2m23s
my-release-milvus-indexcoord-5bfcf6bdd8-nmh5l 1/1 Running 0 2m23s
my-release-milvus-indexnode-5c5f7b5bd9-l8hjg 1/1 Running 0 2m24s
my-release-milvus-proxy-6bd7f5587-ds2xv 1/1 Running 0 2m24s
my-release-milvus-querycoord-579cd79455-xht5n 1/1 Running 0 2m24s
my-release-milvus-querynode-5cd8fff495-k6gtg 1/1 Running 0 2m24s
my-release-milvus-rootcoord-7fb9488465-dmbbj 1/1 Running 0 2m23s
my-release-minio-0 1/1 Running 0 2m23s
my-release-minio-1 1/1 Running 0 2m23s
my-release-minio-2 1/1 Running 0 2m23s
my-release-minio-3 1/1 Running 0 2m23s
my-release-pulsar-autorecovery-86f5dbdf77-lchpc 1/1 Running 0 2m24s
my-release-pulsar-bookkeeper-0 1/1 Running 0 2m23s
my-release-pulsar-bookkeeper-1 1/1 Running 0 98s
my-release-pulsar-broker-556ff89d4c-2m29m 1/1 Running 0 2m23s
my-release-pulsar-proxy-6fbd75db75-nhg4v 1/1 Running 0 2m23s
my-release-pulsar-zookeeper-0 1/1 Running 0 2m23s
my-release-pulsar-zookeeper-metadata-98zbr 1/1 Completed 0 2m24s
これで完了です。Milvusがオンプレミスのクラスターに直接インストールされました。次回のチュートリアルでは、Milvus内でコレクションを作成し、埋め込みデータの挿入とクエリを実行する方法について解説します。 クラウドインフラ上でMilvusを実行することに興味がある場合は、AWS MarketplaceでMilvusスタンドアロンをご覧ください。
まとめ
今回のチュートリアルでは、Milvusスタンドアロン(docker-compose
を使用)とMilvusクラスター(helm
を使用)のインストール方法を学びました。スタンドアロン版はテスト用途に適しており、クラスター版は内部クラスターやオンプレミス展開に適しています。
次回のチュートリアルでは、Milvusの基本操作を学びます。具体的には、Milvusサーバーへの接続、コレクション(関係データベースでいうと、テーブルに相当)の作成、埋め込みベクトルデータの挿入、ベクトル検索の実行方法を見ていきます。
次のチュートリアルでお会いしましょう!
読み続けて

Vector Databases vs. NewSQL Databases
Use a vector database for AI-powered similarity search; use a NewSQL database for scalable transactional workloads requiring strong consistency and relational capabilities.

Beyond the Pitch: Vector Databases and AI are Rewriting the Sales Playbook
Discover how AI and vector databases are transforming sales platforms with intelligent lead matching, automated workflows, and real-time insights. Learn why 43% of sales teams use AI in 2024.

Evaluating Retrieval-Augmented Generation (RAG): Everything You Should Know
An overview of various RAG pipeline architectures, retrieval and evaluation frameworks, and examples of biases and failures in LLMs.