跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(LCZ-Blue)
  • 不使用皮肤
  • LCZ-Green
  • LCZ-Blue
  • LCZ-Black
折叠
品牌标识

抡锤者

首页 版块 标签 硬件 AI 广场
  1. 主页
  2. 版块
  3. 随便聊聊
  4. 测试SGLang 部署方案后最终恢复llama.cpp方案 —— 单卡AMD Radeon AI PRO R9700(gfx1201 / RDNA4)

测试SGLang 部署方案后最终恢复llama.cpp方案 —— 单卡AMD Radeon AI PRO R9700(gfx1201 / RDNA4)

已定时 已固定 已锁定 已移动 随便聊聊
sg-langllama.cppr9700
3 帖子 2 发布者 46 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • Magic629M 离线
    Magic629M 离线
    Magic629
    编写于 最后由 编辑
    #1

    1. 本机硬件 / 软件配置(实测)

    项目 实测值
    CPU Intel Core Ultra 7 265K(Arrow Lake,20 核 20 线程,最高 5.5 GHz,单 NUMA)
    内存 64 GB(62 GiB 可用),8 GB swap
    GPU AMD Radeon AI PRO R9700(gfx1201,RDNA4 / Navi 48,64 CU,300 W 功耗墙)
    显存 32 GB(34208743424 B ≈ 31.9 GiB)
    硬盘 Kingston NV2 915 GB NVMe(剩余 721 GB)
    操作系统 Ubuntu 24.04.4 LTS,内核 7.0.0-31-generic
    ROCm 7.2.4(HIP 7.2.5 / hipcc 22.0),amdgpu 驱动 7.1.3
    Python 3.12.3(/usr/bin/python3),pip 24.0
    其它 无 conda、无 Docker、无 uv;有 git 2.43 / cmake 3.28 / gcc 13.3 / make 4.3
    GPU 状态 已就绪:rocm-smi 正常识别 R9700,/dev/kfd 存在,当前用户在 render、video 组
    网络 HuggingFace / PyPI / GitHub / repo.radeon.com 全部可达(200)
    已有模型 ~/.cache/huggingface 含 mattbucci/Qwen3.8-27B-AWQ、Qwen/Qwen3.5-0.8B;另有 llama.cpp 的 Qwen3.8-27B-Uncensored-Q5_K_M.gguf

    2. 核心结论:SGLang 对 gfx1201 的支持现状

    1. 官方 ROCm 支持只覆盖数据中心卡:gfx942(MI300/MI325)、gfx950(MI350)。官方 AMD 文档几乎只以 MI300X 为例。
    2. 消费级 RDNA 未被官方支持:SGLang 官方 tracking issue #30599 明确把 RDNA4 gfx1201 列为「blocked / ❌ 不支持」,并指出 sgl-kernel 的 setup_rocm.py 白名单会直接 sys.exit(1)。
    3. 最新稳定版不含 gfx1201:截至整理时最新稳定版为 v0.5.19(2026-09-05);实测 main 分支 sgl-kernel/setup_rocm.py 白名单为 gfx942 / gfx950 / gfx1250,不含 gfx1201。
    4. 可行路径 = PR #32092:开源 PR #32092 [AMD] Add experimental gfx1201 inference support 处于未合并(open)状态,但恰好是在「Radeon AI PRO R9700 + ROCm 7.2」上验证通过的(与本机显卡完全一致)。它自带完整构建/启动文档。
    5. 对比:vLLM 已把 gfx1200/gfx1201 列入其 ROCm 构建(PYTORCH_ROCM_ARCH),对 RDNA4 的官方支持更成熟,可作为备选(见 §9)。

    一句话:在本机这块 R9700 上跑 SGLang,今天只能走「从源码 + PR #32092」这条路;这是功能可用、但属实验性、单卡限定的方案。


    3. gfx1201 实验支持的范围(PR #32092 实测边界)

    ✅ 支持(单卡、--tp 1):

    • BF16 / FP16 稠密模型
    • 在线 FP8 量化(稠密模型,--quantization fp8)
    • BF16 / FP8 的 Triton 融合 MoE
    • GPT-OSS 原生 MXFP4 检查点(triton_kernel MoE runner)

    ❌ 不支持 / 未验证:

    • 多卡(张量并行 TP / 专家并行 EP)、custom all-reduce
    • AITER(必须关闭:SGLANG_USE_AITER=0)
    • AWQ / GPTQ / Marlin / gguf / modelopt / Quark MXFP4 等其它量化(官方标注「未支持」;AWQ 在 AMD 上走 Triton 反量化,理论上可能能跑,但不在 gfx1201 验证范围内,需自行试)
    • 注意力后端只能用 Triton(FlashInfer / FA3 等不可用)

    4. 最优部署步骤(从源码构建,gfx1201)

    4.0 系统级调优(AMD 官方建议,单卡消费级可选但推荐)

    # 1) 关闭 NUMA 自动平衡(AMD 官方 AMD GPU 文档建议;本机单 NUMA,影响较小)
    sudo sh -c 'echo 0 > /proc/sys/kernel/numa_balancing'
    
    # 2) 可选:/etc/default/grub 的 GRUB_CMDLINE_LINUX 追加(AMD MI300X 文档建议,单卡可跳过)
    #    pci=realloc=off iommu=pt
    #    然后 sudo update-grub && reboot
    

    关键点:ROCm 7.2 原生支持 gfx1201(自 ROCm 6.4.1 起),无需 HSA_OVERRIDE_GFX_VERSION 之类的兼容变量。

    4.1 创建独立虚拟环境(避免污染系统 Python)

    sudo apt install -y python3-venv python3-dev
    python3 -m venv ~/sglang-gfx1201
    source ~/sglang-gfx1201/bin/activate
    pip install -U pip setuptools wheel
    

    4.2 安装 ROCm 版 PyTorch(先装,避免被覆盖)

    ROCm 7.2.4 对应的官方 pin 是 torch 2.11.0(SGLang pyproject_other.toml 的 srt_hip_rocm724 extra 明确 torch==2.11.0):

    # 只跑文本 LLM,装 torch 即可;torchvision/torchaudio 仅多模态需要
    pip install torch==2.11.0+rocm7.2 --index-url https://download.pytorch.org/whl/rocm7.2
    # 需要多模态再加(版本号以 index 实际为准):
    # pip install torchvision==0.26.0+rocm7.2 torchaudio==2.11.0+rocm7.2 --index-url https://download.pytorch.org/whl/rocm7.2
    

    验证 GPU 可见:

    python -c "import torch; print(torch.__version__); print(torch.cuda.is_available(), torch.cuda.get_device_name(0))"
    # 期望: 2.11.0+rocm7.2 / True / AMD Radeon AI PRO R9700
    

    4.3 克隆 SGLang 并检出 PR #32092(gfx1201 支持)

    git clone https://github.com/sgl-project/sglang.git ~/sglang
    cd ~/sglang
    git fetch origin pull/32092/head:gfx1201
    git checkout gfx1201
    

    4.4 为 gfx1201 编译 sgl-kernel(单架构)

    cd ~/sglang
    export AMDGPU_TARGET=gfx1201
    export PYTORCH_ROCM_ARCH=gfx1201
    export GPU_ARCHS=gfx1201
    export SGLANG_USE_AITER=0        # RDNA4 上必须关闭 AITER
    
    cd sgl-kernel
    python setup_rocm.py install
    cd ..
    

    ⚠️ 不要在同一份 sgl-kernel 构建里混入 CDNA 目标(gfx942/gfx950);gfx1201 必须单独构建(wave32 vs wave64 差异)。

    4.5 安装 SGLang 所依赖的 triton_kernels 固定版本

    PR #32092 依赖特定 revision 的 matmul_ogs API:

    pip install --no-deps \
      "git+https://github.com/triton-lang/triton.git@4a24bf0b19a027ec0833b31cbc9ac29add7b17af#subdirectory=python/triton_kernels"
    

    4.6 安装 SGLang Python 包(HIP 版)

    cd ~/sglang
    # 切到 ROCm 版 pyproject(AMD 官方文档的标准步骤)
    rm -rf python/pyproject.toml && mv python/pyproject_other.toml python/pyproject.toml
    pip install -e "python[all_hip_rocm724]"
    
    # 若安装过程把 torch 覆盖成 CUDA 版,强制装回 ROCm 版:
    # pip install --force-reinstall --no-deps torch==2.11.0+rocm7.2 --index-url https://download.pytorch.org/whl/rocm7.2
    

    all_hip_rocm724 = 面向 ROCm 7.2.4 / torch 2.11 的依赖集(pyproject_other.toml 中已定义,pin torch==2.11.0)。


    5. 启动服务器(32 GB 显存的最优参数)

    5.1 推荐方案:Qwen3.8-27B 在线 FP8(gfx1201 已验证的稠密量化路径)

    source ~/sglang-gfx1201/bin/activate
    cd ~/sglang
    export SGLANG_USE_AITER=0
    
    python3 -m sglang.launch_server \
      --model-path Qwen/Qwen3.8-27B \
      --quantization fp8 \
      --dtype bfloat16 \
      --attention-backend triton \
      --sampling-backend pytorch \
      --model-loader-extra-config '{"enable_multithread_load": false}' \
      --tp 1 \
      --mem-fraction-static 0.90 \
      --chunked-prefill-size 2048 \
      --host 0.0.0.0 \
      --port 30000
    

    参数说明:

    • --quantization fp8:在线 FP8 量化,把 BF16 权重动态量化为 FP8(~28.5 GB),是 gfx1201 上已验证的稠密模型量化方式。
    • --dtype bfloat16:计算 dtype。
    • --attention-backend triton:gfx1201 只能走 Triton 注意力。
    • --sampling-backend pytorch:配合 Triton 使用(AMD 常见组合)。
    • --model-loader-extra-config '{"enable_multithread_load": false}':PR 文档明确要求——单线程加载,规避 RDNA4 上并行 checkpoint 加载时的 host→device 拷贝卡顿(不影响推理速度)。
    • --tp 1:gfx1201 只支持单卡。
    • --mem-fraction-static 0.90:给 32 GB 显存留 ~2.9 GB 余量,27B-FP8 能放进且不会 OOM。
    • --chunked-prefill-size 2048:小分块 prefill,兼顾 TTFT 与 decode 延迟(27B 混合 GDN 模型上尤其实用)。

    ⚠️ 在线 FP8 需要先完整下载 BF16 版 Qwen3.8-27B(~54 GB),再量化进显存。下载量大但显存占用只有 ~28.5 GB,32 GB 卡上只能低并发(bs ≤ 2)。

    5.2 备选:直接跑本机缓存的 AWQ 模型(需自行验证)

    python3 -m sglang.launch_server \
      --model-path mattbucci/Qwen3.8-27B-AWQ \
      --quantization awq \
      --dtype bfloat16 \
      --attention-backend triton \
      --sampling-backend pytorch \
      --model-loader-extra-config '{"enable_multithread_load": false}' \
      --tp 1 --host 0.0.0.0 --port 30000
    
    • AWQ 4-bit 权重 ~15 GB,显存压力小很多、并发更高。
    • 但 AWQ 不在 gfx1201 官方验证范围内(官方文档明说「其它量化格式未支持」)。AMD 上 AWQ 走 Triton 反量化,理论上可行,建议实测;报错就回退到 §5.1 的 FP8。

    5.3 更稳的小模型(首次跑通验证环境用)

    # Qwen3.5-0.8B(你已缓存)——先验证整条链路能跑通
    python3 -m sglang.launch_server \
      --model-path Qwen/Qwen3.5-0.8B \
      --dtype bfloat16 \
      --attention-backend triton \
      --sampling-backend pytorch \
      --model-loader-extra-config '{"enable_multithread_load": false}' \
      --tp 1 --host 127.0.0.1 --port 30000
    

    看到日志输出 The server is fired up and ready to roll! 即启动成功。然后用 OpenAI 兼容接口测试:

    curl http://127.0.0.1:30000/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{"model":"Qwen/Qwen3.5-0.8B","messages":[{"role":"user","content":"你好"}]}'
    

    6. 32 GB 显存能装什么(模型选型建议)

    模型 精度 显存占用 可行性
    Qwen3.8-27B BF16 ~54 GB ❌ 放不下
    Qwen3.8-27B 在线 FP8 ~28.5 GB ⚠️ 紧,仅低并发(已验证路径)
    Qwen3.8-27B AWQ 4bit ~15 GB ⚠️ 需实测(AWQ 未验证)
    Qwen3-30B-A3B / Qwen3.8-35B-A3B(MoE) BF16/FP8 ~18–22 GB ✅ Triton MoE 已支持,性价比高
    Qwen3-14B / Qwen2.5-14B BF16 ~28 GB ✅ 稳
    Qwen3-8B / Qwen2.5-7B BF16 ~16 GB ✅ 稳、并发高
    GPT-OSS-20B 原生 MXFP4 ~13 GB ✅ 已验证(MoE 路径)

    7. 性能 / 调优要点

    1. 只跑单卡:gfx1201 不支持 TP/EP,--tp 1 是唯一选择。
    2. SGLANG_USE_AITER=0 必须设置:AITER 是 CDNA 专用,RDNA4 上会报错。
    3. 注意力后端锁死 triton,采样后端配 pytorch。
    4. --mem-fraction-static:32 GB 卡上给 0.85–0.90,留余量避免 OOM。
    5. --chunked-prefill-size 2048:长输入/混合负载下让 decode 不被长 prefill 卡住。
    6. KV cache 量化:--kv-cache-dtype fp8_e4m3 可进一步省显存(若模型/后端支持)。
    7. 大检查点加载慢:ROCm 下 host 内存注册可能耗时数分钟,属正常;PR 要求单线程加载。
    8. 若追求吞吐,优先选 MoE 小参数(Qwen3-30B-A3B 类)而非硬塞 27B 稠密。

    8. 风险与注意事项

    • PR #32092 未合并:属实验代码,可能不跟随最新 main;建议锁定其分支 commit 后不要再 git pull main。
    • 无预编译 wheel / 官方 Docker 镜像支持 gfx1201:本机也没装 Docker,因此源码构建是唯一现实路径。
    • 量化限制:不要用 awq_marlin / gptq_marlin / gguf / modelopt_fp8 / modelopt_fp4(Marlin/gguf 是 CUDA 专用)。
    • 构建时间长:sgl-kernel 全量 HIP 编译可能需 20–60 分钟,MAX_JOBS 可调(CPU 20 线程可设 MAX_JOBS=16)。
    • gfx1201 与 CDNA 不可混编:一份构建只对一个架构。

    9. 备选方案(若 SGLang 实验路径不稳)

    1. vLLM:已官方支持 gfx1200/gfx1201(其 Dockerfile.rocm_base 的 PYTORCH_ROCM_ARCH 含这两个目标),对 RDNA4 更成熟,同样有 ROCm 版安装/Docker 路径,是「想要稳定 OpenAI 兼容推理服务」时最直接的替代。
    2. llama.cpp / Ollama:你机器上已装 llama.cpp 且有 Qwen3.8-27B-Uncensored-Q5_K_M.gguf,现在就能跑,无需任何额外构建;适合本地对话/低门槛场景,但没有 SGLang 的连续批处理/radix cache 等高级特性。
    3. 若必须用 SGLang 的全套特性(radix cache、speculative decoding、结构化输出等),则按本方案 §4–§5 走 PR #32092。

    10. 参考链接 (感兴趣可以自查)

    • SGLang 官方 AMD GPU 文档
    • SGLang 官方安装文档
    • SGLang 量化兼容矩阵
    • GitHub issue #30599:官方 RDNA3/RDNA4 支持追踪
    • GitHub PR #32092:Add experimental gfx1201 inference support(本方案核心)
    • PyTorch ROCm 轮子索引
    • AMD Radeon/Ryzen PyTorch 安装指南

    11.后续查资料继续实验及恢复

    本机硬件 / 软件配置(实测)

    项目 值
    CPU Intel Core Ultra 7 265K(Arrow Lake,20 核 20 线程,最高 5.5 GHz,单 NUMA)
    内存 64 GB,8 GB swap
    GPU AMD Radeon AI PRO R9700(gfx1201 / RDNA4 / Navi 48,64 CU,300W)
    显存 32 GB
    硬盘 Kingston NV2 915 GB NVMe
    系统 Ubuntu 24.04.4 LTS,内核 7.0.0-31-generic
    ROCm 7.2.4(HIP 7.2.5),amdgpu 驱动 7.1.3
    Python 3.12.3

    12、SGLang 调研结论

    1. SGLang 官方 ROCm 支持只覆盖数据中心卡 gfx942(MI300)、gfx950(MI350);消费级 RDNA4 gfx1201 属实验性、未合并(官方 tracking issue #30599,PR #32092)。
    2. 最新稳定版 v0.5.19 的 sgl-kernel 白名单不含 gfx1201,需从源码 + 社区补丁构建。
    3. 已在本机从源码(release/v0.5.18 + gfx1201 补丁)构建并部署,模型 Qwen3.8-27B-AWQ。

    13、SGLang 部署结果(已被清理,此处留档)

    • 部署形式:systemd 用户服务 sglang,端点 http://127.0.0.1:30001。
    • 配置:AWQ 4-bit + float16 + triton 注意力 + CUDA graph 解码,显存 ~29.9/32 GB。
    • 实测速度:~4.3 tok/s(27B AWQ 在 RDNA4 上走未优化 Triton 反量化,偏慢)。
    • 结论:27B 在 R9700 上物理上限约 16.6 tok/s(社区 70 补丁 + FP8 极限),达不到 50 tok/s。

    14、快速方案研究结论

    • 要 ≥50 tok/s 只能换 7–8B 小模型,实测 ~98 tok/s(llama.cpp/Ollama 原生 gfx1201)。
    • 本机 llama.cpp(HIP 后端)实测 27B 可达 ~38–57 tok/s,远快于 SGLang 的 4.3 tok/s。

    15、最终清理(按用户要求)

    已删除:

    • SGLang 运行服务(systemd 用户单元 sglang.service + 软链)
    • ~/sglang-test/ 整个目录(含 25GB venv、227MB 源码、全部脚本与日志,共约 45GB)
    • ~/.cache/sglang 编译缓存
    • loginctl enable-linger(已还原为 disable)
    • 桌面 5 个 SGLang 相关文档(.md / .pdf)

    已保留(模型文件):

    • ~/models/Qwen3.8-27B-AWQ(18GB,HF 格式 AWQ 模型)
    • ~/models/Qwen3.5-0.8B(1.7GB)
    • ~/models/qwen3.8/(38GB:Qwen3.8-27B-Uncensored-Q5_K_M.gguf、Qwen3.8-27B-Q5_K_M.gguf、mmproj-f16.gguf)

    16、llama.cpp 恢复与测试(当前状态)

    • 服务:systemd qwen38.service(active 运行中 + enabled 开机自启)
    • 启动命令:/home/magicz890/llama.cpp/build/bin/llama-server
      • 模型 -m Qwen3.8-27B-Uncensored-Q5_K_M.gguf + --mmproj mmproj-f16.gguf
      • 别名 --alias qwen3.8,上下文 -c 131072(128K),KV 量化 q8_0
      • 推测解码 --spec-type draft-mtp --spec-draft-n-max 2,flash attention -fa on
      • -ngl all(全 GPU)、--host 0.0.0.0 --port 8080
    • 健康检查:/health → {"status":"ok"};/v1/models 正常(含多模态能力)
    • 推理测试:中文输出正确、3 路并发全 200、无错误日志
    • 实测解码速度:长生成 ~50 tok/s,短回答 90–105 tok/s(MTP 命中时)

    17、最终状态一览

    项 状态
    SGLang 服务/软件/缓存/文档 已全部删除(零残留)
    模型文件 保留在 ~/models/(共 ~57GB)
    llama.cpp(qwen38.service) 运行中、自启、端口 8080、稳定
    桌面文件 AMD_AI_Pro_R9700_SGLang_部署研究报告、ceshi/、llama_cpp服务端待机诊断报告.pdf、本文件

    常用管理命令

    # llama.cpp 服务
    systemctl status qwen38.service          # 查看状态
    sudo systemctl restart qwen38.service    # 重启
    journalctl -u qwen38.service -f          # 看日志
    
    # 测试接口
    curl http://127.0.0.1:8080/health
    curl http://127.0.0.1:8080/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{"model":"qwen3.8","messages":[{"role":"user","content":"你好"}]}'
    
    1 条回复 最后回复
    1
    • paul houP 离线
      paul houP 离线
      paul hou
      编写于 最后由 编辑
      #2

      SGLang沒雙卡似乎玩不起來

      Magic629M 1 条回复 最后回复
      0
      • paul houP paul hou

        SGLang沒雙卡似乎玩不起來

        Magic629M 离线
        Magic629M 离线
        Magic629
        编写于 最后由 编辑
        #3

        @paul-hou 是的

        1 条回复 最后回复
        0

        你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

        厌倦了每次访问都刷到同样的帖子?您注册账号后,您每次返回时都能精准定位到您上次浏览的位置,并可选择接收新回复通知(通过邮件或推送通知)。您还能收藏书签、为帖子顶,向社区成员表达您的欣赏。

        有了你的建议,这篇帖子会更精彩哦 💗

        注册 登录
        回复
        • 在新帖中回复
        登录后回复
        • 从旧到新
        • 从新到旧
        • 最多赞同


        • 登录

        • 登录或注册以进行搜索。
        • 第一个帖子
          最后一个帖子
        0
        • 版块
        • 最新
        • 标签
        • 热门
        • 用户
        • 群组