jina-embeddings-v5-omni-small
📋 模型信息
| 属性 | 值 |
|---|
| 模型名称 | jina-embeddings-v5-omni-small |
| 模型架构 | Qwen3VL-0.8B (text) + Qwen3_VisionTransformer (vision) + Qwen2.5-Omni AudioEncoder (audio) |
| 任务类型 | Multi-modal Embedding (text + vision + audio) |
| 权重格式 | safetensors (单文件,约 3.1 GB) |
| 模型大小 | 1124 个张量,约 0.8B 参数 |
| 推理框架 | vLLM 0.18.0 + vLLM-Ascend |
| NPU 平台 | Ascend 910B (65 GB HBM) |
| Python | 3.11.14 |
| PyTorch | 2.x + torch_npu |
| 模型来源 | ModelScope: jinaai/jina-embeddings-v5-omni-small |
| License | MIT |
支持任务
| 任务 | LoRA 适配器 | 说明 |
|---|
retrieval | adapters/retrieval/ | 语义检索 |
text_matching | adapters/text_matching/ | 文本匹配 |
clustering | adapters/clustering/ | 文本聚类 |
classification | adapters/classification/ | 文本分类 |
🚀 快速开始
1. 环境准备
# 依赖安装
pip install vllm==0.18.0
pip install vllm-ascend
pip install modelscope
2. 下载模型
from modelscope import snapshot_download
model_path = snapshot_download(
'jinaai/jina-embeddings-v5-omni-small',
cache_dir='/opt/atomgit/.cache/modelscope',
)
print(f"Model downloaded to: {model_path}")
或使用 CLI:
modelscope download --model jinaai/jina-embeddings-v5-omni-small \
--local_dir /opt/atomgit/.cache/modelscope/jinaai/jina-embeddings-v5-omni-small
3. 启动 vLLM-Ascend 服务
JINA_V5_TASK=retrieval vllm serve /path/to/jina-embeddings-v5-omni-small \
--task embedding \
--trust-remote-code \
--dtype bfloat16 \
--max-model-len 32768 \
--port 8000
4. 调用嵌入
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="EMPTY",
)
# 文本嵌入
resp = client.embeddings.create(
model="/path/to/jina-embeddings-v5-omni-small",
input="Your text here",
)
embedding = resp.data[0].embedding
print(f"Dimension: {len(embedding)}")
# 指定任务 (通过 header)
resp = client.embeddings.create(
model="/path/to/jina-embeddings-v5-omni-small",
input="Search query",
extra_headers={"X-Jina-Task": "retrieval"},
)
5. Python 直接调用
from vllm import LLM
llm = LLM(
model="/path/to/jina-embeddings-v5-omni-small",
task="embedding",
trust_remote_code=True,
dtype="bfloat16",
max_model_len=32768,
hf_overrides={"task": "retrieval"},
)
out = llm.embed(["Your text here"])
print(out[0].outputs.embedding[:16])
🏗 模型架构
jina-embeddings-v5-omni-small
└─ JinaEmbeddingsV5OmniModel (PEFT + LoRA adapter)
└─ Qwen3VLAudioForEmbedding
├─ Qwen3 Language Model (text backbone)
├─ Qwen3VL VisionTransformer (vision encoder)
└─ Qwen2.5-Omni AudioEncoder (audio encoder)
关键特性:
- Matryoshka 表示学习(MRL):支持多维度嵌入输出
- PEFT LoRA:每任务独立 LoRA 适配器,在线合并到基座
- Trust Remote Code:模型自带
vllm_jina_v5_omni.py 完整 vLLM 适配,无需额外开发
适配方案
| 适配维度 | 方案 | 复杂度 |
|---|
| vLLM 模型注册 | trust_remote_code=True 自动触发自注册 | 🟢 零代码 |
| Ascend NPU 后端 | vLLM-Ascend 原生支持 Qwen3VL | 🟢 零代码 |
| 权重下载 | ModelScope + 本地路径传入 | 🟢 零代码 |
| LoRA 在线合并 | 模型自带 load_weights 实现 | 🟢 零代码 |
| Matryoshka 维度 | 通过 config 自动控制 | 🟢 零代码 |
📊 精度对比 (NPU vs CPU/GPU)
方法论
| 指标 | 方法 | 目标 |
|---|
| 余弦相似度 | NPU 输出 vs CPU 输出的向量余弦相似度 | ≥ 0.99 |
| 最大相对误差 | NPU 与 CPU 逐元素最大相对误差 | < 1% |
| Matryoshka 各维度 | 在每个 MRL 维度分别计算上述指标 | 全部达标 |
测试数据集
| 数据类型 | 示例 | 数量 |
|---|
| 英文文本 | "The capital of France is Paris" | 5 对语义近似对 + 5 个独立查询 |
| 中文文本 | "机器学习需要大量数据和计算资源" | 3 个独立查询 |
| 中英混合 | "AI technology is changing the world 人工智能正改变世界" | 2 个查询 |
精度结果
⏳ 精度数据待补充 — 需要 model.safetensors (~3.1 GB) 下载完成后运行 python3 precision_eval.py 生成。
| Matryoshka 维度 | 余弦相似度 (NPU vs CPU) | 最大相对误差 % | 判定 |
|---|
| 64 | ⏳ 待测 | ⏳ 待测 | ⏳ |
| 128 | ⏳ 待测 | ⏳ 待测 | ⏳ |
| 256 | ⏳ 待测 | ⏳ 待测 | ⏳ |
| 512 | ⏳ 待测 | ⏳ 待测 | ⏳ |
| 1024 | ⏳ 待测 | ⏳ 待测 | ⏳ |
精度验证脚本:
python3 precision_eval.py
# 输出: precision_results.json
端到端评估框架:
python3 evaluation_framework.py
# 输出: eval_results.json (含精度 + 多任务验证)
⚡ 性能基准
测试环境
| 组件 | 配置 |
|---|
| NPU | 2 × Ascend 910B (每卡 65 GB HBM) |
| CPU | Intel Xeon Platinum |
| vLLM | 0.18.0 |
| vLLM-Ascend | 最新版 |
| 数据类型 | bfloat16 |
| 批处理大小 | 1 (动态) |
| 最大序列长度 | 8192 |
⏳ 性能数据待补充 — 运行 python3 perf_test.py 生成
| 序列长度 | 每秒查询量(QPS) | 平均延迟(毫秒) | 50%分位延迟(毫秒) | 95%分位延迟(毫秒) |
|---|
| 32 | ⏳ | ⏳ | ⏳ | ⏳ |
| 64 | ⏳ | ⏳ | ⏳ | ⏳ |
| 128 | ⏳ | ⏳ | ⏳ | ⏳ |
| 256 | ⏳ | ⏳ | ⏳ | ⏳ |
| 512 | ⏳ | ⏳ | ⏳ | ⏳ |
| 1024 | ⏳ | ⏳ | ⏳ | ⏳ |
🔬 适配分析
架构兼容性
| 检查项 | 状态 | 说明 |
|---|
| vLLM 模型注册表 | ✅ | 通过 trust_remote_code 自注册 |
| Ascend FlashAttention | ✅ | vLLM-Ascend 通用后端 |
| Embedding 任务 | ✅ | vLLM --task embedding 原生支持 |
| 多模态视觉 | ✅ | Qwen3VL 在 Ascend 上已验证 |
| 多模态音频 | ⏳ | 需单独验证音频编码器 |
| PEFT LoRA 合并 | ✅ | 模型自带在线合并逻辑 |
模型适配结论
适配复杂度: 🟢 零代码改动
模型架构: Qwen3VLAudioForEmbedding (vLLM)
适配方式: trust_remote_code 自注册 + 本地 ModelScope 路径
Ascend 运行: vLLM-Ascend 通用后端子图替换 (AscendFlashAttention)
原始来源: ModelScope (jinaai/jina-embeddings-v5-omni-small)
📁 项目文件
| 文件 | 说明 |
|---|
README.md | 本文件 |
precision_eval.py | NPU 与 CPU 精度对比脚本 |
evaluation_framework.py | 端到端评估框架 |
perf_test.py | 性能基准测试脚本 |
adaptation-report_jina-embeddings-v5-omni-small.md | 详细适配分析报告 |
📚 参考