멀티모달 AI를 위한 오픈 레이크하우스 (Open Lakehouse) 포맷
요약
Lance는 멀티모달 AI 워크플로우를 위해 설계된 오픈 레이크하우스 포맷입니다. 객체 스토리지 위에서 고성능 벡터 검색, 랜덤 액세스, 피처 엔지니어링을 지원하며 다양한 데이터 분석 도구와 호환됩니다.
핵심 포인트
- 벡터 유사도와 전체 텍스트 검색을 결합한 하이브리드 검색 지원
- Parquet 대비 최대 100배 빠른 랜덤 액세스 성능 제공
- 이미지, 비디오 등 멀티모달 데이터를 단일 포맷으로 통합 관리
- ACID 트랜잭션 및 제로 카피 버전 관리 기능 제공
- Pandas, Spark, Ray 등 주요 데이터 생태계와 높은 호환성
멀티모달 AI를 위한 오픈 레이크하우스 (Open Lakehouse) 포맷
레이크하우스를 위한 고성능 벡터 검색 (Vector Search), 전체 텍스트 검색 (Full-text Search), 랜덤 액세스 (Random Access) 및 피처 엔지니어링 (Feature Engineering) 기능.
Pandas, DuckDB, Polars, PyArrow, Ray, Spark와 호환되며, 더 많은 통합 기능이 추가될 예정입니다.
Lance는 멀티모달 AI를 위한 오픈 레이크하우스 (Open Lakehouse) 포맷입니다. 이는 객체 스토리지 (Object Storage) 위에 완전한 레이크하우스를 구축하여 AI 워크플로우를 구동할 수 있도록 파일 포맷 (File Format), 테이블 포맷 (Table Format) 및 카탈로그 사양 (Catalog Spec)을 포함합니다. Lance는 다음과 같은 작업에 완벽합니다:
- 하이브리드 검색 (Hybrid Search) 기능을 갖춘 검색 엔진 및 피처 스토어 (Feature Store) 구축.
- 고성능 I/O 및 랜덤 액세스 (Random Access)가 필요한 대규모 ML 학습.
- 이미지, 비디오, 오디오, 텍스트 및 임베딩 (Embeddings)을 포함한 멀티모달 데이터의 저장, 쿼리 및 관리.
Lance의 주요 기능은 다음과 같습니다:
표현력이 풍부한 하이브리드 검색 (Expressive hybrid search): 가속화된 보조 인덱스 (Secondary Indices)를 사용하여 동일한 데이터셋에서 벡터 유사도 검색 (Vector Similarity Search), 전체 텍스트 검색 (Full-text Search, BM25) 및 SQL 분석을 결합합니다. -
번개처럼 빠른 랜덤 액세스 (Lightning-fast random access): 스캔 성능을 희생하지 않으면서 랜덤 액세스 측면에서 Parquet 또는 Iceberg보다 100배 더 빠릅니다. -
네이티브 멀티모달 데이터 지원 (Native multimodal data support): 효율적인 블롭 인코딩 (Blob Encoding) 및 지연 로딩 (Lazy Loading)을 통해 이미지, 비디오, 오디오, 텍스트 및 임베딩을 단일 통합 포맷에 저장합니다. -
데이터 진화 (Data evolution): 전체 테이블 재작성 없이 백필 (Backfill)된 값을 사용하여 열을 효율적으로 추가할 수 있으며, 이는 ML 피처 엔지니어링 (Feature Engineering)에 완벽합니다. -
제로 카피 버전 관리 (Zero-copy versioning): 추가 인프라 없이 ACID 트랜잭션, 타임 트래블 (Time Travel), 태그 (Tags) 및 브랜치 (Branches)를 통한 자동 버전 관리를 제공합니다. -
풍부한 생태계 통합 (Rich ecosystem integrations): Apache Arrow, Pandas, Polars, DuckDB, Apache Spark, Ray, Trino, Apache Flink 및 오픈 카탈로그 (Apache Polaris, Unity Catalog, Apache Gravitino).
자세한 내용은 전체 Lance 포맷 사양을 참조하십시오.
Tip
Lance는 활발히 개발 중이며 기여를 환영합니다. 자세한 내용은 기여 가이드 (Contributing Guide)를 참조하십시오.
설치 (Installation)
pip install pylance
미리보기 릴리스 (Preview Release)를 설치하려면:
pip install --pre --extra-index-url https://pypi.fury.io/lance-format/pylance
Tip
미리보기 릴리스 (Preview releases)는 정식 릴리스 (Full releases)보다 더 자주 출시되며, 최신 기능과 버그 수정 사항을 포함하고 있습니다. 정식 릴리스와 동일한 수준의 테스트를 거칩니다. 저희는 이 릴리스들이 최소 6개월 동안 게시 상태를 유지하며 다운로드 가능함을 보장합니다. 특정 버전을 고정(Pin)하여 사용하고자 할 때는 안정적인 릴리스 (Stable release)를 권장합니다.
Lance로 변환하기 (Converting to Lance)
import lance
import pandas as pd
import pyarrow as pa
...
Lance 데이터 읽기 (Reading Lance data)
dataset = lance.dataset("/tmp/test.lance")
assert isinstance(dataset, pa.dataset.Dataset)
Pandas
df = dataset.to_table().to_pandas()
df
DuckDB
import duckdb
# 만약 세그멘테이션 오류 (Segfault)가 발생한다면, duckdb v0.7+ 이상이 설치되어 있는지 확인하세요
duckdb.query("SELECT * FROM dataset LIMIT 10").to_df()
벡터 검색 (Vector search)
sift1m 서브셋 다운로드
wget ftp://ftp.irisa.fr/local/texmex/corpus/sift.tar.gz
tar -xzf sift.tar.gz
Lance로 변환
import lance
from lance.vector import vec_to_table
import numpy as np
...
인덱스 구축 (Build the index)
sift1m.create_index("vector",
index_type="IVF_PQ",
num_partitions=256, # IVF
...
데이터셋 검색 (Search the dataset)
# 상위 10개의 유사 벡터 가져오기
import duckdb
dataset = lance.dataset(uri)
...
| 디렉토리 (Directory) | 설명 (Description) |
|---|---|
| rust | 핵심 Rust 구현체 (Core Rust implementation) |
| ... |
저희는 128차원(128D)의 100만 개(1M) 벡터를 사용하여 SIFT 데이터셋으로 결과를 벤치마킹했습니다.
-
무작위로 샘플링된 100개의 쿼리 벡터에 대해, 평균 응답 시간 1ms 미만을 기록했습니다 (2023 m2 MacBook Air 기준)
-
근사 최근접 이웃 (ANNs) 검색은 항상 재현율 (Recall)과 성능 사이의 트레이드오프 (Trade-off) 관계에 있습니다.
저희는 Parquet 및 원본 이미지/XML과 비교하여 Lance의 예비 성능 테스트를 수행하기 위해 Oxford Pet 데이터셋을 사용하여 Lance 데이터셋을 생성했습니다. 분석 쿼리 (Analytics queries)의 경우, Lance는 원본 메타데이터를 읽는 것보다 50~100배 더 빠릅니다. 배치 무작위 액세스 (Batched random access)의 경우, Lance는 Parquet와 원본 파일 모두보다 100배 더 빠릅니다.
머신러닝 개발 사이클은 여러 단계를 포함합니다:
graph LR
A[Collection] --> B[Exploration];
B --> C[Analytics];
...
기존의 레이크하우스 (Lakehouse) 포맷들은 SQL 분석 (SQL analytics)을 위해 설계되었으며, 다음과 같은 요구사항을 가진 AI/ML 워크로드(workloads)를 처리하는 데 어려움을 겪습니다:
벡터 검색 (Vector search): 유사성 및 의미론적 검색 (semantic retrieval)을 위함
빠른 무작위 접근 (Fast random access): 샘플링 및 대화형 탐색 (interactive exploration)을 위함
멀티모달 데이터 (Multimodal data): 임베딩 (embeddings)과 함께 이미지, 비디오, 오디오를 저장하기 위함
데이터 진화 (Data evolution): 전체 테이블을 다시 쓰지 않고도 피처 엔지니어링 (feature engineering)을 수행하기 위함
하이브리드 검색 (Hybrid search): 벡터, 전체 텍스트 (full-text), 그리고 SQL 조건절 (predicates)을 결합하기 위함
기존 포맷들 (Parquet, Iceberg, Delta Lake)은 SQL 분석에는 뛰어나지만, AI 기능을 위해서는 추가적인 전문 시스템이 필요합니다. Lance는 이러한 AI 우선 (AI-first) 기능들을 레이크하우스 포맷에 직접 가져옵니다.
ML 개발 단계별 다양한 포맷 비교:
| Lance | Parquet & ORC | JSON & XML | TFRecord | Database | Warehouse |
|---|---|---|---|---|---|
| Analytics | Fast | Fast | Slow | Slow | Decent |
| ... | Infra Support | Rich | Rich | Decent |
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending Rust (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기