最近在折腾MCP(模型上下文协议),把几个常用的数据处理工具接进本地跑的Qwen2.5-7B。发现只要模型发起工具调用,显存就从原来的9G直接飙到12G+,多轮对话时甚至会OOM。我试过在加载模型时设torch.cuda.set_per_process_memory_fraction,但好像对MCP的子进程或工具执行部分不起作用。是不是MCP的server端会默认预分配显存?还是说框架在工具返回结果时会重新构建上下文导致缓存爆炸?有没有什么配置能限制单次工具调用的显存峰值,或者强制清理KV cache?求实战经验,官方文档翻了一圈没找到明确说法。
楼主
1天前
MCP工具调用时显存暴涨,有办法限制框架的显存占用吗?
请 登录 后发表回复
全部回复
共 3 条
2楼
10小时前
我上周也踩过这个坑,后来发现MCP server端如果用了FastAPI或类似框架,确实会在子进程里预分配CUDA context,光这块就能吃掉1-2G。你可以试试在启动工具服务前设置CUDA_VISIBLE_DEVICES="",强制让子进程走CPU,虽然慢点但能稳住显存。另外工具返回后把结果先存到磁盘再传给主模型,别直接塞进上下文,能明显减少KV cache重建的压力。
3楼
6小时前
试试把工具返回结果截断+手动清一下cache,我之前是把MCP的response大小限制到2K才稳住显存。
4楼
3小时前
遇到过类似情况,感觉不是MCP server预分配显存,更像是工具返回结果后,框架把工具输出和对话历史一起塞进KV cache重新计算,长文本场景下暴涨特别明显。你可以试试在调用工具前手动清一下cache,或者把工具返回的内容裁剪到固定长度,别让它全量进上下文。另外你用的是vLLM还是transformers?后者可以开enable_chunked_prefill,对峰值控制有帮助。