CPU/GPU offload,这是 MoE 模型下的概念,把模型的一部分层放到 CPU 或 GPU 上算/存。
GPU offload layers = 卸载到 GPU 的层数,原本模型可能主要在 CPU 内存里跑,现在把前 N 层或若干层放到 GPU 显存里,让 GPU 来算。
比如 llama.cpp 里常见参数 --n-gpu-layers 35,意思大致就是:把 35 层 transformer block 放到 GPU 上执行。
如果模型太大,GPU 显存放不下完整模型,就可以一部分层放 GPU,速度快;剩下层留 CPU(实际是放内存),速度慢但能跑;层数越多放 GPU,通常越快,但越吃显存。
Transformer 中,一个模型通常由很多层组成,具体是哪几层、embedding 和 output head 怎么处理,取决于框架实现。
很多本地推理软件会给你一个选项:
GPU layers = 0:基本 CPU 跑 GPU layers = 一部分:CPU + GPU 混合跑 GPU layers = 最大值:尽量全放 GPU GPU layers = -1:有些工具里表示自动或全部 offload 到 GPU
通常越多 GPU 层越快,但有上限,显存不够会报错或回退;除了模型本身,上下文越多也越占用显存,所以量力而行。
既然都是 Transformer,那就是稠密模型当然也可以卸载;因为每一层的参数每次都要参与计算。 所以如果某些层在 CPU 上,每个 token 都必须经过 CPU 部分,速度会被 CPU 层拖住。它没有 MoE 那种“只激活一部分专家”的天然稀疏性。
但是 MoE 也不一定效果就一定好,要看框架支持的卸载粒度,如果框架支持按专家/按热度卸载,那肯定是有提升的,要不然可能因为 MoE 参数更大路由复杂等问题速度更慢。
夜雨聆风