在低端 GPU 上优化 MoE 模型:在 6 GB VRAM 上运行 GPT-OSS-120B,速度高达 30 令牌/秒
GPT-OSS-120B 模型拥有 1200 亿参数,却能在仅 6 GB VRAM 的 GPU 上以 30 令牌/秒的速度运行。关键在于借助混合专家 (MoE) 架构和 -cmoe 参数,使用 RAM 替代 VRAM,从而高效地在 CPU 和 GPU 之间分担张量,无需升级硬件。
混合专家架构
MoE 模型在每一层仅从共享池中激活少数专家。路由器(门控网络)为令牌生成从 128 个专家中选择 2–4 个,与稠密模型相比,计算负载降低 24 倍。
每一层包含:
- 注意力块(共享张量)
- FFN 块,被一组专家取代
- 用于路由的路由器
专家是隔离的小型 FFN,专精于输入数据的特定范围。在令牌生成过程中,输入会通过所有层(12–100+ 层),MoE 层与稠密层交替出现。
稠密模型中的 FFN 是一个整体块;MoE 中的则是稀疏结构。总参数量庞大,但每次通过的活跃参数很少。问题包括:专家重叠、路由器路由次优。
为什么 VRAM 对 MoE 低效
将整个 MoE 层卸载到 GPU 会造成空闲时间:128 个专家中仅 4 个活跃,其余白白占用 VRAM。注意力张量(共享)体积较小,将其卸载可确保 GPU 持续满载。
配置对比:
| 配置 | VRAM 使用量 | 计算量 | 效率 |
|--------------|-------------|----------|--------|
| 整层 | 16 块 | 8 块 | 50% |
| 注意力张量 | 16 块 | 16 块 | 100% |
对于使用 -cmoe 的 GPT-OSS-120B,VRAM 使用约 3 GB,速度 30 令牌/秒。稠密模型无空闲间隙,VRAM 与计算量成正比。
llama.cpp 中的优化参数
主要参数 -cmoe / --cpu-moe
将 MoE 专家(张量 exps)保留在 CPU 上,仅卸载:
- 所有层的注意力张量
- 共享层(名称中无
exps) - 共享专家(
shexp)
启动逻辑:
-ngl 999— 全部上 GPU-cmoe— MoE 回退到 CPU
重要: 不要对 GPT-OSS-120B 使用 ik_llama。
-ncmoe N / --n-cpu-moe N
当 VRAM 充足时控制置于 CPU 的层数。GPT-OSS-120B 有 37 层。
-cmoe— 3 GB VRAM-ncmoe 30— 填充至极限
-ncmoe 在启用 -cmoe 时被忽略(后者优先)。
新参数 --fit(2025 年 12 月)
自动填充 VRAM:
--fit— 默认情况下,对于 MoE 模型包含ncmoe--fit-ctx 4096— 上下文长度限制(默认 4096 而非 128k)--fit-target 1024— 目标空闲 VRAM(MB,默认 1 GB)
自动将 -fa、-ngl、-t 设置为最大值。问题: -t = CPU 核心数 - 1,对于混合 CPU(E/P 核心)需显式指定 -t 8。
额外内存优化
-fa 1— 闪存注意力 / swa / mla,自动检测-ub 4096 -b 4096— KV 缓存量化-ctk q8_0 -ctv q8_0— 上下文量化
新增 --models-dir — 从 UI 切换模型,--models-max 1 防止 OOM。
关键要点
- MoE 模型(GPT-OSS-120B、DeepSeek V3)需要 RAM > VRAM
-cmoe仅将注意力张量卸载到 GPU--fit自动调优参数- 可在 6 GB VRAM 上实现 30 令牌/秒速度
- 避免
ik_llama和混合 CPU 上的自动--t
— Editorial Team
暂无评论。