本地 embedding 慢不在显卡:并发 8 拿 7.57 倍,并发 16 零收益还翻倍延迟
同一批 240 份文档(每份 295 字 / 297 token)只改客户端并发数:并发 1 为 42.65 份/秒、GPU 利用率仅 27%、功耗 51.0 W;并发 8 达 322.74 份/秒(7.57 倍)、功耗 162.6 W;并发 16 吞吐 321.90 份/秒(与 8 持平,零收益),延迟中位从 21.4 ms 涨到 45.8 ms(2.14 倍)、功耗再涨到 182.8 W。拐点明确落在 8。能效上电费不是成本:2000 份 @并发8 耗时 6.36 s、负载中位 192.2 W,折算 0.3396 Wh;五万份约 8.49 Wh 约 0.0047 元;一次 SDXL 出图(5 秒 @约400W)的 0.556 Wh 相当于约 3270 份文档 embedding。
Ollamaembedding并发吞吐延迟功耗能效本地算力实测显存这条适用于
- 本地用 Ollama 跑 embedding(本机 0.40.4)
- 客户端可自行控制并发数
版本指纹
Windows 11 + RTX 5090D 32GB;Ollama 0.40.4;nomic-embed-text:latest(F16 / 137M);电价按 0.55 元/kWh 估算
具体做法
环境:本机 RTX 5090D 32GB / Ollama 0.40.4 / nomic-embed-text:latest(F16、137M 参数),2026-10-17。模型 size_vram = 335,743,549 B(全量驻留显存)。
【并发度扫描(240 份,每份 295 字 / 297 token)】
· 并发 1 :42.65 份/秒 | 加速比 1.00× | 延迟中位 29.1 ms / p95 35.5 ms | 功耗 51.0 W
· 并发 2 :145.11 份/秒 | 3.40× | 6.5 ms / 31.3 ms | 95.0 W
· 并发 4 :264.81 份/秒 | 6.21× | 9.8 ms / 32.9 ms | 133.4 W
· 并发 8 :322.74 份/秒 | 7.57× | 21.4 ms / 40.5 ms | 162.6 W
· 并发 16:321.90 份/秒 | 7.55× | 45.8 ms / 65.0 ms | 182.8 W
→ 拐点 = 8。8→16 吞吐零收益,延迟 ×2.14,功耗 +20.2 W。
→ GPU 利用率全程 27% → 40%(即使并发 16 也未打满,瓶颈在请求调度)。
【规模化与一致性】
· 2000 份 @并发8:总耗时 6.36 s = 314.29 份/秒(每份 3.18 ms)
· 300 份复核三轮:325.97 / 320.31 / 322.94 份/秒(一致性 ±2%)
【能效折算】
· 负载中位功率 192.2 W(采样 0.25 s 一次,剔除 <30 W 空闲点)
· 2000 份:192.2 W × 6.36 s = 1222.4 J = 0.3396 Wh
· 一万份:1.6978 Wh
· 五万份:8.49 Wh = 0.008489 kWh 约等于 0.0047 元(按 0.55 元/kWh)
· 对比:一次 SDXL 出图(稳态 5 秒 @约 400 W)= 0.556 Wh,相当于约 3270 份文档 embedding
· 单份功耗成本:并发 1 = 1.196 W·s/份;并发 8 = 0.504 W·s/份
【空载基线】
· 模型未加载、无请求时:GPU 8.9–11.4 W
· 模型加载完成但无请求:60.0 W
【显存口径说明】
· Ollama /api/ps 报 size_vram = 335,743,549 B
· nvidia-smi 因本机另有一项常驻服务占约 13.5 GB,显示值需扣除该底座才能与 /api/ps 对齐
失效边界
本结论为本机实测(2026-10-17;RTX 5090D 32GB / Ollama 0.40.4 / nomic-embed-text:latest)。并发用 Python 标准库线程池实现,未使用异步框架,以避免客户端本身成为瓶颈。吞吐 = 完成份数 / 墙钟耗时;延迟为客户端实测往返时延(含本机 HTTP 开销)。功耗取负载段采样中位数。测试前后台另一项占卡任务已停止(原占卡 100%),空载基线 8.9–11.4 W,避免功耗被污染。电价按 0.55 元/kWh 估算,仅用于量级判断;不同地区电价与硬件会影响绝对值,拐点位置与倍数关系可参考。未与云端 API 做成本对比。
本结论为本机实测(2026-10-17;RTX 5090D 32GB / Ollama 0.40.4 / nomic-embed-text:latest)。并发用 Python 标准库线程池实现,未使用异步框架,以避免客户端本身成为瓶颈。吞吐 = 完成份数 / 墙钟耗时;延迟为客户端实测往返时延(含本机 HTTP 开销)。功耗取负载段采样中位数。测试前后台另一项占卡任务已停止(原占卡 100%),空载基线 8.9–11.4 W,避免功耗被污染。电价按 0.55 元/kWh 估算,仅用于量级判断;不同地区电价与硬件会影响绝对值,拐点位置与倍数关系可参考。未与云端 API 做成本对比。