如何手动部署一个向量模型服务

你以为部署向量模型必须用ollama吗?并且是必须有GPU时才能运行向量模型吗?

一开始我也是这么以为的。

其实不用,本篇来带大家手动运行一个向量模型接口服务。

我也是经过这次部署才知道,在没有GPU的情况下,对于向量模型这种小模型是可以直接在CPU上跑的,只是效率比较低而已。哎,笔者的笔记本电脑没有独立显卡。配置全堆到内存上了,有30GB内存。

根据实际体验,运行速度还凑合。

工具准备

魔搭社区,可以理解为中国大模型界的GitHub,有了它就可以很方便的下载模型了。

下载模型可以使用魔搭提供的命令行工具modelscope

执行命令之前,先为当前的操作创建一个专门的python虚拟环境,在虚拟环境中执行下列操作。

bash 复制代码
pip install modelscope

下载模型,可以观察到,下载还是很快的。

bash 复制代码
modelscope download --model BAAI/bge-large-zh-v1.5

完成以后,注意观察,Windows下通常有Failed to create symbolic link 的失败提示。

每次安装都必提示,既然提示了,我们就替它完成。

完整的提示如下:

plain 复制代码
2026-04-12 16:10:59,612 - modelscope - WARNING - Failed to create symbolic link C:\Users\xxx\.cache\modelscope\hub\models\BAAI\bge-large-zh-v1.5 for C:\Users\xxx\.cache\modelscope\hub\models\BAAI\bge-large-zh-v1___5.                    

所以,我们只需要按提示,完成文件夹的链接即可。

bash 复制代码
mklink /j "C:\Users\xxx\.cache\modelscope\hub\BAAI\bge-large-zh-v1.5" "C:\Users\xxx\.cache\modelscope\hub\models\BAAI\bge-large-zh-v1___5"

注意,执行时,目录bge-large-zh-v1.5不能存在,如果已经有了,需要手动删除一下。

创建模型服务

由于要启动服务监听接口,还需要加载模型执行计算。所以这里先安装一下环境依赖。

bash 复制代码
pip install fastapi uvicorn torch transformers modelscope sentence-transformers

创建python代码文件bge_api_server.py,写入代码如下:

py 复制代码
from fastapi import FastAPI
from pydantic import BaseModel
from modelscope import AutoModel, AutoTokenizer
import torch
import uuid

# ===================== 配置 =====================
MODEL_PATH = r"C:\Users\xxx\.cache\modelscope\hub\BAAI\bge-large-zh-v1.5"
HOST = "127.0.0.1"
PORT = 6100
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"

# ===================== 加载模型 =====================
app = FastAPI(title="bge-large-zh-v1.5 兼容阿里云格式API")
print(f"加载模型: {MODEL_PATH}")
print(f"使用设备: {DEVICE}")

tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
model = AutoModel.from_pretrained(MODEL_PATH).to(DEVICE)
model.eval()

# ===================== 请求体(必须和OpenAI/阿里云一致) =====================
class EmbeddingRequest(BaseModel):
    input: list[str] | str  # 支持 单个文本 / 文本列表
    model: str = "bge-large-zh-v1.5"

# ===================== 向量生成 =====================
def get_embeddings(texts: list[str]):
    texts = [t.replace("\n", " ") for t in texts]

    inputs = tokenizer(
        texts,
        max_length=512,
        truncation=True,
        padding=True,
        return_tensors="pt"
    ).to(DEVICE)

    with torch.no_grad():
        outputs = model(**inputs)

    # bge 官方标准向量
    embeddings = outputs.last_hidden_state[:, 0]
    embeddings = torch.nn.functional.normalize(embeddings, p=2, dim=1)
    return embeddings.cpu().numpy().tolist()

# ===================== 核心接口:完全兼容阿里云格式 =====================
@app.post("/embeddings")
async def embedding(req: EmbeddingRequest):
    # 统一转成列表
    if isinstance(req.input, str):
        texts = [req.input]
    else:
        texts = req.input

    vectors = get_embeddings(texts)

    data = []
    for i, vec in enumerate(vectors):
        data.append({
            "embedding": vec,
            "index": i,
            "object": "embedding"
        })

    return {
        "data": data,
        "model": "bge-large-zh-v1.5",
        "object": "list",
        "usage": {
            "prompt_tokens": 0,
            "total_tokens": 0
        },
        "id": str(uuid.uuid4())
    }

# ===================== 启动 =====================
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host=HOST, port=PORT)

然后就可以执行启动了,启动成功后,就能看到下面的提示,表示已经成功部署了。

plain 复制代码
INFO:     Started server process [6972]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:6100 (Press CTRL+C to quit)

总结

本篇只是一个极简单的示例,有了这个示例,rerank模型部署也是同理。因为它俩差不多。

理论上大模型也是可以这样部署的,这是理论上。实际上它会更复杂一些,比如引入了推理框架、服务框架等等。

参考

环境安装和模型下载:快速开始 · 文档中心

bge-large-zh-v1.5 · 模型库

相关推荐
ai小陈40 分钟前
PyTorch DataLoader数据加载性能排查:GPU利用率低的实操指南
人工智能·pytorch·python·深度学习·ai·gpu算力
测试者家园2 小时前
为什么意图驱动测试是自动化测试的下一站,而不是替代品
自动化测试·软件测试·人工智能·持续测试·ai赋能·智能化测试·软件测试变革
D202020203 小时前
TikTok Shop禁止AI语音直播落地后,跨境卖家如何通过达秘合规调整带货内容
人工智能
像风一样自由20204 小时前
20.Milvus常见问题检索不到维度错误和数据一致性
人工智能·大模型·milvus
现代野蛮人4 小时前
【深度学习实验】—— 基于 LSTM 与 Optuna 调参的丙型肝炎预测
人工智能·深度学习·lstm
支支დ4 小时前
VO by Vercel 前端特定优势:为什么它是构建 AI 应用的新范式
前端·人工智能
ZGIAI4 小时前
ZGI 让那些"等你去处理"的事,真正跑起来
人工智能·架构
ZGIAI4 小时前
ZGI:别再做Agent Demo了,先问问它在业务里能不能撑过下周三
人工智能·架构
香芋芋圆4 小时前
AI 冲击内卷之下,普通前端如何破局?WebGIS—— 低门槛突围赛道
前端·javascript·人工智能·学习·职场发展
m0_614523554 小时前
完整教程|输入一句描述,能不能直接生成一段可以继续剪辑的视频:写结构化描述到生成短样片
人工智能·音视频