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

你以为部署向量模型必须用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 · 模型库

相关推荐
100个铜锣烧4 小时前
高级提示技术:Chain-of-Thought与ReAct——让大模型学会“思考”和“行动”
人工智能·大模型·提示词工程
JackHCC5 小时前
快手OneRetrieval:可编辑生成式电商召回
人工智能·机器学习
前端之虎陈随易5 小时前
编程语言级别的Skill市场,AI Agent 的未来形态
前端·vue.js·人工智能·typescript·node.js
码事漫谈5 小时前
别写Prompt了,现在流行给AI“写循环”
后端
QiLinkOS5 小时前
第三视觉理解徐玉生与他的商业活动(30)
大数据·c++·人工智能·算法·开源协议
武汉唯众智创5 小时前
当汉字成为心理CT:AI汉字联想投射分析的技术实现与心理评估价值
人工智能·ai心理健康·ai心理评估·本土化心理测评·校园心理健康解决方案·ai心理监测·多模态情绪模型
Longvox5 小时前
Agent为什么会死循环?
人工智能·ai编程
陈天伟教授6 小时前
FreeCAD 启动后小窗口闪现即退的解决思路
人工智能·机器人·工业设计
Kyrie_Li6 小时前
Spring Boot Kafka 生产级配置全解析:从入门到精通
spring boot·后端·kafka
酒旅Agent开发实战6 小时前
AI 旅行规划助手如何接入真实酒旅数据:从自然语言到酒店预订的全流程 MCP 实战
人工智能·ai·旅游·skill·酒店api·机票api