SGLang 排坑:4 步解决 PyTorch 版本冲突
【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang
CUDA 12.4 的机器上刚装完依赖,python -m sglang.launch_server一启动就在加载 sgl_kernel 时崩掉,报错里全是 CUDA、ABI 之类的词。这类 SGLang 版本兼容与环境适配问题,多数不是代码 bug,而是 torch、内核包和你的硬件三者没对齐。下面按「体检 → 拆约束 → 排障 → 按硬件安装」的顺序过一遍。
一键体检:判断你的环境到底达没达标
先别猜,跑项目自带的体检脚本,它会把 Python、torch、sglang-kernel 及十几个关键依赖的版本、CUDA 信息、GPU 拓扑一次性打印出来:
python -m sglang.check_env python -c "import torch; print(torch.__version__, torch.version.cuda)" pip show sglang-kernel对照标准下结论:
- 能达标:Python ≥ 3.10;torch 为 2.13.0;sglang-kernel 为 0.4.6.post1;
torch.version.cuda非空且 ≥ 12.3。 - 不能达标:Python 低于 3.10(
requires-python硬性下限);torch 大版本不是 2.13(主包是精确锁定,不是"大于等于");sglang-kernel 版本与主包声明不一致。 - 看情况:CUDA 在 12.1/12.2 也能启动服务,但 FlashAttention-3 路径会被跳过(见下文排障第 2 条),属于"能跑但慢"。
体检脚本源码在python/sglang/check_env.py,它按 CUDA / ROCm / NPU / MUSA / MPS 五种平台分别输出对应字段,AMD 机器上会看到 ROCM_HOME 和 rocm-smi 驱动版本,NVIDIA 机器上看到 NVCC 和驱动版本。
依赖约束拆解:版本到底锁在哪
SGLang 的 Python 侧按平台拆成了多个安装清单,约束各不相同,这是所有版本冲突的源头:
| 组件 | 配置文件 | 关键约束 |
|---|---|---|
| 主包(NVIDIA/CUDA) | python/pyproject.toml | torch==2.13.0、torchaudio==2.11.0、transformers==5.12.1、tokenizers==0.22.2、sglang-kernel==0.4.6.post1 |
| 内核包(NVIDIA) | python/sglang/kernels/aot/pyproject.toml | sglang-kernel0.4.6.post1,构建与运行均要求torch==2.13.0 |
| 内核包(CPU) | python/sglang/kernels/aot/pyproject_cpu.toml | sglang-kernel-cpu,构建要求torch==2.12.0 |
| 内核包(ROCm) | python/sglang/kernels/aot/pyproject_rocm.toml | 构建要求torch>=2.8.0(未锁死) |
| CPU 主包 | python/pyproject_cpu.toml | 发行名sglang-cpu,torch==2.12.0、torchvision==0.27.0、triton==3.7.0 |
| AMD 运行时 | python/pyproject_other.toml | srt_hip不锁 torch;ROCm 7.2.4 用srt_hip_rocm724(torch==2.11.0、compressed-tensors==0.16.0) |
| Intel XPU | python/pyproject_xpu.toml | torch==2.13.0+xpu |
两个要点:
- NVIDIA 主线是"全链路锁 2.13.0"——主包、内核包、build-system 三处一致,所以这条线几乎不允许 torch 自由浮动。
- 非 NVIDIA 平台的锁法完全不同:CPU 用 2.12.0,ROCm 7.2.4 用 2.11.0,ROCm 内核包只写
>=2.8.0。跨平台照抄 NVIDIA 的 2.13.0 就会出错。
排障路径:4 个高频症状的根因与处理
症状 1:安装成功,启动时 import sgl_kernel 报 CUDA/ABI/undefined symbol 类错误
- 根因:环境里实际生效的 torch 不是 2.13.0,sglang-kernel 二进制与其 ABI 不匹配。最常见于共用环境——隔壁项目的 requirements 把 torch 拉到了别的版本,pip 不报错,运行时才炸。
- 处理:新建干净 venv,
pip install sglang让依赖解析器完整拉齐,再用python -m sglang.check_env核对 torch 与 sglang-kernel 版本是否同版本线。
症状 2:服务能跑,但 FlashAttention 走了慢路径、吞吐偏低
- 根因:FA3 的启用条件在
python/sglang/kernels/aot/python/sgl_kernel/flash_attn.py里,两个条件缺一不可:
return (torch.version.cuda >= "12.3") and ( torch.cuda.get_device_capability(device)[0] == 9 or torch.cuda.get_device_capability(device)[0] == 8 )torch 的 CUDA 构建低于 12.3,或显卡算力是 7.x(如 V100),FA3 直接被跳过。
- 处理:换 12.3+ 的 torch CUDA 构建;算力 7.x 属于硬件限制,别在版本上死磕。
症状 3:AMD 卡上装了 NVIDIA 版 torch,sgl_kernel 初始化报错或torch.cuda.is_available()为 False
- 根因:
python/sglang/kernels/aot/python/sgl_kernel/__init__.py靠torch.version.cuda/torch.version.hip分发平台分支,torch 轮子类型和显卡对不上就走错分支。 - 处理:先装 ROCm 版 torch,再用
srt_hipextra 安装(srt_hip含wave-lang==3.8.2、petit_kernel==0.0.2);ROCm 7.2.4 换用srt_hip_rocm724,对应 torch 2.11.0。
症状 4:pip 安装时直接 ResolutionImpossible / 依赖冲突
- 根因:主包锁得极死(
transformers==5.12.1、tokenizers==0.22.2、flashinfer_python[cu13]==0.6.18等),环境里已有的旧版同名包与这些锁定互斥。 - 处理:不要在存量环境里打补丁式安装,用 venv 或 uv 隔离重装;确认冲突的包名后,以 SGLang 的锁定版本为准。
场景化安装:按硬件给最小可运行步骤
NVIDIA GPU
python -m venv sglang && source sglang/bin/activate pip install -U pip pip install sglang python -m sglang.check_envpip install sglang会顺带拉齐 sglang-kernel 0.4.6.post1 和 torch 2.13.0,装完用 check_env 确认配对即可。
纯 CPU 机器
python -m venv sglang-cpu && source sglang-cpu/bin/activate pip install -U pip pip install sglang-cpu⚠️ 注意发行名是sglang-cpu(对应 torch 2.12.0 那条线),不是主包。
AMD ROCm
# 先按 AMD 平台文档装好 ROCm 版 torch pip install "sglang[srt_hip]" # ROCm 7.2.4 环境改用 srt_hip_rocm724(torch 2.11.0)避坑清单:升级、共用、回退之前先过一遍
- 共用环境是重灾区:别在装过 SGLang 的环境里再装别的服务框架,任何一个额外依赖动 torch 的锁定都会立刻破坏 2.13.0 配对。
- 升级 torch 必须同步换 sglang-kernel:内核轮子和 torch 存在 ABI 绑定,只升一边必出 import 或运行时符号错误。
- 回退前先留底:跑一遍
python -m sglang.check_env存档,再按记录的版本pip install回去,别凭记忆猜版本号。 - CPU 机器别装 CUDA 主包:用
sglang-cpu发行,否则白白拉进一大坨用不上的 CUDA 依赖。 - 非 NVIDIA 平台用官方 extras:
srt_hip、srt_musa、srt_hpu等清单都定义在 python/pyproject_other.toml,不要手工拼依赖,容易漏掉配套锁定。
收尾
记住一条主线:先跑python -m sglang.check_env留底,再对照上表核对 torch 与 sglang-kernel 是否同版本线,绝大多数"环境怪问题"都停在这一步。如果体检输出正常但故障仍在,把 check_env 的完整输出连同复现命令贴到项目的 issue 讨论区,比文字描述快得多。
【免费下载链接】sglangSGLang is a high-performance serving framework for large language models and multimodal models.项目地址: https://gitcode.com/GitHub_Trending/sg/sglang
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考