GitHub概要

activeloopai/deeplake

Database for AI. Store Vectors, Images, Texts, Videos, etc. Use with LLMs/LangChain. Store, query, version, & visualize any AI data. Stream data in real-time to PyTorch/TensorFlow. https://activeloop.ai

スター8,742
ウォッチ95
フォーク669
作成日:2019年8月9日
言語:Python
ライセンス:Apache License 2.0

トピックス

aicomputer-visioncvdata-sciencedatalakedatasetsdeep-learningimage-processinglangchainlarge-language-modelsllmmachine-learningmlmlopsmulti-modalpythonpytorchtensorflowvector-databasevector-search

スター履歴

activeloopai/deeplake Star History
データ取得日時: 2025/7/30 02:37

データベース

Deep Lake

概要

Deep LakeはActiveloopが開発するAIのためのデータベースで、深層学習アプリケーションに最適化されたストレージフォーマットを提供します。ベクトル埋め込みに特化したデータレイクとして、3500万以上の埋め込みを1秒以下でクエリ可能な高性能を実現。画像、動画、テキスト、音声などのマルチモーダルデータを統一的に管理し、LLMアプリケーションやディープラーニングモデルの学習に必要なデータパイプラインを簡素化します。

詳細

Deep Lakeは従来のベクトルデータベースとは異なるアプローチを採用し、データレイクの柔軟性とベクトルデータベースの検索性能を融合させています。サーバーレスアーキテクチャにより、ローカル、クラウド、インメモリのいずれの環境でもシームレスに動作し、計算はクライアントサイドで実行されるため、軽量な本番アプリケーションを数秒で起動できます。

主要機能

HNSWアルゴリズムの最適化実装

  • Deep Lake 3.7.1では、HNSW(Hierarchical Navigable Small World)ANN検索アルゴリズムの独自実装を導入
  • インテリジェントなメモリ利用とマルチスレッディングによるインデックス作成の高速化
  • Hnswlibパッケージをベースに、Deep Lake独自の最適化を追加
  • メタデータ、テキスト、その他の属性に基づく高速フィルタリングを統合

パフォーマンスとスケーラビリティ

  • 最大3500万の埋め込みに対してサブセカンドのベクトル検索を実現
  • 10万未満のデータセットでは線形検索、それ以上ではANN検索に自動切り替え
  • オブジェクトストレージ、アタッチドストレージ(ディスク)、RAMへのデータ分散配置
  • 他のベクトルデータベースと比較して80%のコスト削減

データ管理機能

  • マルチモーダルサポート: 埋め込み、画像、動画、音声、テキスト、DICOM、PDFなど多様なデータ型に対応
  • ネイティブ圧縮: JPEG、PNG、MP4などの形式でデータを保存し、NumPy配列のようにアクセス
  • バージョン管理: データのGitのようなバージョン管理システムを内蔵
  • 遅延読み込み: 必要なデータのみをオンデマンドで読み込み、メモリ効率を最適化

統合とエコシステム

  • MLフレームワーク: PyTorchとTensorFlowの組み込みデータローダー
  • LLMツール: LangChain、LlamaIndexとのシームレスな統合
  • クラウドストレージ: S3、GCP、Azure、MinIOなどS3互換ストレージに対応
  • 可視化: Deep Lake Appでデータセットを即座に可視化

Tensor Query Language (TQL)

SQLライクなクエリ言語で、機械学習データセットに最適化:

  • COSINE_SIMILARITYL2_NORMによるベクトル類似性検索
  • BM25_SIMILARITYによるテキストセマンティック検索
  • 複雑なフィルタリング、結合、ソート、ページネーション
  • 同期/非同期実行のサポート

メリット・デメリット

メリット

  • コスト効率: 他のベクトルデータベースと比較して80%のコスト削減
  • 高性能: 3500万ベクトルでもサブセカンドの検索速度
  • マルチモーダル対応: 様々なデータ型を統一的に管理
  • サーバーレス: インフラ管理不要で即座にデプロイ可能
  • バージョン管理: データの変更履歴を追跡可能
  • 柔軟なストレージ: ローカル、クラウド、インメモリに対応
  • 豊富な統合: 主要なMLツールとのネイティブ統合

デメリット

  • HNSWの詳細仕様が非公開: 実装の詳細が完全には文書化されていない
  • 学習曲線: TQLやDeep Lake特有の概念の習得が必要
  • リアルタイム要件: ミリ秒単位の応答が必要なアプリケーションには不向き
  • エンタープライズ機能: 一部の高度な機能は有料版のみ

主要リンク

書き方の例

基本的な使用例

import deeplake
from deeplake import VectorStore
import numpy as np

# データセットの作成
ds = deeplake.empty('my_dataset', overwrite=True)

# テンソルの追加
ds.create_tensor('embeddings', htype='embedding', dtype=np.float32)
ds.create_tensor('text', htype='text')
ds.create_tensor('metadata', htype='json')

# データの追加
embeddings = np.random.randn(1000, 768).astype(np.float32)
texts = [f"Document {i}" for i in range(1000)]
metadata = [{"category": f"cat_{i%5}", "id": i} for i in range(1000)]

ds.append({
    'embeddings': embeddings,
    'text': texts,
    'metadata': metadata
})

# ベクトル検索
query_embedding = np.random.randn(768).astype(np.float32)
results = ds.query(
    f"SELECT * ORDER BY COSINE_SIMILARITY(embeddings, ARRAY{query_embedding.tolist()}) DESC LIMIT 10"
)

LangChainとの統合

from langchain.vectorstores import DeepLake
from langchain.embeddings import OpenAIEmbeddings

# Deep Lakeベクトルストアの初期化
embeddings = OpenAIEmbeddings()
vector_store = DeepLake(
    dataset_path="./my_deeplake_db",
    embedding=embeddings,
    runtime={"tensor_db": True}  # マネージドテンソルDBを有効化
)

# ドキュメントの追加
texts = ["Deep Lakeは高性能なベクトルデータベースです", 
         "HNSWアルゴリズムにより高速な検索を実現します"]
metadata = [{"source": "doc1"}, {"source": "doc2"}]
vector_store.add_texts(texts=texts, metadatas=metadata)

# 類似性検索
query = "ベクトルデータベースの性能について"
docs = vector_store.similarity_search(query, k=5)

# フィルタリング付き検索
docs_filtered = vector_store.similarity_search(
    query, 
    k=5,
    filter={"source": "doc1"}
)

マルチモーダルデータの管理

import deeplake
from PIL import Image
import torch

# マルチモーダルデータセットの作成
ds = deeplake.empty('multimodal_dataset', overwrite=True)
ds.create_tensor('images', htype='image', sample_compression='jpeg')
ds.create_tensor('image_embeddings', htype='embedding')
ds.create_tensor('captions', htype='text')
ds.create_tensor('audio', htype='audio')

# 画像とキャプションの追加
image = Image.open('example.jpg')
image_embedding = model.encode_image(image)  # 事前学習済みモデルを使用
caption = "美しい風景写真"

ds.append({
    'images': image,
    'image_embeddings': image_embedding,
    'captions': caption
})

# PyTorchデータローダーの作成
dataloader = ds.pytorch(
    batch_size=32,
    shuffle=True,
    num_workers=4,
    transform={
        'images': torchvision.transforms.Compose([
            torchvision.transforms.Resize(224),
            torchvision.transforms.ToTensor(),
        ])
    }
)

# モデルの学習
for batch in dataloader:
    images = batch['images']
    captions = batch['captions']
    # 学習処理...