Weaviate は、機械学習モデルを利用してセマンティック検索を強化するように設計された、先駆的なオープンソース ベクトル データベースです。キーワード マッチングに依存する従来の検索エンジンとは異なり、Weaviate はセマンティック類似性の原理を採用しています。この革新的なアプローチは、さまざまな形式のデータ(テキスト、画像など) をベクトル表現、つまりデータのコンテキストと意味の本質を捉えた数値形式に変換します。これらのベクトル間の類似性を分析することで、Weaviate はユーザーの意図を真に理解した検索結果を提供し、キーワードベースの検索の限界を大幅に超える成果をもたらします。
このガイドの目的は、Kubernetes ネイティブのオブジェクト ストレージと AI を活用したセマンティック検索機能を最大限に活用し、 MinIOとWeaviate をシームレスに統合することです。このガイドでは、コンテナ オーケストレーションにDocker Composeを活用し、堅牢でスケーラブルかつ効率的なデータ管理システムを構築するための戦略的なアプローチを提供します。データの保存、アクセス、管理方法に焦点を当てたこのセットアップは、最新のストレージ ソリューションと AI を活用したデータ取得の力を活用したいと考えている開発者、DevOps エンジニア、データ サイエンティストにとって画期的なものです。
このデモでは、 Docker を使用して MinIO バケットで Weaviate をバックアップすることに焦点を当てます。この設定により、AI 強化の検索および分析プロジェクトでデータの整合性とアクセス性が確保されます。
このデモンストレーションでは、Docker を使用した MinIO と Weaviate のシームレスな統合に焦点を当て、AI 強化検索および分析システムをバックアップするための信頼性の高い方法を紹介します。
ここで提供されるdocker-compose.yaml
ファイルは、Weaviate のシームレスなセットアップを確立するように作成されており、合理化され効率的なデータ管理への取り組みを強調しています。この構成により、MinIO が安全なストレージ サービスとして機能し、Weaviate がこのストレージを活用して高度なベクトル検索機能を実現する堅牢な環境が実現します。
の
version: '3.8' services: weaviate: container_name: weaviate_server image: semitechnologies/weaviate:latest ports: - "8080:8080" environment: AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true' PERSISTENCE_DATA_PATH: '/var/lib/weaviate' ENABLE_MODULES: 'backup-s3' BACKUP_S3_BUCKET: 'weaviate-backups' BACKUP_S3_ENDPOINT: 'play.min.io:443' BACKUP_S3_ACCESS_KEY_ID: 'minioadmin' BACKUP_S3_SECRET_ACCESS_KEY: 'minioadmin' BACKUP_S3_USE_SSL: 'true' CLUSTER_HOSTNAME: 'node1' volumes: - ./weaviate/data:/var/lib/weaviate
Docker-Compose: backups-s3
モジュールを有効にして Weaviate をデプロイし、 play.min.io
MinIO サーバーをデプロイする
上記の docker-compose.yaml では、Weaviate はバックアップに MinIO を利用するように複雑に設定されており、データの整合性とアクセス性が確保されています。この設定には、 ENABLE_MODULES
をbackup-s3
に設定するなどの重要な環境変数や、S3 バケット、エンドポイント、アクセス キー、SSL の使用に関するさまざまな設定が含まれます。さらに、データが永続的に保存されるようにPERSISTENCE_DATA_PATH
が設定され、ノードを識別するためにCLUSTER_NAME
設定されています。
ENABLE_MODULES
: 'backup-s3'BACKUP_S3_BUCKET
: 'weaviate-backups'BACKUP_S3_ENDPOINT
: 'play.min.io:443'BACKUP_S3_ACCESS_KEY_ID
: 'minioadmin'BACKUP_S3_SECRET_ACCESS_KEY
: 'minioadmin'BACKUP_S3_USE_SSL
: 'true'PERSISTENCE_DATA_PATH
: '/var/lib/weaviate'CLUSTER_NAME
: 'node1'
この docker-compose の Weaviate サービスは、データの永続性のためにマウントされたボリュームを利用するように設定されています。これにより、セッションや操作をまたいでデータが永続化されます。
注意: MinIO バケットは事前に存在している必要があります。Weaviate はバケットを作成しません。
Docker Compose を使用して MinIO と Weaviate をプロジェクトに統合するには、次の詳細な手順に従います。
Docker Compose ファイルの保存または更新
docker-compose.yaml ファイルを配置したら、ターミナルまたはコマンド プロンプトで次のコマンドを使用してデプロイを開始します。
docker-compose up -d --build
このコマンドは、Weaviate サービスを分離モードで開始し、システムのバックグラウンドで実行します。
ビルドおよび実行プロセス中に、Docker Compose は docker-compose.yaml ファイルで指定された永続ディレクトリを作成します。このディレクトリ( Weaviate の場合は./weaviate/data
) はデータを永続的に保存するために使用され、コンテナの再起動やデプロイメントをまたいでデータがそのまま維持されることを保証します。
永続ストレージにより、コンテナを再起動してもデータが失われない、より安定した環境が実現します。
docker-compose をデプロイしたら、ブラウザで Weaviate サーバーの URL にアクセスし、その後に/v1/meta
にアクセスして、デプロイ構成が正しいかどうかを確認できます。
http://localhost:8080/v1/meta
の JSON ペイロードの最初の行は次のようになります。
{"hostname":"http://[::]:8080","modules":{"backup-s3":{"bucketName":"weaviate-backups","endpoint":"play.min.io:443","useSSL":true}...[truncated]...}
weaviate-backups
バケットのアクセス ポリシーWeaviate を MinIO と統合するには、MinIO のバックアップ バケットで、指定されたバックアップ バケット (つまりweaviate-backups
) のアクセス ポリシーをPublic に適切に設定する必要があります。この調整は、Weaviate の backup-s3 モジュールに、バックアップ操作のために MinIO バケットと正常にやり取りするために必要な権限を付与するために必要です。
注:実稼働環境では、おそらくこれをロックダウンする必要がありますが、これはこのチュートリアルの範囲外です。
この構成に取り組む際には、バケットを「パブリック」に設定することによるセキュリティ上の影響を明確に理解しておくことが重要です。この設定により開発環境でのバックアップ プロセスが容易になりますが、実稼働システムでデータのセキュリティと整合性を維持するには、別のアプローチを検討する必要があります。IAM ポリシーや「事前署名」URL などのきめ細かなアクセス制御を採用します。
このデモの最後にはbackup-s3
モジュールを使用する際に Weaviate がプロセス全体で作成するバケット オブジェクトを確認できるようになります。
Weaviate で S3 バックアップを有効にするには、docker-compose.yaml ファイルで必要な環境変数を設定します。これにより、Weaviate はバックアップ モジュールと MinIO バケットの詳細の設定を含め、バックアップ先として MinIO を使用するように指示されます。
技術的な操作に入る前に、パイプラインをノートブックにカプセル化するという追加の利点のために、JupyterLab 環境で次の手順を実演していることを述べておきます。ノートブックはこちらから入手できます。
最初のステップでは、 pip
を使用して Python 用のweaviate-client
ライブラリをインストールして環境を設定します。この Python パッケージは、より Python 的な方法で Weaviate の RESTful API とインターフェイスするために不可欠であり、スキーマの作成、データのインデックス作成、バックアップ、復元などの操作のためにデータベースとシームレスにやり取りできます。デモでは、Weaviate Python クライアント ライブラリの使用方法を説明します。
このデモでは Weaviate V3 API を使用しているため、Python スクリプトを実行すると以下のようなメッセージが表示される場合があります。
`DeprecationWarning: Dep016: You are using the Weaviate v3 client, which is deprecated. Consider upgrading to the new and improved v4 client instead! See here for usage: https://weaviate.io/developers/weaviate/client-libraries/python warnings.warn(`
このメッセージは警告バナーなので無視しても構いません。詳細については、こちらをご覧ください。
!pip install weaviate-client
このセクションでは、「Article」クラスと「Author」クラスのデータ構造とスキーマを紹介し、データの編成方法の基礎を築きます。Weaviate 内でスキーマをプログラムで定義および管理する方法を示し、特定のアプリケーション ニーズに合わせて調整されたさまざまなデータ モデルに適応する Weaviate の柔軟性とパワーを紹介します。
import weaviate client = weaviate.Client("http://localhost:8080") # Schema classes to be created schema = { "classes": [ { "class": "Article", "description": "A class to store articles", "properties": [ {"name": "title", "dataType": ["string"], "description": "The title of the article"}, {"name": "content", "dataType": ["text"], "description": "The content of the article"}, {"name": "datePublished", "dataType": ["date"], "description": "The date the article was published"}, {"name": "url", "dataType": ["string"], "description": "The URL of the article"}, {"name": "customEmbeddings", "dataType": ["number[]"], "description": "Custom vector embeddings of the article"} ] }, { "class": "Author", "description": "A class to store authors", "properties": [ {"name": "name", "dataType": ["string"], "description": "The name of the author"}, {"name": "articles", "dataType": ["Article"], "description": "The articles written by the author"} ] } ] } client.schema.delete_class('Article') client.schema.delete_class('Author') client.schema.create(schema)
Python: スキーマクラスを作成する
スキーマを定義した後、ノートブックは Weaviate クライアントの初期化、Weaviate インスタンスでのスキーマの作成、データのインデックス作成をガイドします。このプロセスにより、データベースに初期データ セットが入力され、Weaviate のベクトル検索機能の探索が可能になります。これは、Weaviate を利用してベクトル化された形式でデータを保存およびクエリするために必要な実用的な手順を示しています。
# JSON data to be Ingested data = [ { "class": "Article", "properties": { "title": "LangChain: OpenAI + S3 Loader", "content": "This article discusses the integration of LangChain with OpenAI and S3 Loader...", "url": "https://blog.min.io/langchain-openai-s3-loader/", "customEmbeddings": [0.4, 0.3, 0.2, 0.1] } }, { "class": "Article", "properties": { "title": "MinIO Webhook Event Notifications", "content": "Exploring the webhook event notification system in MinIO...", "url": "https://blog.min.io/minio-webhook-event-notifications/", "customEmbeddings": [0.1, 0.2, 0.3, 0.4] } }, { "class": "Article", "properties": { "title": "MinIO Postgres Event Notifications", "content": "An in-depth look at Postgres event notifications in MinIO...", "url": "https://blog.min.io/minio-postgres-event-notifications/", "customEmbeddings": [0.3, 0.4, 0.1, 0.2] } }, { "class": "Article", "properties": { "title": "From Docker to Localhost", "content": "A guide on transitioning from Docker to localhost environments...", "url": "https://blog.min.io/from-docker-to-localhost/", "customEmbeddings": [0.4, 0.1, 0.2, 0.3] } } ] for item in data: client.data_object.create( data_object=item["properties"], class_name=item["class"] )
Python: クラス別にデータをインデックスする
データのインデックス作成が完了すると、焦点はバックアップを通じてデータベースの状態を保存することに移ります。ノートブックのこの部分では、MinIO へのバックアップ操作をトリガーする方法を示します。
result = client.backup.create( backup_id="backup-id", backend="s3", include_classes=["Article", "Author"], # specify classes to include or omit this for all classes wait_for_completion=True, ) print(result)
Python: バックアップを作成する
期待する:
{'backend': 's3', 'classes': ['Article', 'Author'], 'id': 'backup-id-2', 'path': 's3://weaviate-backups/backup-id-2', 'status': 'SUCCESS'}
バックアップ応答成功
復元を進める前に、既存のスキーマをクリアする必要がある場合があります。このセクションでは、クリーンな復元プロセスの手順を示します。これにより、復元されたデータがデータベース内の既存のスキーマやデータと競合することがなくなります。
client.schema.delete_class("Article") client.schema.delete_class("Author")
このセクションでは、以前にバックアップしたデータを復元して、データベースを既知の良好な状態に戻す方法について説明します。
result = client.backup.restore( backup_id="backup-id", backend="s3", wait_for_completion=True, ) print(result)
Python: バックアップを復元する
期待する:
{'backend': 's3', 'classes': ['Article', 'Author'], 'id': 'backup-id', 'path': 's3://weaviate-backups/backup-id', 'status': 'SUCCESS'}
バックアップ S3 応答が成功しました
ノートブックのこの部分では、バックアップ復元プロセス中にエラー処理を実装する例を示します。データ復元操作中に発生する予期しない問題に関する洞察を提供します。
from weaviate.exceptions import BackupFailedError try: result = client.backup.restore( backup_id="backup-id", backend="s3", wait_for_completion=True, ) print("Backup restored successfully:", result) except BackupFailedError as e: print("Backup restore failed with error:", e) # Here you can add logic to handle the failure, such as retrying the operation or logging the error.
期待する:
Backup restored successfully: {'backend': 's3', 'classes': ['Author', 'Article'], 'id': 'backup-id', 'path': 's3://weaviate-backups/backup-id', 'status': 'SUCCESS'}
バックアップの復元に成功
最後に、バックアップと復元のプロセスが正常に完了したことを確認するために、ノートブックには「Article」クラスのスキーマを取得する手順が含まれています。この検証により、データとスキーマが正しく復元されていることが保証されます。
client.schema.get("Article")
ArticleクラスをJSONオブジェクトとして返します
期待する:
{'class': 'Article', 'description': 'A class to store articles'... [Truncated]...}
ノートブックの各セクションでは、初期設定とデータ入力からバックアップ、復元、検証まで、Weaviate でのデータ管理のライフサイクル全体にわたる包括的なガイドを提供します。これらはすべて、Weaviate クライアント ライブラリを使用して Python エコシステム内で実行されます。
これまで、Python の方法でこれを行う方法を説明してきました。スクリプトを記述せずに、 CURL
を介して内部的に同じ操作を実現する方法を示すと役立つと考えました。
スキーマの作成、データのインデックス作成、バックアップの実行、データの復元などのタスクのために Weaviate インスタンスと対話するには、特定の curl コマンドを使用できます。これらのコマンドは、Weaviate の REST API に HTTP リクエストを送信します。たとえば、スキーマを作成するには、スキーマの詳細を含む POST リクエストが Weaviate のスキーマ エンドポイントに送信されます。同様に、データのインデックス作成には、データ ペイロードを含む POST リクエストがオブジェクト エンドポイントに送信されます。
バックアップは、バックアップ エンドポイントへの POST リクエストによってトリガーされ、復元は復元エンドポイントへの POST リクエストによって実行されます。これらの各操作には適切な JSON ペイロードが必要です。これは通常、curl コマンドで@
記号を使用してファイル参照として提供されます。
Weaviateを実装するには、もちろんサンプルデータが必要になります。
以下を含めました:
schema.json
インデックスを作成するデータの構造の概要を示します。
data.json
は実際のデータが使用される場所であり、その構造は schema.json ファイル内のクラスと一致します。
schema.jsonファイルとdata.jsonファイルは、MinIOのブログアセットリポジトリにあります。
{ "classes": [ { "class": "Article", "description": "A class to store articles", "properties": [ {"name": "title", "dataType": ["string"], "description": "The title of the article"}, {"name": "content", "dataType": ["text"], "description": "The content of the article"}, {"name": "datePublished", "dataType": ["date"], "description": "The date the article was published"}, {"name": "url", "dataType": ["string"], "description": "The URL of the article"}, {"name": "customEmbeddings", "dataType": ["number[]"], "description": "Custom vector embeddings of the article"} ] }, { "class": "Author", "description": "A class to store authors", "properties": [ {"name": "name", "dataType": ["string"], "description": "The name of the author"}, {"name": "articles", "dataType": ["Article"], "description": "The articles written by the author"} ] } ] }
記事と著者のスキーマクラスの例
の
一方、
[ { "class": "Article", "properties": { "title": "LangChain: OpenAI + S3 Loader", "content": "This article discusses the integration of LangChain with OpenAI and S3 Loader...", "url": "https://blog.min.io/langchain-openai-s3-loader/", "customEmbeddings": [0.4, 0.3, 0.2, 0.1] } }, { "class": "Article", "properties": { "title": "MinIO Webhook Event Notifications", "content": "Exploring the webhook event notification system in MinIO...", "url": "https://blog.min.io/minio-webhook-event-notifications/", "customEmbeddings": [0.1, 0.2, 0.3, 0.4] } }, { "class": "Article", "properties": { "title": "MinIO Postgres Event Notifications", "content": "An in-depth look at Postgres event notifications in MinIO...", "url": "https://blog.min.io/minio-postgres-event-notifications/", "customEmbeddings": [0.3, 0.4, 0.1, 0.2] } }, { "class": "Article", "properties": { "title": "From Docker to Localhost", "content": "A guide on transitioning from Docker to localhost environments...", "url": "https://blog.min.io/from-docker-to-localhost/", "customEmbeddings": [0.4, 0.1, 0.2, 0.3] } } ]
記事を含むサンプルデータ
スキーマはデータ管理システムの構造的なバックボーンとして機能し、データの整理、インデックス作成、クエリの実行方法を定義します。
簡単な curl コマンドと、現在の作業ディレクトリにローカルにクローンされたサンプル ファイルを使用して、schema.json を Weaviate に直接投稿し、データが準拠するルールと関係を定義できます。
curl -X POST -H "Content-Type: application/json" \ --data @schema.json http://localhost:8080/v1/schema
CURL: 作成
スキーマが準備できたら、次のステップでは実際のデータを入力します。別の curl コマンドを使用して、data.json をスキーマにインデックスします。
curl -X POST -H "Content-Type: application/json" \ --data @data.json http://localhost:8080/v1/objects
CURL: インデックス
一意の識別子、つまり「バックアップ ID」を割り当てる必要があります。この識別子は、バックアップ セットの正確な追跡と取得を容易にするだけでなく、各データセットがバージョン管理されていることも保証します。
curl -X POST 'http://localhost:8080/v1/backups/s3' -H 'Content-Type:application/json' -d '{ "id": "backup-id", "include": [ "Article", "Author" ] }'
CURL: バックアップ-s3
期待する:
{'backend': 's3', 'classes': ['Article', 'Author'], 'id': 'backup-id', 'path': 's3://weaviate-backups/backup-id', 'status': 'SUCCESS'}
バックアップ S3 応答が成功しました
この出力は JSON オブジェクトとしてフォーマットされます。これには、使用されたバックエンド (この場合は's3'
)、バックアップに含まれていたクラスのリスト ( 'Article'
、 'Author'
)、バックアップに与えられた一意の識別子 id ( 'backup-id'
)、S3 バケット内でバックアップが保存されている場所を示すパス ( s3://weaviate-backups/backup-id
)、および操作のステータス ( 'SUCCESS'
) が含まれます。
この構造化された応答は、バックアップ プロセスが正常に完了したことを確認するだけでなく、将来の参照、監査、または復元プロセスに使用できる重要な情報も提供します。
Weaviate エコシステム内のデータの復元は、backup-id で識別される /v1/backups/s3/backup-id/restore エンドポイントをターゲットとする POST リクエストを介した構造化 API 呼び出しによって容易になります。この curl 呼び出しは、失われたデータやアーカイブされたデータを復元するだけでなく、継続性を維持できるようにします。
curl -X POST 'http://localhost:8080/v1/backups/s3/backup-id/restore' \ -H 'Content-Type:application/json' \ -d '{ "id": "backup-id", "exclude": ["Author"] }'
CURL: 復元
期待する:
{ "backend": "s3", "classes": ["Article"], "id": "backup-id", "path": "s3://weaviate-backups/backup-id", "status": "SUCCESS" }
復旧対応の成功
これらの各コマンドは、特定の設定と要件に基づいて調整する必要があります。必要に応じて、エンドポイント URL、データ ファイル パス、およびその他のパラメータを変更する必要がある場合があります。また、必要なファイル (schema.json、data.json) と構成が環境で使用可能であることを確認してください。
すべてを Git でコード化することで、チームは変更を簡単に追跡し、以前の状態にロールバックし、環境間で一貫性を確保できます。GitOps ワークフローは継続的インテグレーション/継続的デプロイメント (CI/CD) ツールや Kubernetes と統合できるため、コンテナ化されたアプリケーションのオーケストレーションとインフラストラクチャ管理がさらに簡素化されます。GitOps を使用して自動化する方法については、今後の投稿で詳しく説明します。
Weaviate を使用すると、特定のクラスをバックアップまたは復元できるため、部分的なデータ移行や開発テストなどの場合に便利です。
マルチノード バックアップ:マルチノード セットアップの場合 (特に Kubernetes 環境の場合)、構成でバックアップ モジュール (MinIO の場合は backup-s3 など) と関連する環境変数が正しく指定されていることを確認します。
バックアップまたは復元中に問題が発生した場合は、環境変数の設定、特に MinIO などの S3 互換ストレージの SSL 設定を確認してください。SSL を無効にすると ( BACKUP_S3_USE_SSL: false
)、特定の接続の問題が解決される可能性があります。
Docker Compose を使用して Weaviate と MinIO を統合するこの調査を終えるにあたり、この組み合わせが単なる技術的なソリューションではなく、データ管理の戦略的な強化であることは明らかです。この統合は、スケーラブルで安全かつ高性能なデータ ストレージ ソリューションを提供するという MinIO の取り組みと完全に一致しており、Weaviate の AI 駆動機能によってさらに強化されています。Docker Compose の使用により、この統合がさらに効率化され、複雑なテクノロジーをアクセスしやすく管理しやすくすることへの当社の重点が強調されます。
MinIO チームは、これまで通り、データ管理の分野でイノベーションを推進することに全力を尽くしています。データの保存、アクセス、分析の方法を強化し、合理化することに注力することが、私たちの使命の中核です。
Weaviate の高度なベクター データベース機能と MinIO が提供する堅牢なストレージ ソリューションを組み合わせることで、ユーザーはデータの潜在能力を最大限に引き出すことができます。これには、データのアクセシビリティだけでなく、基礎レベルでのセキュリティも確保するセマンティック検索機能の活用も含まれます。
私たちは、あなたのような熱心で情熱的な開発者の頭脳から生まれる驚くべきイノベーションに心から刺激を受けています。データ駆動型プロジェクトで高度なソリューションを探求し、新たな高みに到達するまでの道のりに、私たちがサポートを提供し、その一翼を担えることを嬉しく思います。どうぞお気軽にお問い合わせください。