ベクターデータベースは、開発者コミュニティが大規模言語モデル(LLM)をどのように強化できるかを認識して以来、多くの注目を集めています。 Weaviate は、ベクター検索、ハイブリッド検索、生成検索などの最新の検索機能を可能にするオープンソースのベクターデータベースです。 Weaviate を使用すると、高度な LLM アプリケーション、次のレベルの検索システム、レコメンデーションシステムなどを構築できます。
この記事では、ベクターデータベースとは何かを説明し、Weaviate ベクターデータベース の主な機能に焦点を当てます。 Docker Compose を使用して Weaviate を Docker にインストールし、Dockerized 環境内でセマンティック検索を利用できるようにする方法について説明します。
ウィーヴィエイトベクトルデータベースの紹介
ベクターデータベースのコア機能は、データオブジェクトの ベクター 埋め込みを格納することです。 この機能は、従来のリレーショナルデータベースでは管理や処理が困難な非構造化データ(テキストや画像など)の量が増えている場合に特に役立ちます。 ベクトル埋め込みは、データオブジェクトの数値表現であり、通常は機械学習(ML)モデルによって生成され、セマンティック類似性に基づいてデータの検索と取得を可能にします(ベクトル検索)。
ベクターデータベースは、ベクター埋め込みを格納するだけではありません:ご想像のとおり、類似性に基づいてデータを取得するには、オブジェクト間で多くの比較が必要になるため、長い時間がかかる場合があります。 ベクトル埋め込みを格納できる他のタイプのデータベースとは対照的に、ベクトルデータベースはデータを高速に取得できます。 低レイテンシの検索クエリを有効にするために、ベクターデータベースは 特定のアルゴリズムを使用してデータのインデックスを作成します。
さらに、Weaviateなどの一部のベクターデータベースには、ベクター埋め込みと元のデータオブジェクトが格納されているため、従来の検索 と 最新のベクター検索を組み合わせて、より正確な検索結果を得ることができます。
これらの機能により、ベクターデータベースは通常、検索または同様のタスク(レコメンダーシステムなど)で使用されます。 しかし、LLM空間の最近の進歩により、ベクトルデータベースは、会話型LLMに長期記憶とドメイン固有のコンテキストを提供するのにも効果的であることが証明されています。 これは、個人データまたは特定の専門分野でLLM機能を活用できることを意味します。
Weaviateベクターデータベースの主なハイライトは次のとおりです。
- オープンソース: Weaviateはオープンソースであり、誰でも好きな場所で使用することができます。 また、SaaSおよびハイブリッドSaaSオプションを備えた マネージドサービス としても利用できます。
- 水平方向のスケーラビリティ: 最大インジェスト、可能な限り最大のデータセット サイズ、1 秒あたりの最大クエリなど、正確なニーズに合わせて数十億のデータ オブジェクトにシームレスにスケーリングできます。
- 超高速ベクトル検索: フィルターを使用しても、生のベクトルまたはデータオブジェクトに対して超高速の純粋なベクトル類似性検索を実行できます。 Weaviateは通常、100ミリ秒未満で数百万のオブジェクトの最近傍検索を実行します( ベンチマークを参照)。
- キーワードとベクトルを組み合わせた検索(ハイブリッド検索): データ オブジェクトとベクター埋め込みの両方を格納できます。 このアプローチにより、キーワードベースの検索とベクトル検索を組み合わせて、最先端の検索結果を得ることができます。
- クラウドネイティブ環境向けに最適化: Weaviate はクラウドネイティブ データベースのフォールト トレランスを備えており、コア Docker イメージは 18 MB と比較的小さいです。
- シームレスな統合のためのモジュラーエコシステム :Weaviateスタンドアロン(別名「独自のベクトルを持ち込む」)、またはOpenAI、Cohere、 Hugging Face などと直接統合するさまざまなオプション モジュール を使用して、最先端のMLモデルを簡単に使用できます。これらのモジュールは、あらゆるメディアタイプ(テキスト、画像など)を自動的にベクトル化するベクタライザーとして、またはWeaviateのコア機能(質問応答、生成検索など)を拡張する生成モジュールとして使用できます。
前提 条件
と docker-compose
CLI ツールの両方docker
がインストールされていることを確認します。次のセクションでは、Docker 17.09.0 以降と Docker Compose V2 がインストールされていることを前提としています。 システムに V2 ではなく Docker Compose V1 がインストールされている場合は、 docker-compose
の代わりに docker compose
を使用します。 Docker 作成のバージョンは、次の方法で確認できます。
$ docker compose version
Docker 作成ファイルを Weaviate 用に構成する方法
Docker Compose で Weaviate を起動するには、 Docker Compose 構成ファイル (通常は docker-compose.yml
と呼ばれます) が必要です。 通常、Docker Compose ファイル全体を配布するため、個々のイメージを取得する必要はありません。
Weaviate の Docker Compose ファイルは、次の 2 つの方法で取得できます。
- Docker Compose configuratoウィーヴィエイトのウェブサイト上のr(推奨): コンフィギュレーターを使用すると
docker-compose.yml
、目的に合わせてファイルをカスタマイズし(すべてのモジュールコンテナを含む)、直接ダウンロードできます。 - 手動: または、コンフィギュレーターを使用しない場合は、ドキュメントから サンプルファイルの 1つをコピーして貼り付け、手動で変更します。
この記事では、 Weaviate Docker Compose コンフィギュレーターを使用して Docker Compose ファイルを構成する手順について説明します。
ステップ1:バージョン
まず、使用する Weaviate のバージョンを定義します (図 1)。 常に最新バージョンを使用することをお勧めします。
以下は、Weaviate の Docker 作成セットアップの最小限の例を示しています。
version: '3.4'
services:
weaviate:
image: semitechnologies/weaviate:1.20.5
ports:
- 8080:8080
restart: on-failure:0
environment:
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
DEFAULT_VECTORIZER_MODULE: 'none'
CLUSTER_HOSTNAME: 'node1'
ステップ 2: 永続ボリューム
Docker 作成ファイルの 永続ボリューム を構成します (図 2)。
コンテナーを再起動するときにデータが失われるのを防ぎ、読み取りと書き込みの速度を向上させるために永続ボリュームを設定することをお勧めします。
永続ボリュームは、次の 2 つの方法で設定できます。
- 名前付きボリュームの場合: Docker は名前付きボリューム
weaviate_data
を作成し、Docker Compose で Weaviate を起動した後、PERSISTENCE_DATA_PATH
コンテナ内にマウントします。
services:
weaviate:
volumes:
- weaviate_data:/var/lib/weaviate
# etc.
volumes:
weaviate_data:
- ホスト・バインディングの場合:Docker は、Docker Compose で Weaviate を起動した後、
PERSISTENCE_DATA_PATH
ホスト上のコンテナ内にマウント./weaviate_data
されます。
services:
weaviate:
volumes:
- ./weaviate_data:/var/lib/weaviate
# etc.
ステップ3:モジュール
Weaviate は、OpenAI 、 Cohere、Hugging Face などの推論サービスと直接統合するさまざまな モジュール で使用できます。これらのモジュールは、インポート時および検索時に任意のメディアタイプを自動的にベクトル化したり、生成モジュールでWeaviateのコア機能を拡張したりするために使用できます。
モジュールなしでWeaviateを使用することもできます(スタンドアロン)。 この場合、インポート時または検索時にモデル推論は実行されないため、両方のシナリオで独自のベクトルを指定する必要があります。 モジュールが必要ない場合は、「ステップ 4: ランタイム」に進んでください。
Docker 作成ファイルのモジュールを構成します (図 3)。
現在、Weaviateは3つのカテゴリのモジュールを統合しています。
- レトリーバーおよびベクタライザーモジュールは 、インポート時および検索時に任意のメディアタイプ(テキスト、画像など)を自動的にベクトル化します。 検索結果を再ランク付けするために利用できる再ランカーモジュールもあります。
- リーダーモジュールとジェネレーターモジュールは 、生成検索、質問応答、固有表現認識(NER)、要約のためのデータを取得した後、Weaviateのコア機能を拡張するために使用できます。
- 他のモジュールは 、スペルチェックやカスタムモジュールの使用を有効にするために使用できます。
多くのモジュール(トランスフォーマーモデルなど)は、GPU上で実行するように構築されたニューラルネットワークであることに注意してください。 CPU で実行することもできますが、使用可能な場合は GPU `ENABLE_CUDA=1`
を有効にすると、推論が高速になります。
以下は、 センテンストランスフォーマーモデルを使用した Weaviate の Docker 作成セットアップの例を示しています。
version: '3.4'
services:
weaviate:
image: semitechnologies/weaviate:1.20.5
restart: on-failure:0
ports:
- "8080:8080"
environment:
QUERY_DEFAULTS_LIMIT: 20
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: "./data"
DEFAULT_VECTORIZER_MODULE: text2vec-transformers
ENABLE_MODULES: text2vec-transformers
TRANSFORMERS_INFERENCE_API: http://t2v-transformers:8080
CLUSTER_HOSTNAME: 'node1'
t2v-transformers:
image: semitechnologies/transformers-inference:sentence-transformers-multi-qa-MiniLM-L6-cos-v1
environment:
ステップ4:ランタイム
コンフィギュレーターの最後の手順で、ランタイムの [Docker Compose ] を選択します (図 4)。
ステップ5:ダウンロードとさらなるカスタマイズ
構成が完了すると、次のようなスニペット docker-compose.yml
が表示され、選択した構成に合わせて調整されたファイルをダウンロードできます。
$ curl -o docker-compose.yml "https://configuration.weaviate.io/v2/docker-compose/docker-compose.yml?<YOUR-CONFIGURATION>"
コンフィギュレーターから Docker Compose ファイルをダウンロードしたら、Docker で Weaviate を直接起動したり、さらにカスタマイズしたりできます。
追加の環境変数を設定して、Weaviateのセットアップをさらにカスタマイズできます(認証と承認を定義するなど)。さらに、Weaviate を使用してマルチノードセットアップを作成するには、クラスター内の創設メンバーと他のメンバーを定義します。
創立メンバー: 1 つのノードを「創設」メンバーとして設定するには、次のように構成 CLUSTER_GOSSIP_BIND_PORT
します CLUSTER_DATA_BIND_PORT
。
weaviate-node-1: # Founding member service name
... # truncated for brevity
environment:
CLUSTER_HOSTNAME: 'node1'
CLUSTER_GOSSIP_BIND_PORT: '7100'
CLUSTER_DATA_BIND_PORT: '7101'
クラスター内の他のメンバー:以降のノードごとに、変数を使用してCLUSTER_JOIN
、創設メンバーのクラスターに参加するように構成しCLUSTER_DATA_BIND_PORT
、CLUSTER_GOSSIP_BIND_PORT
構成します。
weaviate-node-2:
... # truncated for brevity
environment:
CLUSTER_HOSTNAME: 'node2'
CLUSTER_GOSSIP_BIND_PORT: '7102'
CLUSTER_DATA_BIND_PORT: '7103'
CLUSTER_JOIN: 'weaviate-node-1:7100' # This must be the service name of the "founding" member node.
オプションで、を使用して各ノードの CLUSTER_HOSTNAME
ホスト名を設定できます。
を CLUSTER_DATA_BIND_PORT
1 より CLUSTER_GOSSIP_BIND_PORT
高く設定するのは Weaviate の慣例であることに注意してください。
DockerでWeaviateを実行する方法
必要に応じて Docker Compose ファイルを構成したら、Docker 環境で Weaviate を実行できます。
ウィーアビエイトを開始
Docker で Weaviate を起動する前に、Docker Compose ファイルの名前が正確 docker-compose.yml
であること、および Docker Compose ファイルと同じフォルダーにいることを確認してください。
次に、次のコマンドを実行して、セットアップ全体を起動できます。
$ docker compose up -d
このオプションは、 -d
コンテナーをデタッチ モードで実行します。 これは、ターミナルがすべてのコンテナのログ出力にアタッチされないことを意味します。
特定のコンテナ(Weaviateなど)のログにアタッチする場合は、次のコマンドを実行します。
$ docker compose up -d && docker compose logs -f weaviate
万丈!Weaviate は現在稼働しており、使用する準備が整いました。
ストップウィービエイト
データの損失を回避するには、次のコマンドで Weaviate をシャットダウンします。
$ docker compose down
これにより、すべてのファイルがメモリからディスクに書き込まれます。
結論
この記事では、ベクトルデータベースと、それらがLLMアプリケーションを強化する方法を紹介しました。 具体的には、オープンソースのベクターデータベース Weaviateに焦点を当て、その利点には、大規模な高速ベクター検索、ハイブリッド検索、OpenAI、Cohere、Hugging Faceなどの最先端のMLモデルへの統合モジュールが含まれます。
また、Docker Compose を使用して Weaviate を Docker にインストールする方法についてのステップバイステップガイドも提供し、 Weaviate Docker Compose コンフィギュレーター からファイルを取得 docker-compose.yml
できるため、特定のニーズに合わせて Docker Compose ファイルをカスタマイズできることに留意しました。
AI / MLページ にアクセスし、 記事コレクション を読んで、開発者がDockerを使用してAI/MLアプリケーションの開発を加速する方法について詳しく学んでください。
さらに詳しく
- Docker デスクトップの最新リリースを入手します。
- 次のものに投票してください! 公開ロードマップをご覧ください。
- 質問がありますか? Docker コミュニティがお手伝いします。
- ドッカーは初めてですか? 始めましょう。