快速结论:该报错出现在 vLLM v0.25.0 加载 MiniMax-M3 系列 W4A16(GPTQ/AWQ)量化模型时,源于 CompressedTensorsWNA16MarlinMoEMethod 构建 FusedMoEQuantConfig 时未传递 swiglu_alpha、swiglu_beta 和 swiglu_limit,导致 Marlin 内核收到的 clamp_limit 为 None。优先检查你的 vLLM 是否包含修复 clamp_limit 缺失的补丁。
问题场景
用户在 vLLM v0.25.0 Docker 环境中,使用 vllm serve 命令加载 MiniMax-M3-W4A16-GPTQ 等 W4A16 INT4 量化模型时触发。启动命令包含 --tensor-parallel-size 4,并启用了 chunked prefilling 和 prefix caching,模型加载到 engine warmup 阶段报错,worker 进程退出。
报错原文
RuntimeError: Worker failed with error 'SWIGLUOAI_UNINTERLEAVE requires clamp_limit'
原因分析
CompressedTensorsWNA16MarlinMoEMethod 在创建 FusedMoEQuantConfig 时,没有从模型配置中提取 swiglu_alpha、swiglu_beta 和 swiglu_limit。对于 INT4 W4A16 而言,配置结构当前不包含用于这些字段的空间,因此 Marlin 内核收到的 clamp_limit 为 None,而模型配置(通常是 config.json 中的 clamp_limit 或 swiglu_limit 字段)指定了值(如 7.0)。
可能原因:这是 vLLM v0.25.0 中 WNA16 量化配置路径的一个缺陷,影响所有依赖 SWIGLU_OAI_UNINTERLEAVE 算子且需要 clamp_limit 的 INT4 模型。
环境排查
- 确认为 vLLM 版本:v0.25.0(Docker 镜像中)。
- 确认设备:NVIDIA H200 NVL(4卡),Driver Version 580.105.08,CUDA Runtime 13.0。
- 确认模型:MiniMax-M3-W4A16-GPTQ 或类似 W4A16 AWQ/GPTQ 量化模型。
- 确认未应用 修复 commit 8277b70 时触发该报错。
解决步骤
- 关闭 vLLM 服务进程,并切换到已修复的 vLLM 分支或合入对应补丁。社区贡献者
rathodkunj2005提供了一个修复分支:https://github.com/rathodkunj2005/vllm/compare/main…fix/wna16-int4-swiglu-config,或者直接 cherry-pick commit8277b70。该补丁将 layer 中原有的swiglu_alpha、swiglu_beta、swiglu_limit值传入 INT4 的FusedMoEQuantConfig。 - 可优先尝试:如果你无法应用此补丁,可尝试临时使用全精度或 FP16/BF16 的模型版本,但并非长久之计。
- 重建 Docker 镜像(如果使用):在 vLLM 源码根目录执行
python setup.py develop或重新构建 wheel,确保补丁生效。 - 重新加载模型,使用与之前相同的启动参数。
验证方法
模型能够正常完成 engine warmup,不再弹出 RuntimeError: Worker failed with error 'SWIGLUOAI_UNINTERLEAVE requires clamp_limit' 报错。API server 日志能正常打印模型版本和加载信息,且 CUDA graphs capture 阶段(如存在)不会报错。如果应用补丁后仍有 CUDA graph capture 失败(例如 custom all reduce 相关错误),则可能是该补丁尚需进一步完善(该问题在社区讨论中已提及,但未在本次 Issue 中全面解决)。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


