티스토리 뷰

카테고리 없음

별첨 #4-1. Milvus란?

미니대왕님 2025. 12. 21. 20:26

별첨 #1 KoSimCSE란?

별첨 #2. Chunking 청킹이란...

별첨 #3. n8n 완전 정복 가이드

별첨 #4. Chroma DB 완전 가이드

별첨 #4-1. Milvus란? 

별첨 #5. RAG란? 

별첨 #6. LangChain이란?

별첨 #7. MCP 서버 탑재

별첨 #8. Embedding)이란?

별첨 #9. LLaMA란

별첨 #10. kiwipiepy(키위파이파이)

별첨 #11. Poetry란?

🧠 Milvus란?

Milvus는 **벡터 데이터베이스(Vector DB)**로,
대규모 임베딩 데이터(문서, 이미지 등)를 저장하고 유사도 기반 검색을 빠르게 수행할 수 있는 오픈소스 DB입니다.

특징설명
특징 설명
제작사 Zilliz (Faiss 만든 Facebook 출신들이 창업)
성능 수억 개 벡터를 빠르게 검색 (GPU 지원 가능)
사용 예 RAG 시스템, 이미지 검색, 추천 시스템 등
LLM 연동 LangChain, LlamaIndex 등과 완벽 호환

✅ 1. Milvus 설치 방법

🔹 권장 설치 방식: Docker (로컬 테스트 & 개발용)

✅ 1-1. Docker 설치 (이미 되어 있다면 건너뛰세요)

✅ 1-2. Milvus Standalone 설치

docker run -d --name milvus \
  -p 19530:19530 \
  -p 9091:9091 \
  milvusdb/milvus:v2.3.0
 
 
포트설명
포트 설명
19530 gRPC API
9091 HTTP REST API

설치가 완료되면 Milvus가 백그라운드에서 실행됩니다.

🔍 Milvus 상태 확인

docker ps


# 또는 Python에서 연결 확인:

from pymilvus import connections

connections.connect(host='localhost', port='19530')
print("Milvus 연결 성공")

# 파이썬 클라이 언트 설치 

pip install pymilvus
 
 

✅ 2. Python 클라이언트 설치

 
 

pymilvus는 Milvus와 통신할 수 있는 Python SDK입니다.

✅ 3. Milvus 사용법 (기본)

🔹 3-1. 벡터 컬렉션 생성

from pymilvus import connections, Collection, CollectionSchema, FieldSchema, DataType

connections.connect(host='localhost', port='19530')

# 필드 정의 (벡터 + ID + 메타데이터)
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128)
]

schema = CollectionSchema(fields, description="예제 컬렉션")
collection = Collection(name="example_collection", schema=schema)
 
 

🔹 3-2. 벡터 데이터 추가

import numpy as np

data = [
    [np.random.rand(128).astype("float32") for _ in range(10)]
]

collection.insert(data)
collection.load()  # 검색 전에 반드시 load()
 
 

🔹 3-3. 검색 (유사 벡터 찾기)

 
query_vector = [[float(i) for i in np.random.rand(128)]]

results = collection.search(
    data=query_vector,
    anns_field="embedding",
    param={"metric_type": "L2", "params": {"nprobe": 10}},
    limit=3
)

for hit in results[0]:
    print(f"Score: {hit.distance}, ID: {hit.id}")

✅ 4. LangChain과 Milvus 연동 (RAG 구축)

 
 
pip install langchain sentence-transformers

🔹 4-1. 임베딩 모델 준비

from langchain.embeddings import HuggingFaceEmbeddings

embedding = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
 
 

🔹 4-2. Milvus 벡터스토어에 문서 저장

from langchain.vectorstores import Milvus

texts = [
    "서울은 대한민국의 수도입니다.",
    "OpenAI는 인공지능 연구 회사입니다.",
    "GPT-4는 대형 언어 모델입니다."
]

db = Milvus.from_texts(
    texts=texts,
    embedding=embedding,
    collection_name="langchain_docs",
    connection_args={"host": "localhost", "port": "19530"}
)
 
 

🔹 4-3. 검색 + GPT 응답 생성

from langchain.vectorstores import Milvus

texts = [
    "서울은 대한민국의 수도입니다.",
    "OpenAI는 인공지능 연구 회사입니다.",
    "GPT-4는 대형 언어 모델입니다."
]

db = Milvus.from_texts(
    texts=texts,
    embedding=embedding,
    collection_name="langchain_docs",
    connection_args={"host": "localhost", "port": "19530"}
)
 
 

✅ 5. Milvus 장점과 주의사항

항목내용
항목 내용
✅ 장점 초고속 검색, GPU 지원, 대용량 처리
⚠️ 단점 설치 복잡, 설정 많음 (인덱스, 파라미터 등)
✔️ 추천 10,000개 이상의 벡터 또는 서비스 운영 목적일 때
❌ 피해야 할 경우 단순 POC / 소규모 테스트 → Chroma, FAISS 추천

✅ 6. 실전 구축을 위한 설정 팁


 

요소 추천설정
metric_type "L2" 또는 "IP"
index_type IVF_FLAT, IVF_SQ8, HNSW (대용량에 적합)
nprobe 10~64 범위 조절
벡터 차원 384~1024 (임베딩 모델에 따라 다름)
검색 속도 GPU 사용 시 훨씬 빠름 (Milvus GPU 설치 필요)

✅ 마무리 : Milvus는 RAG 시스템, 벡터 검색, 추천 시스템의 최적의 벡터DB 중 하나입니다.

추가적인 사항 : Milvus + FastAPI 기반 RAG 서버 만든 내용 기록해서 블로그에 적어둘것!! 
                        Docker Compose 템플릿 만들어서 테스트 기록해둘것!

                        또는 Supabase + Milvus 통합 버전 생성해서 첨부로 티스토리 만들어 기록해둘것! 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함