تنسيق البيانات العمودي الحديث لتعلم الآلة. قم بالتحويل من Parquet في سطرين من التعليمات البرمجية للوصول العشوائي بشكل أسرع 100 مرة، وفهرس المتجهات، وإصدار البيانات، والمزيد.
متوافق مع الباندا، DuckDB، Polars، وpyarrow مع المزيد من عمليات التكامل في الطريق.
التوثيق • المدونة • الخلاف • تويتر
Lance هو تنسيق بيانات عمودي حديث تم تحسينه لسير عمل تعلم الآلة ومجموعات البيانات. لانس مثالي لـ:
وتشمل الميزات الرئيسية لانس ما يلي:
وصول عشوائي عالي الأداء: أسرع 100 مرة من الباركيه دون التضحية بأداء المسح الضوئي.
بحث المتجهات: ابحث عن أقرب الجيران بالمللي ثانية وادمج استعلامات OLAP مع بحث المتجهات.
نسخة صفرية، إصدار تلقائي: إدارة إصدارات بياناتك دون الحاجة إلى بنية تحتية إضافية.
عمليات تكامل النظام البيئي: Apache Arrow وPandas وPolars وDuckDB والمزيد في الطريق.
نصيحة
لانس قيد التطوير النشط ونحن نرحب بالمساهمات. يرجى الاطلاع على دليل المساهمة لدينا لمزيد من المعلومات.
تثبيت
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 ]
دليل | وصف |
---|---|
الصدأ | تنفيذ الصدأ الأساسي |
بيثون | روابط بايثون (pyo3) |
مستندات | مصدر التوثيق |
سنسلط الضوء هنا على بعض جوانب تصميم لانس. لمزيد من التفاصيل، راجع مستند تصميم Lance الكامل.
فهرس المتجهات : فهرس المتجهات للبحث عن التشابه في مساحة التضمين. دعم كل من وحدات المعالجة المركزية ( x86_64
arm
) ووحدة معالجة الرسومات ( Nvidia (cuda)
و Apple Silicon (mps)
).
الترميزات : لتحقيق المسح العمودي السريع واستعلامات النقاط الخطية الفرعية، يستخدم Lance ترميزات وتخطيطات مخصصة.
الحقول المتداخلة : يقوم Lance بتخزين كل حقل فرعي كعمود منفصل لدعم المرشحات الفعالة مثل "البحث عن الصور حيث تتضمن الكائنات المكتشفة القطط".
الإصدار : يمكن استخدام البيان لتسجيل اللقطات. ندعم حاليًا إنشاء إصدارات جديدة تلقائيًا عبر الإلحاقات والكتابة فوق وإنشاء الفهرس.
التحديثات السريعة (ROADMAP): سيتم دعم التحديثات عبر سجلات الكتابة المسبقة.
المؤشرات الثانوية الغنية (ROADMAP):
استخدمنا مجموعة بيانات SIFT لقياس نتائجنا باستخدام 1 مليون متجه 128D
نقوم بإنشاء مجموعة بيانات Lance باستخدام مجموعة بيانات Oxford Pet لإجراء بعض اختبارات الأداء الأولية لـ Lance مقارنةً بالباركيه والصور الأولية/ملفات XML. بالنسبة للاستعلامات التحليلية، فإن Lance أفضل بنسبة 50 إلى 100 مرة من قراءة البيانات الوصفية الأولية. بالنسبة للوصول العشوائي المجمع، فإن Lance أفضل 100 مرة من ملفات الباركيه والملفات الخام.
تتضمن دورة تطوير التعلم الآلي الخطوات التالية:
الرسم البياني LR
أ[مجموعة] --> ب[استكشاف]؛
ب --> ج[تحليلات]؛
C --> D[مهندس الميزات];
د --> ه[تدريب];
E --> F[التقييم]؛
ف-> ج؛
E --> G[النشر];
G --> H[المراقبة];
ح --> أ؛
يستخدم الأشخاص تمثيلات بيانات مختلفة لمراحل مختلفة من الأداء أو محدودة بالأدوات المتاحة. تستخدم Academia بشكل أساسي XML / JSON للتعليقات التوضيحية وبيانات الصور/أجهزة الاستشعار المضغوطة للتعلم العميق، وهو أمر يصعب دمجه في البنية التحتية للبيانات وبطيء التدريب على التخزين السحابي. بينما تستخدم الصناعة مستودعات البيانات (التقنيات القائمة على Parquet، مثل Delta Lake أو Iceberg) أو مستودعات البيانات (AWS Redshift أو Google BigQuery) لجمع البيانات وتحليلها، يتعين عليها تحويل البيانات إلى تنسيقات سهلة التدريب، مثل Rikai/ بيتاستورم أو TRecord. أصبحت عمليات تحويل البيانات المتعددة ذات الغرض الواحد، بالإضافة إلى مزامنة النسخ بين التخزين السحابي ومثيلات التدريب المحلية، ممارسة شائعة.
في حين أن كل تنسيق من تنسيقات البيانات الحالية يتفوق في عبء العمل الذي تم تصميمه من أجله في الأصل، إلا أننا نحتاج إلى تنسيق بيانات جديد مصمم خصيصًا لدورات تطوير تعلم الآلة متعددة المراحل لتقليل صوامع البيانات.
مقارنة تنسيقات البيانات المختلفة في كل مرحلة من مراحل دورة تطوير تعلم الآلة.
حربة | الباركيه وORC | جسون وإكس إم إل | TFRecord | قاعدة البيانات | مستودع | |
---|---|---|---|---|---|---|
التحليلات | سريع | سريع | بطيء | بطيء | مقبول | سريع |
هندسة الميزات | سريع | سريع | مقبول | بطيء | مقبول | جيد |
تمرين | سريع | مقبول | بطيء | سريع | لا يوجد | لا يوجد |
استكشاف | سريع | بطيء | سريع | بطيء | سريع | مقبول |
دعم الأشعة تحت الحمراء | ثري | ثري | مقبول | محدود | ثري | ثري |
يتم استخدام Lance حاليًا في الإنتاج من خلال: