最近在调一个用MCP(Model Context Protocol)做推理服务的小项目,本地测试好好的,一挂到MCP的server上就频繁报CUDA OOM。我明明已经把batch size调小到1了,输入tensor的shape也确认过没变。看监控发现显存占用曲线很奇怪,不是平滑上升,而是每隔几次请求就突然跳一大截,然后又降回去。我怀疑是不是MCP的context轮换机制在背后偷偷缓存了中间激活?或者PyTorch的caching allocator在MCP这种长驻服务进程里不会自动释放?有没有踩过同样坑的朋友,你们最后是怎么定位和解决的?
楼主
16天前
MCP里跑PyTorch模型,显存分配逻辑和本地完全不一样?
请 登录 后发表回复
全部回复
共 43 条
2楼
2天前
大概率是context轮换把tensor留在graph里了,试试显存池化或者手动清cache看曲线平不平。
我之前也遇到过,最后在每次请求结束调一下empty_cache,再配合环境变量PYTORCH_CUDA_ALLOC_CONF=expandable_segments才稳住。
3楼
1天前
这个现象我碰到过,印象里不是MCP在缓存激活,而是PyTorch的caching allocator在长驻进程里会把显存块留着复用,加上MCP的context切换可能触发不同shape的临时tensor,导致碎片化。你可以试试在请求结束后主动调torch.cuda.empty_cache(),或者用torch.cuda.memory_summary()看下峰值分配在哪,大概率能发现是某些中间变量没释放。我之前是给每个请求包了个独立的CUDA stream才解决的,你可以参考下。
4楼
1天前
八成是推理上下文窗口的KV cache没释放,试试在请求间隙手动调一下torch.cuda.empty_cache()。