รูปแบบข้อมูลเรียงเป็นแนวสมัยใหม่สำหรับ ML แปลงจาก Parquet เป็นโค้ด 2 บรรทัดเพื่อการเข้าถึงแบบสุ่มที่เร็วขึ้น 100 เท่า ดัชนีเวกเตอร์ การกำหนดเวอร์ชันข้อมูล และอื่นๆ
เข้ากันได้กับ pandas, DuckDB, Polars และ pyarrow พร้อมการผสานรวมที่มากขึ้นในอนาคต
เอกสารประกอบ • บล็อก • Discord • Twitter
Lance คือรูปแบบข้อมูลแบบเรียงเป็นแนวสมัยใหม่ที่ได้รับการปรับให้เหมาะกับเวิร์กโฟลว์และชุดข้อมูล ML แลนซ์เหมาะสำหรับ:
คุณสมบัติที่สำคัญของแลนซ์ ได้แก่ :
การเข้าถึงแบบสุ่มประสิทธิภาพสูง: เร็วกว่า Parquet ถึง 100 เท่า โดยไม่ทำให้ประสิทธิภาพการสแกนลดลง
การค้นหาเวกเตอร์: ค้นหาเพื่อนบ้านที่ใกล้ที่สุดในหน่วยมิลลิวินาที และรวมแบบสอบถาม OLAP เข้ากับการค้นหาเวกเตอร์
คัดลอกเวอร์ชันอัตโนมัติเป็นศูนย์: จัดการเวอร์ชันของข้อมูลของคุณโดยไม่จำเป็นต้องใช้โครงสร้างพื้นฐานเพิ่มเติม
การบูรณาการระบบนิเวศ: Apache Arrow, Pandas, Polars, DuckDB และอีกมากมายที่กำลังจะเกิดขึ้น
เคล็ดลับ
Lance อยู่ในระหว่างการพัฒนาและเรายินดีรับการมีส่วนร่วม โปรดดูคู่มือการมีส่วนร่วมของเราสำหรับข้อมูลเพิ่มเติม
การติดตั้ง
pip install pylance
หากต้องการติดตั้งรุ่นตัวอย่าง:
pip install --pre --extra-index-url https://pypi.fury.io/lancedb/ pylance
เคล็ดลับ
การเผยแพร่ตัวอย่างจะออกบ่อยกว่าการเผยแพร่ฉบับเต็ม และประกอบด้วยคุณลักษณะล่าสุดและการแก้ไขข้อบกพร่อง พวกเขาได้รับการทดสอบในระดับเดียวกับการเปิดตัวฉบับเต็ม เรารับประกันว่าพวกเขาจะยังคงเผยแพร่และพร้อมให้ดาวน์โหลดเป็นเวลาอย่างน้อย 6 เดือน เมื่อคุณต้องการปักหมุดเวอร์ชันใดเวอร์ชันหนึ่ง ให้เลือกเวอร์ชันที่เสถียร
แปลงร่างเป็นแลนซ์
import lance
import pandas as pd
import pyarrow as pa
import pyarrow . dataset
df = pd . DataFrame ({ "a" : [ 5 ], "b" : [ 10 ]})
uri = "/tmp/test.parquet"
tbl = pa . Table . from_pandas ( df )
pa . dataset . write_dataset ( tbl , uri , format = 'parquet' )
parquet = pa . dataset . dataset ( uri , format = 'parquet' )
lance . write_dataset ( parquet , "/tmp/test.lance" )
การอ่านข้อมูลแลนซ์
dataset = lance . dataset ( "/tmp/test.lance" )
assert isinstance ( dataset , pa . dataset . Dataset )
หมีแพนด้า
df = dataset . to_table (). to_pandas ()
df
ดั๊กดีบี
import duckdb
# If this segfaults, make sure you have duckdb v0.7+ installed
duckdb . query ( "SELECT * FROM dataset LIMIT 10" ). to_df ()
ค้นหาเวกเตอร์
ดาวน์โหลดชุดย่อย sift1m
wget ftp://ftp.irisa.fr/local/texmex/corpus/sift.tar.gz
tar -xzf sift.tar.gz
แปลงร่างเป็นแลนซ์
import lance
from lance . vector import vec_to_table
import numpy as np
import struct
nvecs = 1000000
ndims = 128
with open ( "sift/sift_base.fvecs" , mode = "rb" ) as fobj :
buf = fobj . read ()
data = np . array ( struct . unpack ( "<128000000f" , buf [ 4 : 4 + 4 * nvecs * ndims ])). reshape (( nvecs , ndims ))
dd = dict ( zip ( range ( nvecs ), data ))
table = vec_to_table ( dd )
uri = "vec_data.lance"
sift1m = lance . write_dataset ( table , uri , max_rows_per_group = 8192 , max_rows_per_file = 1024 * 1024 )
สร้างดัชนี
sift1m . create_index ( "vector" ,
index_type = "IVF_PQ" ,
num_partitions = 256 , # IVF
num_sub_vectors = 16 ) # PQ
ค้นหาชุดข้อมูล
# Get top 10 similar vectors
import duckdb
dataset = lance . dataset ( uri )
# Sample 100 query vectors. If this segfaults, make sure you have duckdb v0.7+ installed
sample = duckdb . query ( "SELECT vector FROM dataset USING SAMPLE 100" ). to_df ()
query_vectors = np . array ([ np . array ( x ) for x in sample . vector ])
# Get nearest neighbors for all of them
rs = [ dataset . to_table ( nearest = { "column" : "vector" , "k" : 10 , "q" : q })
for q in query_vectors ]
ไดเรกทอรี | คำอธิบาย |
---|---|
สนิม | การใช้งาน Core Rust |
หลาม | การเชื่อมโยง Python (pyo3) |
เอกสาร | แหล่งที่มาของเอกสาร |
ที่นี่เราจะเน้นบางแง่มุมของการออกแบบของ Lance สำหรับรายละเอียดเพิ่มเติม โปรดดูเอกสารการออกแบบ Lance ฉบับเต็ม
ดัชนีเวกเตอร์ : ดัชนีเวกเตอร์สำหรับการค้นหาความคล้ายคลึงกันในพื้นที่ฝัง รองรับทั้ง CPU ( x86_64
และ arm
) และ GPU ( Nvidia (cuda)
และ Apple Silicon (mps)
)
การเข้ารหัส : เพื่อให้บรรลุทั้งการสแกนแบบเรียงเป็นแนวอย่างรวดเร็วและการสืบค้นแบบจุดย่อยเชิงเส้น Lance ใช้การเข้ารหัสและเค้าโครงแบบกำหนดเอง
ฟิลด์ที่ซ้อนกัน : Lance จะจัดเก็บแต่ละฟิลด์ย่อยเป็นคอลัมน์แยกกันเพื่อรองรับตัวกรองที่มีประสิทธิภาพ เช่น "ค้นหาภาพที่วัตถุที่ตรวจพบมีแมวอยู่ด้วย"
การกำหนดเวอร์ชัน : Manifest สามารถใช้บันทึกสแนปชอตได้ ขณะนี้เราสนับสนุนการสร้างเวอร์ชันใหม่โดยอัตโนมัติผ่านการผนวก เขียนทับ และการสร้างดัชนี
การอัปเดตอย่างรวดเร็ว (ROADMAP): การอัปเดตจะได้รับการสนับสนุนผ่านบันทึกการเขียนล่วงหน้า
ดัชนีรองที่สมบูรณ์ (ROADMAP):
เราใช้ชุดข้อมูล SIFT เพื่อเปรียบเทียบผลลัพธ์ของเรากับเวกเตอร์ 1M ที่ 128D
เราสร้างชุดข้อมูล Lance โดยใช้ชุดข้อมูล Oxford Pet เพื่อทำการทดสอบประสิทธิภาพเบื้องต้นของ Lance เมื่อเปรียบเทียบกับ Parquet และรูปภาพ Raw/XML สำหรับการสืบค้นการวิเคราะห์ Lance นั้นดีกว่าการอ่านข้อมูลเมตาดิบถึง 50-100 เท่า สำหรับการเข้าถึงแบบสุ่มแบบแบตช์ Lance นั้นดีกว่าทั้งไฟล์ปาร์เก้และไฟล์ดิบถึง 100 เท่า
วงจรการพัฒนาแมชชีนเลิร์นนิงประกอบด้วยขั้นตอนต่างๆ ดังนี้
กราฟ LR
A[คอลเลกชัน] --> B[การสำรวจ];
B --> C[การวิเคราะห์];
C -> D [วิศวกรคุณสมบัติ];
D --> E[การฝึกอบรม];
E --> F[การประเมินผล];
ฉ --> ค;
E -> G [การปรับใช้];
G -> H [การตรวจสอบ];
ฮ --> ก;
ผู้คนใช้การแสดงข้อมูลที่แตกต่างกันไปตามขั้นตอนที่แตกต่างกันสำหรับประสิทธิภาพหรือถูกจำกัดโดยเครื่องมือที่มีอยู่ Academia ส่วนใหญ่ใช้ XML / JSON สำหรับคำอธิบายประกอบ และข้อมูลรูปภาพ/เซ็นเซอร์ที่ซิปไว้สำหรับการเรียนรู้เชิงลึก ซึ่งเป็นเรื่องยากที่จะรวมเข้ากับโครงสร้างพื้นฐานของข้อมูล และช้าในการฝึกอบรมบนที่เก็บข้อมูลบนคลาวด์ ในขณะที่อุตสาหกรรมใช้ Data Lake (เทคนิคที่ใช้ปาร์เก้ เช่น Delta Lake, Iceberg) หรือคลังข้อมูล (AWS Redshift หรือ Google BigQuery) เพื่อรวบรวมและวิเคราะห์ข้อมูล พวกเขาจะต้องแปลงข้อมูลให้เป็นรูปแบบที่เหมาะกับการฝึกอบรม เช่น Rikai/ Petastorm หรือ TFRecord การแปลงข้อมูลเพื่อจุดประสงค์เดียวหลายครั้ง รวมถึงการซิงค์สำเนาระหว่างที่เก็บข้อมูลบนคลาวด์กับอินสแตนซ์การฝึกอบรมในเครื่องกลายเป็นเรื่องปกติ
แม้ว่ารูปแบบข้อมูลที่มีอยู่แต่ละรูปแบบจะทำงานได้ดีตามปริมาณงานที่ได้รับการออกแบบมาแต่แรก แต่เราจำเป็นต้องมีรูปแบบข้อมูลใหม่ที่ปรับแต่งสำหรับวงจรการพัฒนา ML แบบหลายขั้นตอนเพื่อลดและไซโลข้อมูล
การเปรียบเทียบรูปแบบข้อมูลที่แตกต่างกันในแต่ละขั้นตอนของวงจรการพัฒนา ML
แลนซ์ | ปาร์เก้และโออาร์ซี | JSON และ XML | TFRecord | ฐานข้อมูล | คลังสินค้า | |
---|---|---|---|---|---|---|
การวิเคราะห์ | เร็ว | เร็ว | ช้า | ช้า | เหมาะสม | เร็ว |
วิศวกรรมคุณสมบัติ | เร็ว | เร็ว | เหมาะสม | ช้า | เหมาะสม | ดี |
การฝึกอบรม | เร็ว | เหมาะสม | ช้า | เร็ว | ไม่มี | ไม่มี |
การสำรวจ | เร็ว | ช้า | เร็ว | ช้า | เร็ว | เหมาะสม |
การสนับสนุนอินฟาเรด | รวย | รวย | เหมาะสม | จำกัด | รวย | รวย |
ปัจจุบัน Lance ใช้ในการผลิตโดย: