jina-embeddings-v5-text-small 是 Jina AI 推出的多语言文本向量模型。
| 仓 | 任务 | 典型用途 |
|---|---|---|
jina-embeddings-v5-text-small-retrieval | 检索 | RAG 召回、语义搜索(query/document) |
jina-embeddings-v5-text-small-text-matching | 文本匹配 | 释义识别、去重、问答匹配 |
jina-embeddings-v5-text-small-classification | 分类 | 文本归类、意图识别 |
jina-embeddings-v5-text-small-clustering | 聚类 | 话题聚类、相似文档分组 |
4 个仓共用同一份部署脚本 deploy.sh 和 serve 代码,只是 model_key / 模型目录 / 端口不同。
| 项 | 值 |
|---|---|
| 模型名 | jina-embeddings-v5-text-small-{retrieval / text-matching / classification / clustering} |
| 提供方 | Jina AI |
| 类型 | Embedding(文本向量化) |
| 底座 | Qwen3Model(LoRA adapter 已 merge,无 auto_map、无 PEFT 运行时) |
| 输入 | 文本列表(可选 prompt_name: query / document) |
| 输出 | 1024 维 L2 归一化向量 |
| 单仓大小 | ~1.19 GB(model.safetensors),4 仓共 ~4.8 GB |
| 仓库 | jinaai/jina-embeddings-v5-text-small-<task>(ModelScope / HF) |
| 加载方式 | sentence-transformers(读 modules.json:Transformer → last-token Pooling → Normalize) |
| 组件 | 版本 / 说明 |
|---|---|
| OS | Linux aarch64 |
| NPU | 昇腾 Ascend 910B3(CANN 8.5.x) |
| Python | 3.11 |
| torch | 2.9.0 + torch_npu 2.9.0.post1(须与 CANN 匹配,不自动装) |
| transformers | 4.57.6 |
| sentence-transformers | 5.6.0(v5 独立仓必需,装它不动 transformers) |
| safetensors | 任意(脚本顶部 monkey-patch 强制 CPU 加载,防 NPU 加载权重 OOM) |
| 其他 pip | fastapi / uvicorn / pydantic / requests / modelscope |
deploy.sh的--check-env会自动装除 torch/torch_npu 外的所有缺失依赖,已装跳过。
/workspace/
├── deploy.sh 单文件部署脚本(自包含 serve 代码,6 模型通用)
└── models/jinaai/
├── jina-embeddings-v5-text-small-retrieval/ ~1.19 GB
├── jina-embeddings-v5-text-small-text-matching/ ~1.19 GB
├── jina-embeddings-v5-text-small-classification/ ~1.19 GB
└── jina-embeddings-v5-text-small-clustering/ ~1.19 GB
├── config.json
├── model.safetensors
├── modules.json
├── 1_Pooling/config.json
├── config_sentence_transformers.json
├── tokenizer.json
└── ...deploy.sh 一个脚本管 4 个模型部署,用 model_key 区分。
git clone https://atomgit.com/Ascend-SACT/jina-embeddings-v5-text-small-all.git
bash deploy.sh v5_retrieval --download --port 9010 --device-id 0| 步骤 | 内容 | 可跳过 |
|---|---|---|
| 1. 环境检查 | NPU 驱动 / CANN / Python 依赖(缺失自动 pip install) | --check-env 单独跑 |
| 2. 下载权重 | modelscope download 到默认目录或 --model-dir,已存在跳过 | --download 触发 |
| 3. 起服务 | 按 KIND 走 sentence-transformers 加载,safetensors CPU 补丁 + bfloat16,前台 exec | --no-serve 跳过 |
| 参数 | 说明 |
|---|---|
<model_key> | v5_retrieval / v5_text_matching / v5_classification / v5_clustering |
--port | 端口(默认 retrieval=9010 / text-matching=9011 / classification=9012 / clustering=9013) |
--device-id | NPU 卡号;不指定则自动挑 HBM<8GB 的空闲卡 |
--model-dir | 自定义权重目录 |
--download | 先下权重再起服务 |
--no-serve | 只下权重不起服务 |
| 场景 | 命令 |
|---|---|
| 首次冷启动(下权重+起服务) | ./deploy.sh v5_retrieval --download --port 9010 --device-id 0 |
| 权重已下,直接起 | ./deploy.sh v5_retrieval --port 9010 --device-id 0 |
| 只下权重 | ./deploy.sh v5_retrieval --download --no-serve |
| 自动挑卡 | ./deploy.sh v5_text_matching --port 9011 |
| 4 个同时常驻(不同卡+端口) | 4 条命令各指定不同 --device-id / --port 后台跑 |
# retrieval -> :9010 npu:0
nohup ./deploy.sh v5_retrieval --port 9010 --device-id 0 > v5_retrieval.log 2>&1 &
# text-matching -> :9011 npu:1
nohup ./deploy.sh v5_text_matching --port 9011 --device-id 1 > v5_text_matching.log 2>&1 &
# classification -> :9012 npu:2
nohup ./deploy.sh v5_classification --port 9012 --device-id 2 > v5_classification.log 2>&1 &
# clustering -> :9013 npu:3
nohup ./deploy.sh v5_clustering --port 9013 --device-id 3 > v5_clustering.log 2>&1 &[jina] Loading v5_retrieval (v5_st) from .../jina-embeddings-v5-text-small-retrieval on npu:0 ...
Model loaded on npu:0
Server: http://0.0.0.0:9010
Endpoints: /v1/embeddings /v1/embeddings/similarity /health启动时间 ~20-30s(1.19 GB 权重加载 + bfloat16 搬 NPU)。
| 端点 | 方法 | 说明 |
|---|---|---|
/v1/embeddings | POST | 返回向量(input/prompt_name/dimensions) |
/v1/embeddings/similarity | POST | 返回两两余弦相似度排序 |
/health | GET | 健康检查 |
/ | GET | 服务信息 + 端点列表 |
设
export PORT=9010(按各仓端口改)。4 个仓接口一致,下面按 task 各给一个典型样例。
curl -s http://localhost:${PORT}/health
# {"status":"ok","device":"npu:0","model_loaded":true,"model_id":".../jina-embeddings-v5-text-small-retrieval"}curl -s -X POST http://localhost:9010/v1/embeddings/similarity \
-H 'Content-Type: application/json' \
-d '{"input":[{"text":"如何办理护照延期"},{"text":"护照延期的流程"},{"text":"今天午饭吃什么"}]}'实测(query 对各 doc 余弦):「护照延期的流程」0.7157(强相关)/ 「今天午饭吃什么」-0.0166(无关)。 → retrieval 对无关项压到接近 0,适合 RAG 召回排序。
curl -s -X POST http://localhost:9011/v1/embeddings/similarity \
-H 'Content-Type: application/json' \
-d '{"input":[{"text":"猫坐在垫子上"},{"text":"一只猫趴在垫子"},{"text":"今天天气不错"}]}'实测:「一只猫趴在垫子」0.8177(同义)/ 「今天天气不错」0.2932(无关)。 → text-matching 把同义句拉到 0.82,适合去重 / 释义匹配。
curl -s -X POST http://localhost:9012/v1/embeddings/similarity \
-H 'Content-Type: application/json' \
-d '{"input":[{"text":"苹果发布新款iPhone"},{"text":"科技公司发布手机产品"},{"text":"今天午饭吃什么"}]}'实测:「科技公司发布手机产品」0.9709 / 「今天午饭吃什么」0.8007。 → classification 整体相似度偏高(把"科技/产品"类聚拢),适合文本归类;注意它不如 retrieval 区分无关项。
curl -s -X POST http://localhost:9013/v1/embeddings/similarity \
-H 'Content-Type: application/json' \
-d '{"input":[{"text":"北京上海广州深圳"},{"text":"中国的大城市"},{"text":"今天午饭吃什么"}]}'实测:「中国的大城市」0.8511(同类)/ 「今天午饭吃什么」0.5587(弱相关)。 → clustering 把同类话题聚到 0.85,适合话题分组。
--device-id 自动挑 HBM<8GB 的空闲卡,避开被占/泄漏的卡。--port 改;多实例共存必须不同端口。