目次
導入
概要
目次
何が問題ですか?
問題に対する私たちの解決策
埋め込みのユースケースの例
ステップ1:アダプターを作成します
ステップ2:埋め込みモデルを作成します
ステップ3:ディレクトリを埋め込みます
ステップ5:ベクトルデータベースをクエリします
出力
結論
よくある質問
ホームページ テクノロジー周辺機器 AI ベクトルストリーミング:錆を使用したメモリ効率の高いインデックス

ベクトルストリーミング:錆を使用したメモリ効率の高いインデックス

Apr 12, 2025 am 10:42 AM

導入

埋め込みのベクトルストリーミングが導入されています。これは、大規模なドキュメントの埋め込みを最適化するように設計されています。 Rustの並行性を使用して非同期チャンクと埋め込みを有効にすると、メモリの使用量が減少し、プロセスが高速化されます。今日は、シームレスな画像の埋め込みと検索のために、Weaviate Vectorデータベースと統合する方法を示します。

私の前の記事「Embeddings PipelineをEmbedanythingでSuperChargeで、Embedanythingの背後にあるアイデアと、複数のモダリティからの埋め込みの作成が簡単になる方法について説明しました。この記事では、ベクトルストリーミングと呼ばれる埋め込みの新しい機能を紹介し、Weaviate Vectorデータベースでどのように機能するかを確認したいと思います。

ベクトルストリーミング:錆を使用したメモリ効率の高いインデックス

概要

  • 埋め込みのベクトルストリーミングは、Rustの並行性と非同期チャンキングを使用して、大規模なドキュメントの埋め込みを最適化します。
  • チャンクを並行して処理することにより、従来の埋め込み方法のメモリと効率の問題を解決します。
  • Weaviateとの統合により、ベクトルデータベースにシームレスな埋め込みと検索が可能になります。
  • ベクトルストリーミングの実装には、データベースアダプターの作成、埋め込みモデルの開始、データの埋め込みが含まれます。
  • このアプローチは、大規模なドキュメント埋め込みのために、より効率的でスケーラブルで柔軟なソリューションを提供します。

目次

  • 何が問題ですか?
  • 問題に対する私たちの解決策
  • 埋め込みのユースケースの例
    • ステップ1:アダプターを作成します
    • ステップ2:埋め込みモデルを作成します
    • ステップ3:ディレクトリを埋め込みます
    • ステップ4:ベクトルデータベースをクエリします
    • ステップ5:ベクトルデータベースをクエリします
    • 出力
  • よくある質問

何が問題ですか?

まず、特に大規模な文書で、埋め込みの作成に関する現在の問題を調べます。現在の埋め込みフレームワークは、チャンクと埋め込みの2段階のプロセスで動作します。まず、テキストはすべてのファイルから抽出され、チャンク/ノードが作成されます。次に、これらのチャンクは、埋め込みを処理するために特定のバッチサイズの埋め込みモデルに供給されます。これが行われている間、チャンクと埋め込みはシステムメモリにとどまります。

これは、ファイルと埋め込み寸法が小さい場合は問題ではありません。しかし、これは多くのファイルがある場合に問題になり、大規模なモデル、さらに悪いことにマルチベクトル埋め込みを使用しています。したがって、これを操作するには、埋め込みを処理するために高いRAMが必要です。また、これが同期して行われた場合、チャンクは計算が多い操作ではないため、チャンクが作成されている間に多くの時間が無駄になります。チャンクが作成されているため、それらを埋め込みモデルに渡すことは効率的です。

問題に対する私たちの解決策

解決策は、非同期のチャンクと埋め込みタスクを作成することです。 Rustの並行性パターンとスレッドの安全性を使用して、このタスクを処理するために、スレッドを効果的に生成できます。これは、RustのMPSC(Multi-Producer Single Consumer)モジュールを使用して行われ、スレッド間でメッセージを渡します。したがって、これにより、バッファーで埋め込みスレッドに渡されたチャンクのストリームが作成されます。バッファが完了すると、チャンクを埋め込み、埋め込みをメインスレッドに送り返し、ベクトルデータベースに送信します。これにより、単一の操作とボトルネックで時間が無駄になることはありません。さらに、システムはバッファーにチャンクと埋め込みのみを保存し、ベクトルデータベースに移動するとメモリからそれらを消去します。

ベクトルストリーミング:錆を使用したメモリ効率の高いインデックス

埋め込みのユースケースの例

さて、この機能を実行しているのを見てみましょう。

Embedanythingを使用すると、ファイルのディレクトリからベクトルデータベースへのベクトルをストリーミングすることは、単純な3段階のプロセスです。

  1. ベクトルデータベースのアダプターを作成します。これは、データベースの関数をめぐるラッパーであり、インデックスを作成し、メタデータをEmbedanythingの形式からデータベースに必要な形式に変換し、インデックスに埋め込みを挿入する関数です。顕著なデータベースのアダプターはすでに作成されており、ここに存在しています。
  1. 選択した埋め込みモデルを開始します。さまざまなローカルモデルまたはクラウドモデルから選択できます。構成は、一度にストリーミングする必要がある埋め込みの数について、チャンクサイズとバッファサイズを設定することで決定することもできます。理想的には、これはできるだけ高くなければなりませんが、システムはこれを制限します。
  1. Embedanythingから埋め込み関数を呼び出します。埋め込みのディレクトリパス、埋め込みモデル、アダプター、および構成を渡すだけです。

この例では、画像のディレクトリを埋め込み、ベクトルデータベースに送信します。

ステップ1:アダプターを作成します

埋め込みでは、ライブラリを重くしないようにアダプターが外部に作成され、どのデータベースを使用するかを選択できます。これは、Weaviate用のシンプルなアダプターです。

 embed_anythingからインポートEmbedDataから

embed_anything.vectordbインポートアダプターから

クラスweaviateadapter(アダプター):

def __init __(self、api_key、url):

super().__ init __(api_key)

self.client = weaviate.connect_to_weaviate_cloud(

cluster_url = url、auth_credentials = wvc.init.auth.api_key(api_key)

))

self.client.is_ready()の場合:

print( "Weaviate Is Ready")

def create_index(self、index_name:str):

self.index_name = index_name

self.collection = self.client.collections.create(

index_name、vectorizer_config = wvc.config.configure.vectorizer.none()

))

self.collectionを返します

def convert(self、embeddings:list [beddata]):

data = []

埋め込みに埋め込むため:

Property = embedding.metadata

Property ["Text"] = embedding.text

data.append(

wvc.data.dataobject(properties = property、vector = embedding.embedding)

))

データを返します

def upsert(自己、埋め込み):

data = self.convert(埋め込み)

self.client.collections.get(self.index_name).data.insert_many(data)

def delete_index(self、index_name:str):

self.client.collections.delete(index_name)

###クライアントとインデックスを起動します

url = "your-weaviate-url"

api_key = "your-weaviate-api-key"

weaviate_adapter = weaviateadapter(api_key、url)

index_name = "test_index"

weaviate_adapter.client.collections.list_all()のindex_nameの場合:

weaviate_adapter.delete_index(index_name)

weaviate_adapter.create_index( "test_index")
ログイン後にコピー

ステップ2:埋め込みモデルを作成します

ここで、画像を埋め込んでいるので、クリップモデルを使用できます

embed_anythingのインポートwhithmodel

Model = embed_anything.embeddingmodel.from_pretrained_cloud(

embed_anything.whichmodel.clip、

モデル_)
ログイン後にコピー

ステップ3:ディレクトリを埋め込みます

data = embed_anything.embed_image_directory(

「\ image_directory」、

beder = model、

adapter = weaviate_adapter、

config = embed_anything.imageembedconfig(buffer_size = 100)、

))
ログイン後にコピー

ステップ4:ベクトルデータベースをクエリします

query_vector = embed_anything.embed_query(["cat of a cat"]、beder = model)[0] .embedding
ログイン後にコピー

ステップ5:ベクトルデータベースをクエリします

応答= weaviate_adapter.collection.query.near_vector(

Near_vector = query_vector、

制限= 2、

return_metadata = wvc.query.metadataquery(efcessty = true)、

))

応答を確認してください。
ログイン後にコピー

出力

クリップモデルを使用して、猫、犬、サルの写真でディレクトリ全体をベクトル化しました。 「猫の画像」という単純なクエリを使用すると、すべてのファイルを猫の画像を検索することができました。

ベクトルストリーミング:錆を使用したメモリ効率の高いインデックス

Colabのコードについては、ノートブックをご覧ください。

結論

ベクターストリーミングは、多くのエンジニアがより最適化されたノーテクノロジーの債務ソリューションを選択できるようにする機能の1つだと思います。クラウドでかさばるフレームワークを使用する代わりに、軽量ストリーミングオプションを使用できます。

Github Repoをご覧ください:Embedanything Repo。

よくある質問

Q1。埋め込みのベクトルストリーミングとは何ですか?

Ans。 Vectorストリーミングは、Rustの並行性を非同期チャンクと埋め込みに使用し、メモリの使用量を削減し、プロセスを高速化することにより、大規模なドキュメントの埋め込みを最適化する機能です。

Q2。ベクトルストリーミングはどのような問題を解決しますか?

Ans。これは、チャンクを非同期に処理し、ボトルネックを削減し、リソースの使用を最適化することにより、従来の埋め込み方法での高いメモリの使用と非効率性に対処します。

Q3。ベクトルストリーミングはWeaviateでどのように機能しますか?

Ans。アダプターを使用して、埋め込みベクターデータベースと埋め込みを接続し、データのシームレスな埋め込みとクエリを可能にします。

Q4。ベクトルストリーミングを使用するための手順は何ですか?

Ans。ここにステップがあります:
1.データベースアダプターを作成します。
2。埋め込みモデルを開始します。
3。ディレクトリを埋め込みます。
4.ベクトルデータベースをクエリします。

Q5。従来の方法でベクトルストリーミングを使用するのはなぜですか?

Ans。従来の埋め込み方法と比較して、より良い効率、メモリの使用量の減少、スケーラビリティ、柔軟性を提供します。

以上がベクトルストリーミング:錆を使用したメモリ効率の高いインデックスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Meta Llama 3.2を始めましょう - 分析Vidhya Meta Llama 3.2を始めましょう - 分析Vidhya Apr 11, 2025 pm 12:04 PM

メタのラマ3.2:マルチモーダルとモバイルAIの前進 メタは最近、ラマ3.2を発表しました。これは、モバイルデバイス向けに最適化された強力なビジョン機能と軽量テキストモデルを特徴とするAIの大幅な進歩です。 成功に基づいてo

10生成AIコーディング拡張機能とコードのコードを探る必要があります 10生成AIコーディング拡張機能とコードのコードを探る必要があります Apr 13, 2025 am 01:14 AM

ねえ、忍者をコーディング!その日はどのようなコーディング関連のタスクを計画していますか?このブログにさらに飛び込む前に、コーディング関連のすべての問題について考えてほしいです。 終わり? - &#8217を見てみましょう

AVバイト:Meta' s llama 3.2、GoogleのGemini 1.5など AVバイト:Meta' s llama 3.2、GoogleのGemini 1.5など Apr 11, 2025 pm 12:01 PM

今週のAIの風景:進歩、倫理的考慮、規制の議論の旋風。 Openai、Google、Meta、Microsoftのような主要なプレーヤーは、画期的な新しいモデルからLEの重要な変化まで、アップデートの急流を解き放ちました

従業員へのAI戦略の販売:Shopify CEOのマニフェスト 従業員へのAI戦略の販売:Shopify CEOのマニフェスト Apr 10, 2025 am 11:19 AM

Shopify CEOのTobiLütkeの最近のメモは、AIの能力がすべての従業員にとって基本的な期待であると大胆に宣言し、会社内の重大な文化的変化を示しています。 これはつかの間の傾向ではありません。これは、pに統合された新しい運用パラダイムです

GPT-4o vs Openai O1:新しいOpenaiモデルは誇大広告に値しますか? GPT-4o vs Openai O1:新しいOpenaiモデルは誇大広告に値しますか? Apr 13, 2025 am 10:18 AM

導入 Openaiは、待望の「Strawberry」アーキテクチャに基づいて新しいモデルをリリースしました。 O1として知られるこの革新的なモデルは、推論能力を強化し、問題を通じて考えられるようになりました

ビジョン言語モデル(VLM)の包括的なガイド ビジョン言語モデル(VLM)の包括的なガイド Apr 12, 2025 am 11:58 AM

導入 鮮やかな絵画や彫刻に囲まれたアートギャラリーを歩くことを想像してください。さて、各ピースに質問をして意味のある答えを得ることができたらどうでしょうか?あなたは尋ねるかもしれません、「あなたはどんな話を言っていますか?

AIインデックス2025を読む:AIはあなたの友人、敵、または副操縦士ですか? AIインデックス2025を読む:AIはあなたの友人、敵、または副操縦士ですか? Apr 11, 2025 pm 12:13 PM

スタンフォード大学ヒト指向の人工知能研究所によってリリースされた2025年の人工知能インデックスレポートは、進行中の人工知能革命の良い概要を提供します。 4つの単純な概念で解釈しましょう:認知(何が起こっているのかを理解する)、感謝(利益を見る)、受け入れ(顔の課題)、責任(責任を見つける)。 認知:人工知能はどこにでもあり、急速に発展しています 私たちは、人工知能がどれほど速く発展し、広がっているかを強く認識する必要があります。人工知能システムは絶えず改善されており、数学と複雑な思考テストで優れた結果を達成しており、わずか1年前にこれらのテストで惨めに失敗しました。 2023年以来、複雑なコーディングの問題や大学院レベルの科学的問題を解決することを想像してみてください

SQLに列を追加する方法は? - 分析Vidhya SQLに列を追加する方法は? - 分析Vidhya Apr 17, 2025 am 11:43 AM

SQLの変更テーブルステートメント:データベースに列を動的に追加する データ管理では、SQLの適応性が重要です。 その場でデータベース構造を調整する必要がありますか? Alter Tableステートメントはあなたの解決策です。このガイドの詳細は、コルを追加します

See all articles