必须先用--trace选项生成trace.json并用chrome://tracing分析,聚焦prefill_step、decode_step_0和cudaMemcpyAsync三类Span定位瓶颈,再通过nvidia-smi和nsight-compute交叉验证。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜
排查deepseek模型推理性能瓶颈时,必须先定位耗时最高的模块位置,否则优化会盲目低效。直接测端到端延迟只能知道“慢”,但无法判断是token生成卡顿、kv缓存更新拖沓、还是输入预处理阻塞了pipeline。用tracing工具捕获完整调用链
启动服务时添加--trace选项:python serve.py --model deepseek-7b --trace=chrome → 服务运行一次请求后自动生成trace.json文件。
这一步不可跳过,【没有trace数据就等于闭眼找瓶颈】。不启用trace,所有后续分析都基于猜测。
用Chrome浏览器打开chrome://tracing → 点击Load按钮导入trace.json → 拖动时间轴,观察长条形的高亮区块——它们代表单个函数或阶段的执行区间。
聚焦三类关键Span定位瓶颈
在trace视图中按名称筛选以下三类Span,优先看持续时间最长的那个:
方法一:prefill_step → 表示首次输入文本的全量注意力计算,若该Span超300ms,说明输入长度或batch_size已超出GPU显存带宽承载能力。
方法二:decode_step_0 → 表示第一个新token生成步骤,若它比后续decode_step_1/2明显更长,说明初始KV缓存构建存在冗余拷贝,需检查是否误启用了dynamic_kv_reuse。
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
方法三:cudaMemcpyAsync → 出现在任意两个计算Span之间且持续时间>5ms,说明主机内存与GPU显存间数据搬运成瓶颈,此时应确认是否启用了PagedAttention——未启用时该拷贝无法规避。
交叉验证:用nvidia-smi + nsight-compute双查
第一步:终端执行watch -n 1 nvidia-smi → 观察GPU-util是否长期低于40%。若低,说明计算单元空闲,瓶颈在CPU侧或数据加载路径。
第二步:对可疑decode_step打点,运行nsys profile -t cuda,nvtx --capture-range=cudaProfilerRangeStart,cudaProfilerRangeStop python gen.py → 输出report.nsys-rep。
第三步:nsys-ui report.nsys-rep → 展开Kernel Activity → 查看sm__inst_executed.sum中值最低的kernel所属模块名(如attn_qkvo_kernel_v2),该模块即为实际计算瓶颈源。


















