YAOTU INSIGHTS

llama.cpp 混合推理 GPU 层数分配指南:24GB 显存跑 70B 大模型

llama.cpp 混合推理 GPU 层数分配指南:24GB 显存跑 70B 大模型
llama.cpp 混合推理 GPU 层数分配指南24GB 显存跑 70B 大模型【免费下载链接】ik_llama.cppllama.cpp fork with additional SOTA quants and improved performance项目地址: https://gitcode.com/GitHub_Trending/ik/ik_llama.cppik_llama.cpp 是 llama.cpp 的性能增强分支其中 llama.cpp GPU CPU 混合推理是它的强项当整张大模型塞不进显存时把一部分权重放在显存、其余放在内存让 70B 级别的量化模型在你的消费级显卡上依然能出字。 24GB 显存跑 70B为什么绕不开混合推理假设你要跑一个 70B 模型的 4bit 量化版权重文件约 40GB加上 KV cache 和计算缓冲远超 24GB 显存。此时你只有两条路换更大显存的机器或者做混合推理。ik_llama.cpp 的做法是调度器按层把张量拆开一部分放到显存VRAM剩余张量留在系统内存推理时数据在两者之间按需搬运。你不需要自己搬只要决定放多少层下去。仓库文档 docs/parameters.md 的 GPU Offload 一节给出了完整的手动调参路径。 原理速览谁决定张量去哪把张量分配想象成打包行李行李箱显存空间固定你得决定哪些大件必须托运、哪些随身带。背后干活的组件是ggml_backend_sched可以理解为调度器它拿到模型的完整计算图后逐个张量决定在 CPU 还是 GPU 上执行并在需要时安排跨设备拷贝。当调度器拿不准、或者你有明确偏好时ggml_backend_sched_set_tensor_backend提供了点名机制——把某个张量钉死在指定后端// 把指定张量钉到指定后端CPU 或 GPU ggml_backend_sched_set_tensor_backend(sched, tensor, backend); // 反向查询这个张量当前落在哪个后端 ggml_backend_t b ggml_backend_sched_get_tensor_backend(sched, tensor);接口声明在 ggml/include/ggml-backend.h模型加载和构建计算图的代码src/llama.cpp、src/llama-build-context.cpp里能看到大量调用KV cache 分片、嵌入层、临时缓冲都可以被显式指定后端。⌨️ 混合推理命令速查日常调参基本只用得到下面这几个参数| 参数 | 白话解释 | | - | - | |--gpu-layers 24短参-ngl | 前 24 层权重放显存其余层留在内存默认值 999 表示尽量全放 | |--main-gpu 1短参-mg | 多显卡时指定主卡编号 | |--flash-attn短参-fa | 开启 Flash Attention降低 KV cache 占用并提速提示词处理默认已开启 | |--no-kv-offload短参-nkvo | KV cache 强制留在内存给权重腾出显存代价是提示词处理变慢 | |--fit| 不用手动数层调度器按可用显存自动装尽量多的张量--fit-margin 1024控制预留安全余量单位 MiB |最常用的一条启动命令# 前 24 层下放 GPU其余 CPU上下文 4096 ./llama-server -m model.gguf --gpu-layers 24 --ctx-size 4096 # 或者交给自动填充算法 ./llama-server -m model.gguf --fit --fit-margin 1024 GPU 层数怎么分按硬件档次调参| 你的硬件 | 建议 | | - | - | | 消费级 8–12GB如 RTX 3060/4060 | 小模型直接-ngl 999全量下放大模型试--gpu-layers 10~15并用--cache-type-k q8_0 --cache-type-v q8_0把 KV cache 压量 | | 24GBRTX 3090/4090/5090 | 首选--fit若加载时 CUDA OOM把--fit-margin从 1024 调大到 2048 | | 显存吃紧核显、轻薄本 |--gpu-layers 0~8--no-kv-offload 量化 KV保证能跑起来 | | 工作站 / 多卡 |-sm graph按计算图切分模型-ts 3,1手动调节各卡占比MoE 模型可加--cpu-moe让稀疏专家留在内存 |MoE 模型有个额外技巧专家exps张量平时只有 2–5% 会被激活把它们留在内存往往比塞进显存更划算-ot \.ffn_.*_exps\.CPU这种正则覆盖就是干这个的。不确定模型层数时先跑python3 gguf-py/scripts/gguf_dump.py 你的模型.gguf数一下blk.n张量再定层数。 验证与排障张量真的落到指定后端了吗别只看命令行参数看启动日志里这两类行llama_model_load: offloaded 24/48 layers to GPU llama_kv_cache_init: GPU KV buffer size 1920.00 MiB llama_kv_cache_init: CPU KV buffer size 512.00 MiBoffloaded N/M layers to GPU直接告诉你实际下放的层数KV buffer 行按后端分别打印GPU 和 CPU 各占多少一目了然。想加载前先预判显存占用加--dry-run跳过实际读盘但照常报告内存用量很适合在大模型上试参数。常见问题各给一条对策加载即 OOM先--dry-run看缺口再降--gpu-layers或加--no-kv-offload把 KV 挪回内存。实际下放层数少于预期日志里 M可下放总层数比你想的小用gguf_dump.py核对模型真实层数并检查-ot正则是否误伤。速度不及预期TGtoken 生成慢说明 CPU 层太多往上调--gpu-layers或直接--fitPP提示词处理慢且你开了--no-kv-offload去掉它让 KV 回显存。收个尾混合推理的目标不是把层数往上堆而是让每一 GB 显存都装下每次都会用到的权重冷数据留在内存。下次启动模型时先跑一次--dry-run看清显存账本再用--fit打底、--gpu-layers微调一轮下来就能定位你硬件的甜点位。【免费下载链接】ik_llama.cppllama.cpp fork with additional SOTA quants and improved performance项目地址: https://gitcode.com/GitHub_Trending/ik/ik_llama.cpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考