1. B300 上跑 GLM-5.2-FP8,为什么很多人卡在第一步
B300 现在属于想买不一定买得到、买到了也不一定一次点亮的硬件。它用的是 Blackwell 架构,算力和 FP8 能力都比上一代强,但代价是整条软件栈必须一起升级:驱动、Fabric Manager、CUDA、DOCA-OFED、NCCL、PyTorch、SGLang,任何一层版本对不上,表现都不是“报个错”这么简单,而是 GPU 能识别、多卡却通信失败,或者服务卡在 load checkpoint 阶段不动。
这篇记录的是我在 Ubuntu 22.04 上,从裸机系统一路配到 SGLang 成功加载 GLM-5.2-FP8、并用 8 卡 Tensor Parallel 跑通一次推理请求的完整过程。适合手里有 B300 机器、准备做 FP8 推理验证的工程师,也适合正在评估“新卡到底能不能直接上生产”的团队。核心检索词就三个:B300、Ubuntu 22.04、SGLang 部署 GLM-5.2-FP8。
我踩过的坑集中在两处:一是以为 nvidia-smi 正常就万事大吉,结果 nvlink 状态报错;二是 NCCL 悄悄 fallback 到 SOCKET,吞吐直接掉一截。所以下面每一步我都会给出“验证动作”,跑不通就别往下走,这样排障成本最低。
2. 部署前先把版本锁死,别边装边升
B300 部署最容易犯的错,是把它当成 A100/H100 的“换卡即用”。实际上 Blackwell 的新特性需要更高版本软件栈才能释放,所以第一步不是敲命令,而是把版本清单定下来,全程不升级。
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| 操作系统 | Ubuntu 22.04 LTS | 长期支持,驱动兼容性好 |
| 内核 | 5.15+ | 与 580 驱动兼容 |
| NVIDIA 驱动 | 580.159.04 | B300 专用 |
| Fabric Manager | 580.159.04-1 | 必须与驱动严格一致 |
| CUDA Toolkit | 13.0 | Blackwell 完整特性 |
| DOCA-OFED | 24.10-4.1.4.0 | 高速网络与 GPUDirect RDMA |
| NCCL | CUDA 13 对应版本 | 多卡/多机通信 |
| PyTorch | 2.5+ cu130 | 推理框架依赖 |
| 推理框架 | SGLang | 支持 FP8 / MoE / TP |
| 模型 | GLM-5.2-FP8 | 量化配置需匹配 |
注意:驱动和 Fabric Manager 版本必须严格一致。我实测遇到过 Fabric Manager 小版本落后,导致
nvidia-smi nvlink --status直接报错、多卡通信建不起来。
推荐执行顺序是:系统准备(禁 Nouveau)→ DOCA-OFED 与 InfiniBand → 驱动 → Fabric Manager → CUDA 13 → Python/PyTorch/SGLang → 系统优化 → 启动服务 → benchmark。每装一层验证一层,别一口气装完再排错。
3. 从裸机到可推理:可复制的配置与命令
3.1 系统准备与禁用 Nouveau
sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential dkms linux-headers-$(uname -r) \ wget curl vim git net-tools pciutils ethtool openssh-server python3-pip sudo bash -c "cat > /etc/modprobe.d/blacklist-nouveau.conf" << EOF blacklist nouveau options nouveau modeset=0 EOF sudo update-initramfs -u sudo reboot重启后验证:
lsmod | grep nouveau # 应无输出 lspci | grep -i nvidia # 应能看到 B3003.2 安装 DOCA-OFED 并验证高速网络
cd ~/downloads wget https://content.mellanox.com/ofed/MLNX_OFED-24.10-4.1.4.0/MLNX_OFED_LINUX-24.10-4.1.4.0-ubuntu22.04-x86_64.tgz tar -xzf MLNX_OFED_LINUX-24.10-4.1.4.0-ubuntu22.04-x86_64.tgz cd MLNX_OFED_LINUX-24.10-4.1.4.0-ubuntu22.04-x86_64 sudo ./mlnxofedinstall --all --with-doca sudo /etc/init.d/openibd restart ofed_info -s ibstatibstat里链路状态应为 Active。这里提醒一句:ping 通只代表 IP 可达,不代表 RDMA / InfiniBand / NCCL 链路正常,别用 ping 当验收标准。
3.3 安装驱动 580.159.04
cd ~/downloads/nvidia_driver wget https://us.download.nvidia.com/XFree86/Linux-x86_64/580.159.04/NVIDIA-Linux-x86_64-580.159.04.run chmod +x NVIDIA-Linux-x86_64-580.159.04.run sudo systemctl isolate multi-user.target sudo ./NVIDIA-Linux-x86_64-580.159.04.run sudo reboot安装选项里,接受协议、自动更新 X 配置选 No、运行 nvidia-xconfig 选 No。重启后:
nvidia-smi # Driver Version: 580.159.04,CUDA Version: 13.03.4 安装 Fabric Manager 并验证多卡互通
distribution=$(. /etc/os-release; echo $ID$VERSION_ID | sed -e 's/\.//g') wget https://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64/cuda-keyring_1.0-1_all.deb sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt update sudo apt install -y nvidia-fabricmanager-580=580.159.04-1 sudo systemctl start nvidia-fabricmanager sudo systemctl enable nvidia-fabricmanager sudo systemctl status nvidia-fabricmanager nvidia-smi nvlink --status服务应为 active,nvlink 状态不报错。这一步过了,多卡 P2P 才有基础。
3.5 安装 CUDA 13.0 与 Python 环境
wget https://developer.download.nvidia.com/compute/cuda/13.0.0/local_installers/cuda_13.0.0_580.32.07_linux.run chmod +x cuda_13.0.0_580.32.07_linux.run sudo sh cuda_13.0.0_580.32.07_linux.run --silent --toolkit --samples echo 'export CUDA_HOME=/usr/local/cuda-13.0' >> ~/.bashrc echo 'export PATH=$CUDA_HOME/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc nvcc --version # release 13.0sudo add-apt-repository ppa:deadsnakes/ppa -y sudo apt update sudo apt install -y python3.11 python3.11-venv python3.11-dev curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11 python3.11 -m venv ~/b300-env source ~/b300-env/bin/activate pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu130 pip install transformers accelerate sglang flash-attn --no-build-isolation python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"torch.cuda.is_available()返回 True 才算环境通了。
3.6 系统级优化
sudo nvidia-smi -pm 1 sudo nvidia-smi -pl 700 sudo bash -c "cat >> /etc/security/limits.conf" << EOF * soft nofile 65536 * hard nofile 65536 * soft memlock unlimited * hard memlock unlimited EOF sudo bash -c "cat >> /etc/sysctl.conf" << EOF kernel.shmmax = 68719476736 kernel.shmall = 16777216 EOF sudo sysctl -p注意:透明大页(THP)建议单独确认状态,别把无关服务当成 THP 配置命令照抄,生产环境以系统文件实际状态为准。
3.7 启动 GLM-5.2-FP8 推理服务
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v /models:/models \ --ipc=host \ -e PYTHONUNBUFFERED=1 \ -e NCCL_DEBUG=WARN \ lmsysorg/sglang:latest \ sglang serve \ --model-path /models/GLM-5.2-FP8 \ --tp 8 \ --mem-fraction-static 0.8 \ --enforce-disable-flashinfer-allreduce-fusion \ --host 0.0.0.0启动日志里重点看:CUDA 13.0.1、NCCL 2.28.9+cuda13.0、DeepGemm 启用、8 个 TP rank 依次初始化完成、服务监听 0.0.0.0:30000。
4. 验证请求:健康检查与一次真实推理
服务起来后先做健康检查:
curl http://127.0.0.1:30000/health返回 200 即服务存活。再发一次真实推理请求:
curl http://127.0.0.1:30000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "/models/GLM-5.2-FP8", "messages": [{"role": "user", "content": "用一句话解释什么是 FP8 量化"}], "max_tokens": 128, "temperature": 0.7 }'能正常返回内容,说明模型加载、TP 切分、FP8 推理链路全部打通。随后用 SGLang benchmark 压测,本次 8 卡 TP 实测结果如下:
| 指标 | 实测结果 |
|---|---|
| 后端 | sglang |
| 最大并发 | 16 |
| 成功请求数 | 8 |
| 压测时长 | 8.63 s |
| 请求吞吐 | 0.93 req/s |
| 输入 token 吞吐 | 4449.39 tok/s |
| 输出 token 吞吐 | 309.28 tok/s |
| 峰值输出吞吐 | 607.00 tok/s |
| 总 token 吞吐 | 4758.67 tok/s |
| 平均并发 | 5.13 |
延迟方面,TTFT 约 1.3s(本次输入 token 总量 38412,属长上下文,预填充开销大),TPOT 约 12.7–13 ms/token,P99 E2E 约 8.5s。TPOT 稳定说明 FP8 生成链路没问题,P99 偏高说明并发接近上限时排队明显,生产环境别只看均值。
5. 本篇常见错排查
nvidia-smi 正常但 nvlink 报错:几乎都是 Fabric Manager 版本和驱动不一致,用 apt 装指定版本nvidia-fabricmanager-580=580.159.04-1,别手动混装多个 deb。
卡在 load checkpoint:先查/models/GLM-5.2-FP8在容器内是否存在、挂载是否成功,再查 FP8 量化配置和 SGLang 版本是否匹配。
--tp 8启动失败:确认docker --gpus all、nvidia-smi可见卡数、CUDA_VISIBLE_DEVICES三者一致。
吞吐明显偏低:开 NCCL 日志确认是否走 IB,出现 SOCKET fallback 就回头查 DOCA-OFED 和 ibstat。
报 CUDA capability 10.0+ required:多半是误装 CUDA 12 或 PyTorch 不是 cu130 版本,回退到第 3.5 步重装。
多卡 P2P 失败:检查systemctl status nvidia-fabricmanager是否 active,未启动就 enable 后重启。
6. 把服务接进你的日常开发流
单机 8 卡跑通只是起点。如果你后续要把这套推理服务接进编码助手、Agent 或内部工具链,建议先把 API Key 和接入文档理顺,避免每次调试都手动拼请求。可以到 TaoToken API Keys 生成密钥,接入方式参考 TaoToken 接入文档,想先验证模型对话效果可以直接用 模型对话。
如果是要长期跑编码类任务或 Agent 工作流,Coding Plan 更适合按周期使用;需要看资源用量和调用情况就去 控制台。官网入口在 taotoken.net。
最后补一句实操经验:B300 这套栈真正耗时间的从来不是最后那条sglang serve,而是前面驱动、Fabric Manager、CUDA、DOCA-OFED、NCCL 的逐项对齐。把每一层的验证命令都跑一遍再往下走,比事后对着日志猜要省太多时间。