BGE 本地部署 + Milvus 向量数据库配置教程
一、环境准备
-
硬件要求
- GPU:推荐 NVIDIA Tesla T4 或更高(显存 ≥ 8GB)
- RAM:≥ 16GB
- 存储:≥ 50GB SSD
-
软件依赖
# 安装 Python 环境 conda create -n bge_milvus python=3.9 conda activate bge_milvus # 安装核心库 pip install torch transformers sentence-transformers pymilvus
二、BGE 模型部署
-
下载模型
使用 Hugging Face 的BAAI/bge-base-en模型:from sentence_transformers import SentenceTransformer model = SentenceTransformer('BAAI/bge-base-en') -
生成向量
sentences = ["Milvus is a vector database", "BGE is an embedding model"] embeddings = model.encode(sentences, normalize_embeddings=True) print(f"向量维度: {embeddings.shape}") # 输出: (2, 768)
三、Milvus 配置
-
启动 Milvus 服务
# 使用 Docker 启动 docker run -d --name milvus \ -p 19530:19530 -p 9091:9091 \ milvusdb/milvus:v2.3.0 -
创建集合
from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection connections.connect(host='localhost', port='19530') # 定义字段 fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=512), FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=768) ] # 创建集合 schema = CollectionSchema(fields, description="BGE embeddings") collection = Collection("bge_demo", schema) -
插入数据
data = [ [1, 2], # ID 列表 ["Milvus is a vector database", "BGE is an embedding model"], # 文本 embeddings.tolist() # 向量 ] collection.insert(data) collection.flush() # 确保数据持久化
四、向量搜索
-
创建索引
index_params = { "metric_type": "L2", "index_type": "IVF_FLAT", "params": {"nlist": 128} } collection.create_index(field_name="vector", index_params=index_params) -
执行查询
query_text = "What is Milvus?" query_embedding = model.encode([query_text], normalize_embeddings=True)[0].tolist() search_params = {"metric_type": "L2", "params": {"nprobe": 10}} results = collection.search( data=[query_embedding], anns_field="vector", param=search_params, limit=3, output_fields=["text"] ) for hit in results[0]: print(f"相似度: {hit.distance:.4f}, 文本: {hit.entity.get('text')}")
五、常见问题
-
GPU 内存不足
- 在
model.encode()中添加device='cpu'参数 - 使用量化模型:
BAAI/bge-base-en-v1.5-quantized
- 在
-
Milvus 连接失败
- 检查防火墙:
sudo ufw allow 19530/tcp - 验证服务状态:
docker logs milvus
- 检查防火墙:
-
性能优化
- 调整索引参数:
nlist值越大精度越高但速度越慢 - 批量插入数据:每次插入 ≥ 1000 条向量
- 调整索引参数:
提示:完整代码参考 BGE-Milvus Demo
2171

被折叠的 条评论
为什么被折叠?



