paint-brush
LanceDB: 데이터 복잡성과의 결투에서 신뢰할 수 있는 군마~에 의해@minio
25,852 판독값
25,852 판독값

LanceDB: 데이터 복잡성과의 결투에서 신뢰할 수 있는 군마

~에 의해 MinIO8m2024/02/01
Read on Terminal Reader
Read this story w/o Javascript

너무 오래; 읽다

MinIO 및 LanceDB를 사용하여 성능이 뛰어나고 확장 가능하며 미래 지향적인 ML/AI 아키텍처를 생성하기 위해 이 튜토리얼에서 제공하는 기반을 구축하는 방법은 다양합니다.

People Mentioned

Mention Thumbnail
featured image - LanceDB: 데이터 복잡성과의 결투에서 신뢰할 수 있는 군마
MinIO HackerNoon profile picture
0-item
1-item

오픈 소스 열 형식 데이터 형식인 Lance를 기반으로 구축된 LanceDB는 AI/ML에 매력적인 몇 가지 흥미로운 기능을 갖추고 있습니다. 예를 들어 LanceDB는 다양한 데이터 유형을 처리하는 기능을 통해 명시적 및 암시적 벡터화를 지원합니다. LanceDB는 다음과 같은 주요 ML 프레임워크와 통합됩니다. 파이토치 그리고 텐서플로우 . Cooler는 가장 가까운 이웃 알고리즘을 사용하여 유사한 벡터를 효율적으로 검색할 수 있는 LanceDB의 빠른 이웃 검색입니다. 이 모든 것이 결합되어 빠르고 사용하기 쉬우며 매우 가벼워서 어디에나 배포할 수 있는 벡터 데이터베이스를 생성합니다.


LanceDB는 S3 호환 객체 스토리지의 데이터를 쿼리할 수 있습니다. 이 조합은 고성능의 확장 가능한 클라우드 기반 ML 데이터 저장 및 검색 시스템을 구축하는 데 최적입니다. MinIO는 다양한 하드웨어, 위치 및 클라우드 환경 전반에 걸쳐 성능과 비교할 수 없는 유연성을 제공하므로 이러한 배포를 위한 자연스러운 선택입니다.


이 튜토리얼을 마치면 LanceDB와 MinIO를 사용하여 모든 데이터 문제를 해결할 준비가 됩니다.

랜스는 무엇입니까?

그만큼 파일 형식은 ML 워크플로 및 데이터 세트에 최적화된 열 형식의 데이터 형식입니다. 쉽고 빠르게 버전화, 쿼리, 교육용으로 사용할 수 있도록 설계되었으며, 이미지, 비디오, 3D 포인트 클라우드, 오디오, 표 형식 데이터 등 다양한 데이터 유형에 적합합니다. 또한 고성능 랜덤 액세스를 지원합니다.Lance 보고 벤치마크 쿼리에서 Parquet보다 100배 빠릅니다. Lance의 속도는 부분적으로 Rust에서 구현된 결과이며, 제로 카피 버전 관리 및 최적화된 벡터 작업과 같은 기능을 포함하는 클라우드 네이티브 디자인입니다.


그 중 하나 주요 특징들 벡터 검색을 수행하여 사용자가 찾을 수 있는 기능입니다. 가장 가까운 이웃 1밀리초 이내에 OLAP 쿼리와 벡터 검색을 결합합니다. Lance 형식을 위한 다른 프로덕션 애플리케이션에는 ML 애플리케이션을 위한 에지 배포 저지연 벡터 데이터베이스, 자율 주행 자동차 회사의 다중 모드 데이터의 대규모 저장, 검색 및 처리, e의 10억 규모 이상의 벡터 개인화 검색이 포함됩니다. - 상업 회사. Lance 파일 형식의 매력 중 하나는 Pandas, 덕DB , 극좌표 및 파이로우 . LanceDB를 사용하지 않더라도 데이터 스택에서 Lance 파일 형식을 활용할 수 있습니다.

AI 및 기계 학습을 위해 구축됨

LanceDB와 같은 벡터 데이터베이스는 효율적인 덕분에 AI 및 기계 학습 애플리케이션에 뚜렷한 이점을 제공합니다. 분리된 스토리지 아키텍처를 계산하고 데이터의 고차원 벡터 표현을 검색합니다. 다음은 몇 가지 주요 사용 사례입니다.


자연어 처리(NLP):


의미 검색: 키워드뿐만 아니라 의미를 기반으로 쿼리와 유사한 문서나 구절을 찾습니다. 이는 챗봇 응답, 개인화된 콘텐츠 추천 및 지식 검색 시스템을 강화합니다.


질문 답변: 의미론적 유사성을 기반으로 관련 텍스트 구절을 찾아 복잡한 질문을 이해하고 답변합니다.


주제 모델링: 대규모 텍스트 컬렉션에서 숨겨진 주제를 발견하여 문서 클러스터링 및 추세 분석에 유용합니다.


컴퓨터 시각 인식:


이미지 및 비디오 검색: 콘텐츠 기반 이미지 검색, 제품 검색 및 비디오 분석에 중요한 시각적 콘텐츠를 기반으로 유사한 이미지 또는 비디오를 검색합니다.


객체 감지 및 분류: 유사한 훈련 데이터를 효율적으로 검색하여 객체 감지 및 분류 모델의 정확성을 향상시킵니다.


영상 추천 : 이전에 시청한 영상의 시각적 내용을 바탕으로 유사한 영상을 추천합니다.


시중에 나와 있는 수많은 벡터 데이터베이스 중에서 LanceDB는 S3 호환 스토리지에 대한 쿼리를 지원하므로 AI 및 기계 학습에 특히 적합합니다. 귀하의 데이터는 어디에나 있으므로 데이터베이스도 어디에나 있어야 합니다.

성공을 위한 설계

LanceDB와 함께 MinIO를 사용하면 다음과 같은 여러 가지 이점을 얻을 수 있습니다.


  • 확장성 및 성능 : MinIO의 클라우드 네이티브 디자인은 확장성과 고성능 저장 및 검색을 위해 제작되었습니다. MinIO의 확장성과 성능을 활용함으로써 LanceDB는 대량의 데이터를 효율적으로 처리할 수 있으므로 최신 ML 워크로드에 매우 적합합니다.


  • 고가용성 및 내결함성 : MinIO는 가용성이 높고 불변적이며 내구성이 뛰어납니다. 이를 통해 MinIO에 저장된 데이터가 하드웨어 오류로부터 보호되고 LanceDB와 같은 데이터 집약적인 애플리케이션에 중요한 고가용성 및 내결함성을 제공합니다.


  • 활성-활성 복제 : 다중 사이트, 활성-활성 복제를 통해 여러 MinIO 배포 간에 거의 동기식으로 데이터를 복제할 수 있습니다. 이 강력한 프로세스는 높은 내구성과 중복성을 보장하므로 업무상 중요한 생산 환경에서 데이터를 보호하는 데 이상적입니다.


MinIO와 LanceDB의 조합은 대규모 ML 데이터세트를 관리하고 분석하기 위한 고성능 확장형 클라우드 네이티브 솔루션을 제공합니다.

요구사항

이 튜토리얼을 따라하려면 다음을 사용해야 합니다. 도커 작성 . Docker Desktop을 사용하여 Docker Engine 및 Docker Compose 바이너리를 별도로 설치하거나 함께 설치할 수 있습니다. 가장 간단한 옵션은 Docker Desktop을 설치하는 것입니다.


다음 명령을 실행하여 Docker Compose가 설치되었는지 확인합니다.


 docker compose version


Python도 설치해야 합니다. Python은 다음에서 다운로드할 수 있습니다. 여기 . 설치하는 동안 시스템의 PATH에 Python을 추가하는 옵션을 확인하십시오.


선택적으로 가상 환경을 생성하도록 선택할 수 있습니다. 종속성을 격리하기 위해 가상 환경을 만드는 것이 좋습니다. 이렇게 하려면 터미널을 열고 다음을 실행하세요.


 python -m venv venv


가상 환경을 활성화하려면:


Windows의 경우:

 .\venv\Scripts\activate


macOS/Linux의 경우:

 source venv/bin/activate

시작하기

다음에서 프로젝트를 복제하여 시작하세요. 여기 . 완료되면 터미널 창에서 파일을 다운로드한 폴더로 이동하여 다음을 실행합니다.


 docker-compose up minio


그러면 MinIO 컨테이너가 시작됩니다. '로 이동할 수 있습니다. http://172.20.0.2:9001 ' MinIO 콘솔을 살펴보세요.


MinIO 콘솔


사용자 이름과 비밀번호 minioadmin:minioadmin 으로 로그인하세요.


그런 다음, 다음 명령을 실행하여 lance 라는 MinIO 버킷을 생성합니다.


 docker compose up mc 


MinIO 버킷


이 명령은 일련의 작업을 수행합니다. MinIO 클라이언트 (mc) 쉘 내의 명령입니다.


각 명령에 대한 분석은 다음과 같습니다.


(/usr/bin/mc config 호스트 add minio http://minio:9000 minioadmin minioadmin) do echo '...waiting...' && sleep 1; done ;: 이 명령은 성공할 때까지 지정된 매개변수(엔드포인트, 액세스 키 및 비밀 키)를 사용하여 minio 라는 MinIO 호스트 구성을 반복적으로 시도합니다. 시도할 때마다 대기 메시지가 표시되고 1초 동안 일시 중지됩니다.


/usr/bin/mc rm -r --force minio/lance;: 이 명령은 MinIO의 lance 버킷 내의 모든 콘텐츠를 강제로 제거(삭제)합니다.


/usr/bin/mc mb 미니오/랜스; : 이 명령은 MinIO에 lance 라는 새 버킷을 생성합니다.


/usr/bin/mc 정책은 공개 미니오/랜스를 설정합니다. : 이 명령은 lance 버킷의 정책을 공개로 설정하여 공개 읽기 액세스를 허용합니다.


0번 출구; : 이 명령은 성공적인 실행을 나타내는 상태 코드 0으로 스크립트가 종료되도록 합니다.

랜스DB

안타깝게도 LanceDB에는 기본 S3 지원이 없으므로 사용자가 만든 MinIO 컨테이너에 연결하려면 boto3과 같은 것을 사용해야 합니다. LanceDB가 성숙해짐에 따라 우리는 사용자 경험을 더욱 향상시킬 기본 S3 지원을 기대합니다.


아래 샘플 스크립트를 사용하면 시작할 수 있습니다.


pip를 사용하여 필수 패키지를 설치합니다. 다음 내용을 포함하는 요구 사항.txt라는 파일을 만듭니다.


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


그런 다음 다음 명령을 실행하여 패키지를 설치합니다.


 pip install -r requirements.txt


MinIO 컨테이너를 생성하는 방법이 위에 설명된 방법과 다른 경우 자격 증명을 변경해야 합니다.


아래 스크립트를 파일(예: 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()


이 스크립트는 무작위로 생성된 데이터에서 Lance 테이블을 생성하고 이를 MinIO 버킷에 추가합니다. 다시 말하지만, 이전 섹션의 방법을 사용하여 버킷을 생성하지 않는 경우 스크립트를 실행하기 전에 이를 수행해야 합니다. MinIO 버킷의 이름과 일치하도록 위의 샘플 스크립트를 변경해야 합니다.


마지막으로 스크립트는 테이블을 MinIO 밖으로 이동하지 않고 열고 Pandas를 사용하여 검색을 수행하고 결과를 인쇄합니다.


스크립트 결과는 아래 결과와 유사해야 합니다. 데이터 자체는 매번 무작위로 생성된다는 점을 기억하세요.


 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


스스로 확장하세요

이 튜토리얼에서 제공하는 기반을 기반으로 성능이 뛰어나고 확장 가능하며 미래 지향적인 ML/AI 아키텍처를 생성하는 방법은 다양합니다. 귀하의 무기고에는 MinIO 객체 스토리지와 LanceDB 벡터 데이터베이스라는 두 가지 최첨단 오픈 소스 빌딩 블록이 있습니다. 이를 ML/AI에 대한 승리 티켓으로 간주하십시오. 토너먼트 .


여기서 멈추지 마세요. LanceDB는 다양한 기능을 제공합니다. 요리법 최근 발표된 Udacity 과정을 포함하여 이 튜토리얼에서 구축한 내용을 확장하는 튜토리얼 벡터 데이터베이스를 사용하여 생성적 AI 솔루션 구축 . 특히 흥미로운 것은 이것 문서와 채팅하는 방법. 우리 모두는 귀하의 데이터를 최대한 활용하는 데 방해가 되는 장벽을 허물기 위해 노력하고 있습니다.


당신이 무엇을 만들고 있는지 보여주세요. 당신의 고귀한 탐구에 대한 지침이 필요하다면 주저하지 말고 [email protected]로 이메일을 보내거나 라운드 테이블에 참여하세요. 슬랙 .