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

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

相关推荐
Carsene2 小时前
Spring Boot 包扫描新姿势:AutoScan vs @Import vs @ComponentScan 深度对比
spring boot·后端
Gopher_HBo2 小时前
ReentrantReadWriteLock源码讲解
java·后端
TonyLee0172 小时前
对比实验Baselines记录
人工智能·深度学习·机器学习
这张生成的图像能检测吗2 小时前
(论文速读)HDNet:通过学习突出显示前景对象的低光显著目标检测
图像处理·人工智能·目标检测·计算机视觉·低照度
文浩AI2 小时前
Claude Code 创始人 Boris Cherny 的并行工作流最佳实践
后端
雾喔2 小时前
【学习笔记1】AI 基础概念:机器学习、深度学习、大语言模型的区别
人工智能·学习·机器学习
Baihai_IDP2 小时前
以 Nano-vLLM 为例,深入理解 LLM 推理引擎(Part 1)
人工智能·面试·llm
小布的学习手记2 小时前
深度学习里的“自动稳压器”:通俗解读批量规范化(Batch Normalization)
人工智能·深度学习·batch
Dai_Shoo_G2 小时前
claude-mem 简体中文模式:那个花了我两小时才发现的“隐藏功能“
人工智能·黑客