时间: 2026-02-27 执行者: Ai.Res
搜索范围: sbert.net 官方文档、PyTorch 官方 blog、AMD ZenDNN/zentorch 文档、Hugging Face 博客
原理: PyTorch 2.x 引入的 JIT 编译,将模型计算图转为优化内核,减少 Python 开销和内存读写。
预期收益:
- Hugging Face 官方文档标注:CPU 上 +10~30%(具体取决于模型和硬件)
- PyTorch 官方 blog(AWS Graviton3,同为 ARM 服务器 CPU):embedding 模型 +1.7x(70%加速)
- 注意:Graviton3 有专门 torch.compile 优化路径,AMD EPYC 效果可能不同
针对 AMD EPYC 的特殊加速路径:zentorch
- AMD 官方 PyTorch 插件(zentorch),专为 EPYC Zen4/Zen5 架构优化
- 与 torch.compile 集成,提供图级别融合优化(matmul、embedding kernel)
- Hugging Face + AMD 联测:Genoa→Turin 跨代提升约 2x,zentorch 是主要推手
- RS1000(EPYC 9634 = Zen4)已在 zentorch 支持列表内
- 安装:pip install zentorch,与 torch.compile 无缝集成
使用方法:
import zentorch # 自动注册优化算子
model = SentenceTransformer("Qwen/Qwen3-Embedding-0.6B")
model = torch.compile(model, backend="zentorch") # 或 backend="inductor"
风险:
- 首次 compile 预热时间:分钟级(一次性开销)
- 虚拟机环境下 zentorch 效果可能低于裸金属(RS1000 是 4 vCPU 虚机)
- 需要实测验证
背景: 已测方案E 使用的是 optimum 命令行导出 + 手动 ONNX 推理,结论是慢。
新发现: sbert.net 官方文档描述的是 backend="onnx" 参数直接在 SentenceTransformer 里切换,优化器已内置,比手动导出更规范。
model = SentenceTransformer("Qwen/Qwen3-Embedding-0.6B", backend="onnx")
# 支持 model_kwargs={"provider": "CPUExecutionProvider"}
实测前景: 官方文档标注 CPU 上有提速潜力,但基于方案E 的失败经验(ONNX Runtime 在 AMD EPYC 上未充分利用 AVX-512),预期提速可能性较低,不建议优先尝试。
原理: 导出 ONNX 后用 optimum 做图优化(算子融合、冗余节点消除),比原始 ONNX 快。
from sentence_transformers.backend import export_optimized_onnx_model
export_optimized_onnx_model(model, "avx512", model_name_or_path, onnx_model_name="model_avx512")
# 支持 "avx2", "avx512", "avx512_vnni" 配置
官方数据: 各量化配置(arm64/avx2/avx512/avx512_vnni)在 CPU 上结果"大致相当"的提速,具体数字未公布。
判断: 基于方案E 底线数据(ONNX INT8 仅 13.3 条/秒),优化后可能提到 15-16 条/秒,但仍可能低于当前 17.3 条/秒的 PyTorch 路径。风险高,收益不确定。
原理: 对相同/相似的查询缓存 embedding 结果,跳过推理计算。
适用场景:
- 爱衣的记忆搜索场景:查询频繁重复(例如固定时段的关键词)→ 缓存命中率高
- 新增 session 建索引:每条只算一次,不需要重复计算 → 天然无重复
实现方案:
from functools import lru_cache
import hashlib
@lru_cache(maxsize=1000)
def cached_embed(text_hash):
return model.encode([text])
def embed_with_cache(text):
h = hashlib.md5(text.encode()).hexdigest()
return cached_embed(h)
收益估算: 若查询重复率 20%,每秒等效吞吐 +20%(无额外硬件需求)。
可行性: ❌ 不适用本场景
- FlashAttention 是 GPU 专属优化,CPU 无对应实现
- RS1000 无 GPU,排除
可行性: ⚠️ 高风险,收益不确定
- GPTQ/AWQ 专为 GPU 设计,CPU 推理用 bitsandbytes INT4 可行但性能差
- 本地无 GPU,量化通常不会在 CPU 上带来加速(内存节省有限,计算路径反而复杂)
- 方案E(INT8)已验证 CPU 量化路径不划算,INT4 更差
可行性: ❌ 工程成本极高,不适合当前场景
- 蒸馏需要重新训练,维护成本高
- 0.6B 已是 Qwen3-Embedding 最小尺寸,Qwen 团队无更小版本
- 若真要更快更小,换 BGE-M3 或 bge-small(但质量下降)
| 方案 | 预期收益 | 难度 | 推荐度 |
|---|---|---|---|
| torch.compile + zentorch | +10~30%(文献),实测待确认 | 低(2行代码) | ⭐⭐⭐⭐⭐ 强推 |
| 向量缓存 | 视重复率,+10~50% | 低 | ⭐⭐⭐⭐ |
| sbert ONNX backend | 不确定(可能无效) | 低 | ⭐⭐ 保守 |
| Optimum ONNX 图优化 | 可能 +5~15%,但起点低 | 中 | ⭐⭐ |
| FlashAttention/GPTQ/蒸馏 | — | 高 | ❌ 不推荐 |
基础数据:
- 全量 21,680 条 session 记录 → 建索引耗时 ~18.7 分钟(一次性操作)
- 这是一次性冷启动成本,之后每次查询不需要重算
新增记录频率估算:
- 爱衣日常对话场景:假设每天产生 50~200 条新 session 记录(活跃使用日)
- 增量建索引耗时:50 条 / 17.3条/秒 ≈ 3 秒;200 条 ≈ 12 秒
- 结论:增量索引完全可以后台异步完成,用户无感知
查询延迟分析:
- 单查询(1条 query embedding)P50 = 59ms,P95 = 784ms
- 爱衣的使用场景:记忆搜索发生在 LLM 调用之前,LLM API 本身耗时 2~10 秒
- 59ms 中位延迟相对于 2~10s 的 LLM 延迟 = <3% 的额外开销,几乎无感知
- P95 = 784ms 的突刺:每 20 次查询出现 1 次,在 LLM 响应流程中仍被掩盖
潜在瓶颈场景:
1. 批量建索引(冷启动): 18.7 分钟可接受,属于运维操作而非用户操作
2. 内存竞争: embedding 模型占 ~2GB RSS,若同时运行大型 LLM 可能引起内存压力(RS1000 需确认总内存)
3. P95 突刺(784ms): 若未来需要实时流式对话(latency-sensitive),可能需要处理;当前 LLM 场景不是问题
理由:
- 建索引:一次性 18.7 分钟 → 可接受(线下运维时段执行)
- 增量索引:<15 秒/批次 → 完全后台静默处理
- 查询延迟:P50=59ms 在 LLM 调用链中不构成瓶颈
- 不需要进一步提速来解决实际使用瓶颈
什么情况下才需要提速:
- session 记录增���速度极快(日增 >1000 条),且需要实时同步索引 → 届时实测 torch.compile
- 查询延迟需要 P95 < 200ms(例如独立实时搜索 UI)→ 届时考虑缓存策略
模型可用: Qwen/Qwen3-Embedding-0.6B、4B、8B(全系列),BAAI/bge-m3
token 上限: Qwen3-Embedding 系列最大 32,768 tokens/次
免费方案:
- 注册赠送 2000万 token 免费额度(一次性)
- Qwen3-Embedding-0.6B 是免费模型(调用费用 = 0,不消耗额度)
- 速率限制:免费版固定 RPM(Requests Per Minute),具体数值未公布,但开发测试够用
CMTEB 分数(Qwen3-Embedding-0.6B):
根据 Qwen 官方论文(arXiv 2506.05176),CMTEB-R(中文检索子集):
- Qwen3-Embedding-0.6B:64.64
- BGE-M3:约 54~56(参考 CMTEB 排行榜历史数据)
- 差距:Qwen3-Embedding-0.6B 在中文检索任务上比 BGE-M3 高约 8~10 分
延迟估算(API round-trip):
SiliconFlow 服务器在国内,从 RS1000(海外 VPS)调用预计:
- 网络 round-trip:~50~200ms(跨国)+ 推理时间
- 远高于本地推理的 59ms P50
模型: jina-embeddings-v3(570M,8192 tokens)、jina-embeddings-v4(3.8B,多模态)
免费方案:
- 注册获得免费 token 额度(官网 2025年已改为 token top-up 付费模式,免费额度减少)
- jina-embeddings-v5 为最新(2 sizes: 677M small + 239M nano)
- 注意:2025年5月定价模型调整,"1M tokens/月免费"的说法已不准确,需要查看最新免费额度
CMTEB 分数: jina-embeddings-v3 在 CMTEB 表现中等(约 52~55),低于 Qwen3-Embedding-0.6B
延迟: 根据独立基准测试(nixiesearch,2025年3月,us-east-1测):
- Jina AI 延迟���高,P90 约 500~3000ms(有明显波动和 spikes)
- Google Vertex AI 最稳定;Cohere 中等;OpenAI 有偶发 spikes
模型: embed-v4.0(多模态,128k tokens),embed-multilingual-v3.0(1024d,512 tokens)
免费方案: 有免费试用层,但主要面向企业,免费额度较少且有明确速率限制
CMTEB 分数: Cohere embed-multilingual-v3.0 在 CMTEB 上约 48~52(中文表现一般)
隐私问题: 数据发往美国服务器,合规风险较高
模型: 可调用任意已托管模型,包括 BGE-M3、Qwen3-Embedding-0.6B 等
免费方案: 免费账号有速率限制(免费 CPU 推理,共享资源,响应慢)
- 2025年7月后,HF inference 重点转向 CPU embedding 任务(小模型)
- 速率很低,适合测试,不适合生产
延迟: 共享资源,延迟不稳定,可能数百ms到数秒
| 模型 | CMTEB 检索分 | 模型大小 | 来源 |
|---|---|---|---|
| Qwen3-Embedding-0.6B(本地) | 64.64 | 0.6B | Qwen 论文 Table 3 |
| Qwen3-Embedding-0.6B(SiliconFlow API) | 同上(模型相同) | 0.6B | 同模型 |
| BGE-M3(本地) | ~54~56 | 0.6B | CMTEB 排行榜 |
| Jina-embeddings-v3(API) | ~52~55 | 570M | MTEB leaderboard |
| Cohere embed-multilingual-v3.0(API) | ~48~52 | 未公开 | MTEB 历史数据 |
| 维度 | 本地推理(当前方案) | 云端 API(SiliconFlow 最优选) |
|---|---|---|
| 延迟 | P50=59ms,P95=784ms | >100ms(含网络round-trip) |
| 吞吐 | 17.3 条/秒,稳定 | 受 RPM 限制,不稳定 |
| 质量 | Qwen3-0.6B,CMTEB 64.64 | 同模型,质量相同 |
| 隐私 | ✅ 完全本地,数据不外发 | ⚠️ 聊天记录/记忆发往云端 |
| 成本 | 固定(已有服务器) | 免费额度耗尽后付费 |
| 可用性 | 自主控制 | 依赖第三方 SLA |
| 离线支持 | ✅ 支持 | ❌ 依赖网络 |
核心理由:
1. 隐私是决定性因素: 爱衣的记忆搜索内容是主人的私密对话记录,发往任何云端 API 都存在数据泄露风险
2. 延迟本地更低: 本地 P50=59ms 优于任何跨网 API round-trip
3. 质量无差异: SiliconFlow 跑的是同一个 Qwen3-Embedding-0.6B 模型,质量一样
4. 成本: 本地已有硬件,API 虽然有免费额度,但量大后付费
SiliconFlow 的唯一适用场景: LE-B 上 Qwen3 不可用(1.5条/秒),若需要在 LE-B 上也能访问高质量中文 embedding,可考虑 SiliconFlow API 作为 LE-B 的临时 fallback(不含敏感数据时)。
Q1(还有哪些加速方案?)
→ 最推荐:torch.compile + zentorch(2行代码,预期 +10~30%,AMD EPYC 专属优化路径),需实测验证。向量缓存也值得加(工程成本低,场景匹配)。ONNX 路径已充分验证不划算,不再尝试。
Q2(17.3条/秒够用吗?)
→ 够用。 全量建索引 18.7 分钟是一次性操作,增量建索引 <15 秒/批,查询 P50=59ms 在 LLM 调用链中不构成瓶颈。暂无需进一步提速。
Q3(免费线上 API 比较)
→ 本地推理完胜。 最好的免费 API 选项是 SiliconFlow(Qwen3-Embedding-0.6B 免费,质量一致),但隐私问题(聊天记录外发)是硬伤。本地延迟更低、成本更低、完全可控。不建议迁移到 API。
model = torch.compile(model) 或加 zentorch 插件,实测一次看收益| # | 来源 | URL | 用于 |
|---|---|---|---|
| 1 | sbert.net 效率文档 | https://sbert.net/docs/sentence_transformer/usage/efficiency.html | 方案F/G/H 技术细节 |
| 2 | PyTorch 官方 blog(AWS Graviton RAG) | https://pytorch.org/blog/improve-rag-performance/ | torch.compile 1.7x 加速数据 |
| 3 | HuggingFace AMD Turin blog | https://huggingface.co/blog/huggingface-amd-turin | zentorch + torch.compile AMD EPYC 应用 |
| 4 | zentorch PyPI | https://pypi.org/project/zentorch/ | zentorch embedding kernel 优化 |
| 5 | AMD ZenDNN 5.0 | https://www.amd.com/en/developer/resources/technical-articles/zendnn-5-0-supercharge-ai-on-amd-epyc-server-cpus.html | AMD EPYC 推理优化框架 |
| 6 | Qwen3 Embedding 官方 blog | https://qwenlm.github.io/blog/qwen3-embedding/ | 模型规格、CMTEB 分数 |
| 7 | Qwen3 Embedding arXiv 论文 | https://arxiv.org/html/2506.05176v1 | CMTEB-R 64.64 数据来源 |
| 8 | QwenLM/Qwen3-Embedding GitHub | https://github.com/QwenLM/Qwen3-Embedding | 模型参数、评估说明 |
| 9 | SiliconFlow Embedding API 文档 | https://docs.siliconflow.cn/en/api-reference/embeddings/create-embeddings | Qwen3 免费支持、32k token 上限 |
| 10 | SiliconFlow 定价页 | https://siliconflow.cn/pricing | 免费模型确认(访问失败,信息来自搜索结果) |
| 11 | Jina AI Embedding 页 | https://jina.ai/embeddings/ | Jina v5 规格、付费模式变化 |
| 12 | Cohere Embed 文档 | https://docs.cohere.com/docs/cohere-embed | embed-v4.0、embed-multilingual-v3.0 规格 |
| 13 | Nixiesearch Embedding API 延迟基准 | https://nixiesearch.substack.com/p/benchmarking-api-latency-of-embedding | API 延迟实测(Jina 最慢,Google 最稳定) |
| 14 | HuggingFace Inference API 定价 | https://huggingface.co/docs/inference-providers/en/pricing | HF 免费层限制(2025年7月后专注 CPU embedding) |