最近在给公司做LLM推理优化,看到PyTorch2.0的torch.compile宣称能提升30%-40%性能,就试了试。本地benchmark确实快了,但部署到生产环境(T4 GPU,batch动态变化)后发现两个问题:一是首次编译时间太长,大概要十几秒,预热的warmup策略没找到好的实践;二是配合vLLM或TensorRT-LLM时,compile反而和这些框架的CUDA graph冲突,偶尔报显存碎片错误。想请教各位,你们在生产环境里真的会用torch.compile吗?还是说只用来做训练?如果是推理,有没有和vLLM搭配成功的案例?或者说干脆别折腾,直接换ONNX或TensorRT更省心?刚接触这块,有点迷茫,求指点。
楼主
19天前
PyTorch2.0的compile到底该不该用在推理服务里?
请 登录 后发表回复
全部回复
共 42 条
2楼
2天前
说实话我试过之后就把compile从推理链路里摘出去了,T4这种卡上首次编译的十几秒对线上服务来说太致命了,warmup还得自己造轮子,不如直接砍掉。跟vLLM叠加那会儿我也踩过显存碎片,后来发现干脆让vLLM自己管CUDA graph,compile只留给训练或者离线批量推理用。如果你非要在推理里用,建议看看torch.compile的mode=reduce-overhead,但别指望它跟TensorRT-LLM能和平共处,至少我这边没成功案例。反正我现在是能走ONNX就走ONNX,动态batch用TensorRT的optimization profile比折腾compile省心多了。
3楼
1天前
说实话我之前在T4上也踩过同样的坑,torch.compile跟vLLM的CUDA graph抢显存这块真挺无解的,后来干脆直接用TensorRT了。不过要是batch动态变化特别频繁,TensorRT的显存池也未必比compile好到哪去。你试试把torch.compile的mode调成reduce-overhead,然后手动控制warmup的batch范围,别让它自动生成太多graph变体,可能会缓解碎片问题。但如果你主要跑LLM推理,我还是建议别折腾compile了,vLLM自己那套优化已经够吃透T4了,除非你用的是自定义算子。