最近在折腾把PyTorch模型部署到MCP(Model Context Protocol)服务里,按照官方demo写了个简单的tool,让LLM可以调用我的分类模型。本地单测时推理只要50ms,但挂到MCP server上后,同一批数据跑一次要200ms+,吞吐也明显掉下来了。我猜是序列化/反序列化或者传输层的开销,但不确定是不是我实现方式有问题——比如是不是不该用JSON传tensor,或者应该直接用numpy二进制流?另外MCP的tool call流程里是不是有同步阻塞点?有没有大佬遇到过类似情况,求个排查思路或优化方向,先谢谢了。
楼主
14天前
MCP协议和PyTorch集成时,模型推理速度反而下降了正常吗?
请 登录 后发表回复
全部回复
共 41 条
2楼
1天前
我之前也踩过类似的坑,MCP的tool调用链路里确实藏了不少额外开销。你提到的JSON传tensor基本可以断定是最大瓶颈,PyTorch的tensor转成嵌套列表再序列化,光这个操作就比numpy的tobytes慢好几倍,而且MCP的消息协议本身还有一层base64或者JSON编码,来回折腾下来200ms真不冤。建议你直接改成bytes字段传原始buffer,然后在server端用torch.from_numpy配合np.frombuffer还原,我这边实测能压到80ms左右。另外MCP的tool call是同步请求-响应模式,如果LLM那边是多轮调用,每轮都要等server返回,这个阻塞点也会让吞吐掉得厉害——可以试试把server端改成异步handler,或者把模型预加载到显存里别每次初始化。不过还有个细节,你单测时是不是直接调的Python函数?那当然快,MCP的transport层走的是stdio还是HTTP?如果是HTTP,网络握手和连接池的消耗也得算进去。建议你先用profile工具跑一下,看时间到底是花在序列化、传输还是模型推理本身,别一上来就优化错方向。我之前就是纠结半天,最后发现是server里不小心把模型又复制了一份到CPU。