paint-brush
LanceDB: Chiến mã đáng tin cậy của bạn trong cuộc đấu tranh chống lại sự phức tạp của dữ liệutừ tác giả@minio
25,860 lượt đọc
25,860 lượt đọc

LanceDB: Chiến mã đáng tin cậy của bạn trong cuộc đấu tranh chống lại sự phức tạp của dữ liệu

từ tác giả MinIO8m2024/02/01
Read on Terminal Reader
Read this story w/o Javascript

dài quá đọc không nổi

Có nhiều cách để xây dựng trên nền tảng được cung cấp trong hướng dẫn này nhằm tạo ra các kiến trúc ML/AI hiệu quả, có thể mở rộng và phù hợp với tương lai bằng cách sử dụng MinIO và LanceDB.

People Mentioned

Mention Thumbnail
featured image - LanceDB: Chiến mã đáng tin cậy của bạn trong cuộc đấu tranh chống lại sự phức tạp của dữ liệu
MinIO HackerNoon profile picture
0-item
1-item

Được xây dựng trên Lance, một định dạng dữ liệu cột nguồn mở, LanceDB có một số tính năng thú vị khiến nó trở nên hấp dẫn đối với AI/ML. Ví dụ: LanceDB hỗ trợ vector hóa rõ ràng và tiềm ẩn với khả năng xử lý nhiều loại dữ liệu khác nhau. LanceDB được tích hợp với các khung ML hàng đầu như PyTorch Dòng chảy căng . Điều thú vị hơn nữa là tính năng tìm kiếm hàng xóm nhanh chóng của LanceDB, cho phép truy xuất hiệu quả các vectơ tương tự bằng cách sử dụng các thuật toán lân cận gần nhất gần đúng. Tất cả những điều này kết hợp để tạo ra một cơ sở dữ liệu vector nhanh, dễ sử dụng và nhẹ đến mức có thể triển khai ở bất cứ đâu.


LanceDB có khả năng truy vấn dữ liệu trong bộ lưu trữ đối tượng tương thích với S3. Sự kết hợp này là tối ưu để xây dựng các hệ thống truy xuất và lưu trữ dữ liệu ML gốc trên nền tảng đám mây, hiệu suất cao, có thể mở rộng và có thể mở rộng. MinIO mang lại hiệu suất và tính linh hoạt tuyệt vời trên nhiều phần cứng, vị trí và môi trường đám mây khác nhau cho phương trình, khiến nó trở thành lựa chọn tự nhiên cho các hoạt động triển khai như vậy.


Sau khi hoàn thành hướng dẫn này, bạn sẽ sẵn sàng sử dụng LanceDB và MinIO để giải quyết mọi thách thức về dữ liệu.

Lance là gì?

Các cây thương định dạng tệp là định dạng dữ liệu cột được tối ưu hóa cho quy trình công việc và bộ dữ liệu ML. Nó được thiết kế để phiên bản, truy vấn và sử dụng cho đào tạo dễ dàng và nhanh chóng, đồng thời phù hợp với nhiều loại dữ liệu khác nhau, bao gồm hình ảnh, video, đám mây điểm 3D, âm thanh và dữ liệu dạng bảng. Ngoài ra, nó hỗ trợ truy cập ngẫu nhiên hiệu suất cao: vớiĐiểm chuẩn báo cáo của Lance nhanh hơn 100 lần so với Parquet trong truy vấn. Tốc độ của Lance một phần là kết quả của việc triển khai trong Rust và thiết kế dựa trên nền tảng đám mây của nó bao gồm các tính năng như tạo phiên bản không sao chép và hoạt động vectơ được tối ưu hóa.


Một trong số đó tính năng chính là khả năng thực hiện tìm kiếm vector, cho phép người dùng tìm thấy hàng xóm gần nhất trong vòng chưa đầy 1 mili giây và kết hợp các truy vấn OLAP với tìm kiếm vectơ. Các ứng dụng sản xuất khác cho định dạng lance bao gồm cơ sở dữ liệu vectơ có độ trễ thấp được triển khai ở biên cho các ứng dụng ML, lưu trữ, truy xuất và xử lý dữ liệu đa phương thức ở quy mô lớn trong các công ty xe tự lái và tìm kiếm được cá nhân hóa theo vectơ quy mô hàng tỷ trong điện tử. -các công ty thương mại. Một phần sức hấp dẫn của định dạng tệp Lance là khả năng tương thích với các công cụ và nền tảng phổ biến, chẳng hạn như Pandas, DuckDB , Cực, và Pyarrow . Ngay cả khi không sử dụng LanceDB, bạn vẫn có thể tận dụng định dạng tệp Lance trong ngăn xếp dữ liệu của mình.

Được xây dựng cho AI và Machine Learning

Cơ sở dữ liệu vectơ như LanceDB mang lại những lợi thế khác biệt cho các ứng dụng AI và máy học nhờ tính hiệu quả của chúng. lưu trữ tách rời và tính toán các kiến trúc cũng như truy xuất các biểu diễn dữ liệu bằng vectơ chiều cao. Dưới đây là một số trường hợp sử dụng chính:


Xử lý ngôn ngữ tự nhiên (NLP):


Tìm kiếm ngữ nghĩa: Tìm tài liệu hoặc đoạn văn tương tự như truy vấn dựa trên ý nghĩa chứ không chỉ từ khóa. Điều này hỗ trợ phản hồi của chatbot, đề xuất nội dung được cá nhân hóa và hệ thống truy xuất kiến thức.


Trả lời câu hỏi: Hiểu và trả lời các câu hỏi phức tạp bằng cách tìm các đoạn văn bản có liên quan dựa trên sự tương đồng về ngữ nghĩa.


Lập mô hình chủ đề: Khám phá các chủ đề tiềm ẩn trong bộ sưu tập văn bản lớn, hữu ích cho việc phân cụm tài liệu và phân tích xu hướng.


Tầm nhìn máy tính:


Truy xuất hình ảnh và video: Tìm kiếm hình ảnh hoặc video tương tự dựa trên nội dung trực quan, rất quan trọng cho việc truy xuất hình ảnh dựa trên nội dung, tìm kiếm sản phẩm và phân tích video.


Phát hiện và phân loại đối tượng: Cải thiện độ chính xác của các mô hình phát hiện và phân loại đối tượng bằng cách truy xuất hiệu quả dữ liệu đào tạo tương tự.


Đề xuất video : Đề xuất các video tương tự dựa trên nội dung trực quan của các video đã xem trước đó.


Trong số rất nhiều cơ sở dữ liệu vectơ trên thị trường, LanceDB đặc biệt phù hợp với AI và học máy vì nó hỗ trợ truy vấn trên bộ lưu trữ tương thích với S3. Dữ liệu của bạn ở khắp mọi nơi, cơ sở dữ liệu của bạn cũng phải ở khắp mọi nơi.

Kiến trúc để thành công

Sử dụng MinIO với LanceDB mang lại một số lợi ích, bao gồm:


  • Khả năng mở rộng và hiệu suất : Thiết kế dựa trên nền tảng đám mây của MinIO được xây dựng để lưu trữ và truy xuất theo quy mô và hiệu suất cao. Bằng cách tận dụng khả năng mở rộng và hiệu suất của MinIO, LanceDB có thể xử lý lượng lớn dữ liệu một cách hiệu quả, khiến dữ liệu này rất phù hợp với khối lượng công việc ML hiện đại.


  • Tính sẵn sàng cao và khả năng chịu lỗi : MinIO có tính sẵn sàng cao, không thể thay đổi và có độ bền cao. Điều này đảm bảo rằng dữ liệu được lưu trữ trong MinIO được bảo vệ khỏi các lỗi phần cứng, đồng thời mang lại tính sẵn sàng và khả năng chịu lỗi cao, điều này rất quan trọng đối với các ứng dụng sử dụng nhiều dữ liệu như LanceDB.


  • Sao chép tích cực-tích cực : Sao chép chủ động, đa trang web cho phép sao chép dữ liệu gần như đồng bộ giữa nhiều lần triển khai MinIO. Quy trình mạnh mẽ này đảm bảo độ bền và khả năng dự phòng cao, khiến nó trở nên lý tưởng để bảo vệ dữ liệu trong các môi trường sản xuất quan trọng.


Sự kết hợp giữa MinIO và LanceDB cung cấp giải pháp gốc đám mây có thể mở rộng hiệu suất cao để quản lý và phân tích các bộ dữ liệu ML quy mô lớn.

Yêu cầu

Để làm theo hướng dẫn này, bạn sẽ cần sử dụng Docker Soạn . Bạn có thể cài đặt các tệp nhị phân Docker Engine và Docker Compose riêng biệt hoặc cùng nhau bằng Docker Desktop. Tùy chọn đơn giản nhất là cài đặt Docker Desktop.


Đảm bảo rằng Docker Compose được cài đặt bằng cách chạy lệnh sau:


 docker compose version


Bạn cũng sẽ cần cài đặt Python. Bạn có thể tải xuống Python từ đây . Trong quá trình cài đặt, hãy đảm bảo chọn tùy chọn thêm Python vào PATH của hệ thống của bạn.


Tùy chọn, bạn có thể chọn tạo Môi trường ảo. Cách tốt nhất là tạo một môi trường ảo để tách biệt các phần phụ thuộc. Để làm như vậy, hãy mở một terminal và chạy:


 python -m venv venv


Để kích hoạt môi trường ảo:


Trên Windows:

 .\venv\Scripts\activate


Trên macOS/Linux:

 source venv/bin/activate

Bắt đầu

Bắt đầu bằng cách nhân bản dự án từ đây . Sau khi hoàn tất, hãy điều hướng đến thư mục nơi bạn đã tải xuống các tệp trong cửa sổ terminal và chạy:


 docker-compose up minio


Thao tác này sẽ khởi động vùng chứa MinIO. Bạn có thể điều hướng đến ' http://172.20.0.2:9001 ' để xem bảng điều khiển MinIO.


Bảng điều khiển MiniIO


Đăng nhập bằng tên người dùng và mật khẩu minioadmin:minioadmin .


Tiếp theo, chạy lệnh sau để tạo nhóm MinIO có tên lance .


 docker compose up mc 


Nhóm MinIO


Lệnh này thực hiện một loạt Khách hàng MinIO (mc) các lệnh trong shell.


Dưới đây là bảng phân tích của từng lệnh:


cho đến khi (/usr/bin/mc config Host thêm minio http://minio:9000 minioadmin minioadmin) thực hiện echo '...waiting...' && sleep 1; done ;: Lệnh này liên tục cố gắng định cấu hình máy chủ MinIO có tên minio với các tham số được chỉ định (điểm cuối, khóa truy cập và khóa bí mật) cho đến khi thành công. Trong mỗi lần thử, nó sẽ lặp lại một tin nhắn đang chờ và tạm dừng trong 1 giây.


/usr/bin/mc rm -r --force minio/lance;: Lệnh này loại bỏ (xóa) một cách mạnh mẽ tất cả nội dung trong nhóm lance trong MinIO.


/usr/bin/mc mb minio/lance; : Lệnh này tạo một nhóm mới có tên lance trong MinIO.


/usr/bin/mc chính sách đặt minio/lance công khai; : Lệnh này đặt chính sách của nhóm lance ở chế độ công khai, cho phép truy cập đọc công khai.


lối ra 0; : Lệnh này đảm bảo rằng tập lệnh thoát với mã trạng thái là 0, cho biết việc thực thi thành công.

LanceDB

Thật không may, LanceDB không có hỗ trợ S3 gốc và do đó, bạn sẽ phải sử dụng thứ gì đó như boto3 để kết nối với vùng chứa MinIO mà bạn đã tạo. Khi LanceDB hoàn thiện, chúng tôi mong đợi sự hỗ trợ gốc của S3 sẽ giúp trải nghiệm người dùng tốt hơn.


Kịch bản mẫu dưới đây sẽ giúp bạn bắt đầu.


Cài đặt các gói cần thiết bằng pip. Tạo một tệp có tên require.txt với nội dung sau:


 lancedb~=0.4.1 boto3~=1.34.9 botocore~=1.34.9


Sau đó chạy lệnh sau để cài đặt các gói:


 pip install -r requirements.txt


Bạn sẽ cần thay đổi thông tin đăng nhập nếu phương pháp tạo vùng chứa MinIO của bạn khác với phương pháp được nêu ở trên.


Lưu tập lệnh bên dưới vào một tệp, ví dụ: lancedb_script.py .


 import lancedb import os import boto3 import botocore import random def generate_random_data(num_records): data = [] for _ in range(num_records): record = { "vector": [random.uniform(0, 10), random.uniform(0, 10)], "item": f"item_{random.randint(1, 100)}", "price": round(random.uniform(5, 100), 2) } data.append(record) return data def main(): # Set credentials and region as environment variables os.environ["AWS_ACCESS_KEY_ID"] = "minioadmin" os.environ["AWS_SECRET_ACCESS_KEY"] = "minioadmin" os.environ["AWS_ENDPOINT"] = "http://localhost:9000" os.environ["AWS_DEFAULT_REGION"] = "us-east-1" minio_bucket_name = "lance" # Create a boto3 session with path-style access session = boto3.Session() s3_client = session.client("s3", config=botocore.config.Config(s3={'addressing_style': 'path'})) # Connect to LanceDB using path-style URI and s3_client db_uri = f"s3://{minio_bucket_name}/" db = lancedb.connect(db_uri) # Create a table with more interesting data table = db.create_table("mytable", data=generate_random_data(100)) # Open the table and perform a search result = table.search([5, 5]).limit(5).to_pandas() print(result) if __name__ == "__main__": main()


Tập lệnh này sẽ tạo bảng Lance từ dữ liệu được tạo ngẫu nhiên và thêm nó vào nhóm MinIO của bạn. Xin nhắc lại, nếu bạn không sử dụng phương pháp trong phần trước để tạo vùng lưu trữ, bạn sẽ cần phải làm như vậy trước khi chạy tập lệnh. Hãy nhớ thay đổi tập lệnh mẫu ở trên để khớp với tên bạn đặt tên cho nhóm MinIO của mình.


Cuối cùng, tập lệnh sẽ mở bảng mà không di chuyển nó ra khỏi MinIO và sử dụng Pandas để thực hiện tìm kiếm và in kết quả.


Kết quả của tập lệnh sẽ trông giống như bên dưới. Hãy nhớ rằng dữ liệu được tạo ngẫu nhiên mỗi lần.


 vector item price _distance 0 [5.1022754, 5.1069164] item_95 50.94 0.021891 1 [4.209107, 5.2760105] item_100 69.34 0.701694 2 [5.23562, 4.102992] item_96 99.86 0.860140 3 [5.7922664, 5.867489] item_47 56.25 1.380223 4 [4.458882, 3.934825] item_93 9.90 1.427407


Mở rộng theo cách riêng của bạn

Có nhiều cách để xây dựng trên nền tảng này được cung cấp trong hướng dẫn này nhằm tạo ra các kiến trúc ML/AI có hiệu suất, có thể mở rộng và phù hợp với tương lai. Bạn có hai khối xây dựng mã nguồn mở và tiên tiến trong kho vũ khí của mình – bộ lưu trữ đối tượng MinIO và cơ sở dữ liệu vectơ LanceDB – hãy coi đây là tấm vé chiến thắng của bạn tới ML/AI giải đấu .


Đừng dừng lại ở đây. LanceDB cung cấp một loạt các công thức nấu ăn và hướng dẫn để mở rộng những gì bạn đã xây dựng trong hướng dẫn này, bao gồm khóa học Udacity được công bố gần đây về Xây dựng các giải pháp AI sáng tạo với cơ sở dữ liệu vectơ . Điều đặc biệt quan tâm là cái này công thức để trò chuyện với tài liệu của bạn. Tất cả chúng tôi đều mong muốn phá bỏ các rào cản để tận dụng tối đa dữ liệu của bạn.


Vui lòng cho chúng tôi xem những gì bạn đang xây dựng và nếu bạn cần hướng dẫn cho nhiệm vụ cao cả của mình, đừng ngần ngại gửi email cho chúng tôi theo địa chỉ [email protected] hoặc tham gia bàn tròn của chúng tôi trên Chập chờn .