
RuntimeError: Worker failed with error ‘SWIGLUOAI_UNINTERLEAVE requires clamp_limit’
快速结论:该报错出现在 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 中全面解决)。



