主题
AMD 24G 显卡 + 256G 内存 MoE 模型部署指南
适用机器:AMD 24G 显卡(RX 7900 XTX / RDNA3,gfx1100)+ 80 核 CPU + 256G 内存 的工作站。 核心思路:小 MoE 全 GPU 跑追求速度,大 MoE 借助 256G 内存做专家权重 offload 追求质量。
引擎选择:Ollama(开箱即用)/ llama.cpp ROCm(调优上限高)。 消费级 AMD 卡不建议折腾 vLLM(ROCm 对 RDNA3 支持不完善)。
1. 模型适配结论(先看这个)
✅ 第一档:全 GPU 运行(权重 ≤ ~21G,交互流畅)
| 模型 | 总参/激活 | Q4_K_M 体积 | 结论 |
|---|---|---|---|
| Qwen3 30B-A3B | 30B / 3B | ~17G | 最推荐:质量≈14B dense、速度≈3B |
| Qwen3-Coder-30B-A3B | 30B / 3B | ~17G | 代码场景首选 |
| Qwen3.5 / Qwen3.6 35B-A3B(最新代) | 35B / 3B | ~19.6G | 可行但紧凑,上下文开 4~8K |
| gpt-oss-20b | 21B / 3.6B | ~13G | 余量最大,可开大上下文 |
✅ 第二档:CPU+GPU 混合(256G 内存红利,MoE 专家 offload)
| 模型 | 总参/激活 | Q4 体积 | 预期速度 | 结论 |
|---|---|---|---|---|
| Qwen3.5 122B-A10B | 122B / 10B | ~74G | ~3-6 tok/s | 可实用,质量档明显更高 |
| Qwen3 235B-A22B | 235B / 22B | ~132G | ~1-3 tok/s | 能跑,适合离线批处理 |
| Qwen3.5 397B-A17B | 397B / 17B | ~200G+ | <1 tok/s | 内存边缘,无实用价值 ❌ |
❌ 跑不动
DeepSeek-V3/R1(671B,Q4 ~380G 超内存)、Kimi K2(~1T)、Llama 4 Scout(offload 生态不成熟,不建议折腾)。
2. 环境准备
2.1 方案 A:Ollama(推荐新手,自带 ROCm 运行时)
bash
curl -fsSL https://ollama.com/install.sh | sh
# 验证 AMD 显卡被识别(日志中应出现 ROCm/AMD 字样)
journalctl -u ollama -e | grep -i rocm
ollama psOllama 自带 ROCm 库,无需单独安装系统级 ROCm,对 RX 7900 XTX 开箱即用。
2.2 方案 B:llama.cpp ROCm 编译(推荐进阶,支持 MoE offload 精细控制)
bash
# 1) 安装 ROCm(Ubuntu 24.04,以官方仓库为准)
# https://rocm.docs.amd.com/projects/install-on-linux/en/latest/
sudo apt install rocm-hip-sdk rocblas hipblaslt
# 2) 编译 llama.cpp(RDNA3 对应 gfx1100)
git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp
cmake -B build -DGGML_HIP=ON -DAMDGPU_TARGETS=gfx1100 -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j$(nproc)
# 3) 产物:build/bin/llama-server、llama-cli2.3 模型下载(GGUF 格式)
bash
# 国内推荐 ModelScope(搜索 "Qwen3-30B-A3B-GGUF"),选 Q4_K_M 分卷
# 官方仓库:huggingface.co/Qwen/Qwen3-30B-A3B-GGUF
mkdir -p /data/models && cd /data/models
# wget <Qwen3-30B-A3B-Q4_K_M 分卷文件...>3. 第一档:全 GPU 部署(Qwen3 30B-A3B)
3.1 Ollama 方式(最简单)
bash
ollama run qwen3:30b-a3b # 自动下载 + ROCm 全量加载到显卡
# API 服务(默认 11434 端口)
curl http://localhost:11434/api/generate -d '{
"model": "qwen3:30b-a3b",
"prompt": "用一句话介绍 Kubernetes",
"stream": false
}'3.2 llama.cpp 方式(可控参数多)
bash
./build/bin/llama-server \
-m /data/models/Qwen3-30B-A3B-Q4_K_M.gguf \
-ngl 99 \ # 全部层 offload 到 GPU
-c 8192 \ # 上下文长度
--host 0.0.0.0 --port 8080 \
-t 16 # CPU 线程数(prompt 处理阶段用)
# OpenAI 兼容 API 验证
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"qwen3-30b-a3b","messages":[{"role":"user","content":"你好"}]}'4. 第二档:MoE 专家 offload(Qwen3.5 122B-A10B)
原理:MoE 每 token 只激活少量专家。把专家权重(ffn_exps)放内存、 共享层(注意力/嵌入/归一化)放显卡,显存占用骤降,256G 内存正好承接。
bash
./build/bin/llama-server \
-m /data/models/Qwen3.5-122B-A10B-Q4_K_M.gguf \
-ngl 99 \
-ot ".ffn_.*_exps.=CPU" \ # 关键:所有专家张量放内存
-c 8192 \
-t 32 \ # CPU 专家计算吃线程,建议 24~40 调优
--host 0.0.0.0 --port 8080调优要点:
| 参数 | 建议 |
|---|---|
-ot ".ffn_.*_exps.=CPU" | 核心开关;也可 --n-cpu-moe N(前 N 层专家留 CPU)做更细粒度配比 |
-t 32 | 专家在 CPU 上计算,线程数对速度影响最大,80 核机器建议 24/32/40 实测对比 |
-c 8192 | 大模型 KV Cache 不小,按需调整 |
--mlock | 锁定内存防 swap,256G 内存建议加 |
| 速度预期 | ~3-6 tok/s(DDR 带宽瓶颈),聊天可用;235B 模型 ~1-3 tok/s 仅适合离线批处理 |
若 122B 全 offload 仍慢,可反向操作:
-ot ".ffn_(up|gate)_exps.=CPU"只放部分专家张量到内存, 或降低量化到 Q3/IQ4 进一步压缩体积换 GPU 驻留比例。
5. 常见问题速查
| 现象 | 排查与处理 |
|---|---|
| Ollama 用了 CPU 而非显卡 | journalctl -u ollama -e 看是否识别 ROCm;升级 Ollama 版本;确认显卡在 rocminfo 中可见 |
| llama.cpp 编译找不到 GPU | 确认 -DAMDGPU_TARGETS=gfx1100(RX 7900 XTX);`rocminfo |
| 启动报显存不足 | 减 -c 上下文;确认 -ngl 99 时模型 Q4_K_M ≤ 20G;或改用专家 offload |
| offload 模式速度极慢 | 检查是否触发 swap(free -g,加 --mlock);-t 线程数调优;关闭 NUMA 干扰 numactl --interleave=all |
| 生成乱码/质量差 | 量化太低(Q2/IQ2 慎用于生产),回到 Q4_K_M 或 Q5_K_M |
| 想换 OpenAI 兼容接入 | llama-server 与 Ollama 均提供 /v1/chat/completions,可直接对接现有应用 |
6. 选型速查(按需求)
| 需求 | 选择 |
|---|---|
| 日常对话/Agent,要快 | Qwen3 30B-A3B Q4_K_M 全 GPU |
| 写代码 | Qwen3-Coder-30B-A3B 全 GPU |
| 追最新模型 | Qwen3.5/3.6 35B-A3B Q4(上下文开小) |
| 要更强质量、可接受慢 | Qwen3.5 122B-A10B Q4 + 专家 offload |
| 尝鲜旗舰、离线批处理 | Qwen3 235B-A22B Q4 + 专家 offload |