DockerでWeaviateベクトルデータベースを使い始める方法

ベクターデータベースは、開発者コミュニティが大規模言語モデル(LLM)をどのように強化できるかを認識して以来、多くの注目を集めています。 Weaviate は、ベクター検索、ハイブリッド検索、生成検索などの最新の検索機能を可能にするオープンソースのベクターデータベースです。 Weaviate を使用すると、高度な LLM アプリケーション、次のレベルの検索システム、レコメンデーションシステムなどを構築できます。

この記事では、ベクターデータベースとは何かを説明し、Weaviate ベクターデータベース の主な機能に焦点を当てます。 Docker Compose を使用して Weaviate を Docker にインストールし、Dockerized 環境内でセマンティック検索を利用できるようにする方法について説明します。

バナー:Dockerでウィービエイトベクターデータベースを設定する方法

ウィーヴィエイトベクトルデータベースの紹介

ベクターデータベースのコア機能は、データオブジェクトの ベクター 埋め込みを格納することです。 この機能は、従来のリレーショナルデータベースでは管理や処理が困難な非構造化データ(テキストや画像など)の量が増えている場合に特に役立ちます。 ベクトル埋め込みは、データオブジェクトの数値表現であり、通常は機械学習(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)。 常に最新バージョンを使用することをお勧めします。

最新のウィーアヴィエイトバージョンの使用を推奨するダイアログボックス。 テキストには次のように書かれています:互換性のために古いバージョンを選択することもできますが、すべての機能が利用できるとは限りません。 arm64 ハードウェアで実行している場合は、v1 を選択してください。4. 0 以降。 "
図 1: Weaviate Docker Compose コンフィギュレーターを使用する場合の最初のステップで、最新バージョンの使用を提案します。

以下は、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 Compose コンフィギュレーターの "永続ボリューム" 構成オプションを織ります。

コンテナーを再起動するときにデータが失われるのを防ぎ、読み取りと書き込みの速度を向上させるために永続ボリュームを設定することをお勧めします。

永続ボリュームは、次の 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: Weaviate Docker Compose コンフィギュレーターの手順で、モジュールを使用するかどうか、またはスタンドアロンで実行する必要があるかどうかを定義します。

現在、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)。

目的のランタイムを選択するためのダイアログ ボックス ("この構成ジェネレーターを使用して、docker-compose や kubernetes (helm) などのさまざまなランタイムのテンプレートを生成できます。 "
図 4: ランタイムとして "Docker Compose" を選択できる Weaviate Docker Compose コンフィギュレーターの最後のステップ。

ステップ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_PORTCLUSTER_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アプリケーションの開発を加速する方法について詳しく学んでください。

さらに詳しく