本地嵌入模型 BGE 部署 + 向量数据库 Milvus 配置教程

BGE 本地部署 + Milvus 向量数据库配置教程

一、环境准备
  1. 硬件要求

    • GPU:推荐 NVIDIA Tesla T4 或更高(显存 ≥ 8GB)
    • RAM:≥ 16GB
    • 存储:≥ 50GB SSD
  2. 软件依赖

    # 安装 Python 环境
    conda create -n bge_milvus python=3.9
    conda activate bge_milvus
    
    # 安装核心库
    pip install torch transformers sentence-transformers pymilvus
    


二、BGE 模型部署
  1. 下载模型
    使用 Hugging Face 的 BAAI/bge-base-en 模型:

    from sentence_transformers import SentenceTransformer
    model = SentenceTransformer('BAAI/bge-base-en')
    

  2. 生成向量

    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 配置
  1. 启动 Milvus 服务

    # 使用 Docker 启动
    docker run -d --name milvus \
      -p 19530:19530 -p 9091:9091 \
      milvusdb/milvus:v2.3.0
    

  2. 创建集合

    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)
    

  3. 插入数据

    data = [
      [1, 2],  # ID 列表
      ["Milvus is a vector database", "BGE is an embedding model"],  # 文本
      embeddings.tolist()  # 向量
    ]
    collection.insert(data)
    collection.flush()  # 确保数据持久化
    


四、向量搜索
  1. 创建索引

    index_params = {
      "metric_type": "L2",
      "index_type": "IVF_FLAT",
      "params": {"nlist": 128}
    }
    collection.create_index(field_name="vector", index_params=index_params)
    

  2. 执行查询

    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')}")
    


五、常见问题
  1. GPU 内存不足

    • model.encode() 中添加 device='cpu' 参数
    • 使用量化模型:BAAI/bge-base-en-v1.5-quantized
  2. Milvus 连接失败

    • 检查防火墙:sudo ufw allow 19530/tcp
    • 验证服务状态:docker logs milvus
  3. 性能优化

    • 调整索引参数:nlist 值越大精度越高但速度越慢
    • 批量插入数据:每次插入 ≥ 1000 条向量

提示:完整代码参考 BGE-Milvus Demo

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值