公司动态

llama.cpp 快速启动指南

📅 2026/8/28 9:07:35
llama.cpp 快速启动指南
llama.cpp 快速启动指南【免费下载链接】llama.cppLLM inference in C/C项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cppllama.cpp 启动慢的原因基本就三个模型文件读得慢、首次推理冷启动、线程配置浪费算力。本文基于 llama.cpp 仓库里的真实参数、代码和官方基准数据给出 5 个可直接复制的提速开关帮你在不改模型、不改代码的前提下把敲下命令到出第一个 token的时间压下来。启动时间花在哪3 段耗时对号入座一次 llama-cli 启动耗时大致分三段每段对应不同的开关阶段在做什么对应优化① 模型加载从磁盘读取 GGUF 权重文件建立内存映射量化、加载模式② 预热空运行默认执行一次极短推理初始化计算资源--warmup开关③ 首次 prompt 计算计算图首次展开、kernel 加载、prompt 逐批处理GPU 离载、线程数动手前先定位卡在哪一段看启动日志如果loading model之后长时间无输出多半是①文件太大如果加载很快但首 token 迟迟不来多半是②③没配好。预热机制拆解一次空运行换稳定的首 tokenllama.cpp 默认开启预热common_params里warmup true见 common/common.h。加载完成后它会拼一个只含 BOS/EOS 的极短序列跑一次真实解码再清空 KV 缓存逻辑在 common/common.cppif (params.warmup) { llama_decode(lctx, llama_batch_get_one(tmp.data(), tmp.size())); llama_memory_clear(llama_get_memory(lctx), true); // 只留初始化效果 llama_synchronize(lctx); llama_perf_context_reset(lctx); }这次空运行的意义让计算图展开、kernel 加载、显存/内存池分配都提前完成避免这些开销全部堆在第一个真实 token 上。代价是启动时多等几秒——这正是②阶段的来源。开关启动耗时首 token 延迟适用场景--warmup默认多几秒稳定生产、长期服务--no-warmup最短偏慢开发调试、批量跑分5 个提速开关按优先级逐一调1. 量化先让权重文件变小原理加载时间与文件大小近似成正比量化把 16 位权重压到 4 位左右文件缩小约 4 倍读盘时间同步缩短。命令用 tools/quantize/ 自带工具在项目 build 目录下执行./quantize model-f16.gguf model-q4_k_m.gguf q4_k_m格式体积相对 f16适用f161×需要全精度q5_k_m约 1/3精度优先q4_k_m约 1/4速度与精度平衡推荐验证ls -lh对比两个文件大小分别加载观察日志中 loading 阶段耗时应按比例缩短。2. 加载模式mmap 走默认内存吃紧再上 mlock原理默认用 mmap 映射权重文件系统按需换页如果内存紧张导致推理中频繁换页可用--load-mode mlock把权重钉在物理内存里换启动慢一点、换推理稳一点。参数行为代价--load-mode mmap默认按需换页内存紧张时偶发卡顿--load-mode mlock全量锁入 RAM占用等量物理内存--load-mode dioDirect IO 读取依赖文件系统支持验证启动日志中查看模型加载段落mlock 模式下权重会提前全量驻留推理期间不再有 page fault 波动。3. GPU 离载-ngl 配合 --flash-attn原理把 Transformer 层搬进显存后③阶段的矩阵乘法从 CPU 转到 GPU首 token 和后续生成速度都受益Flash Attention 进一步减少长上下文的显存往返。命令./llama-cli -m model-q4_k_m.gguf -ngl 999 -fa on参数取值说明-ngl数字 /auto/all离载层数上限默认all-faon/off/autoFlash Attention 开关默认 auto验证日志里应出现[cublas] offloading N layers to GPUN 应接近模型总层数若为 0 说明编译时没带 CUDA参考 docs/build.md。4. 线程对齐物理核心-t 与 -tb 分开设原理推理线程数超过物理核心数后超线程互相抢缓存速度反而下降prompt 批处理-tb是独立的批计算可以单独指定线程数。参数参数默认推荐-t/--threads逻辑核心数物理核心数-tb/--threads-batch同-t与-t相同或略低验证跑一遍./llama-bench -m model.gguf -t 4换-t 7再跑对比 prompt 处理速度。5. 预热开关的取舍开发关、生产开原理频繁重启的调试场景预热是纯开销长期服务则应保留把冷启动成本摊在启动阶段。llama-bench 跑分时同样默认先做一轮 warmupstderr 会打印warmup prompt run可用--no-warmup跳过。场景建议理由开发调试--no-warmup每次少等几秒生产/服务保持默认首 token 延迟稳定验证日志中出现warming up the model with an empty run说明预热生效。官方实测数据-ngl 与线程数的组合拳上面第 3、4 条的效果官方文档 docs/development/token_generation_performance_tips.md 给了一组真实基准机器为 A600048GB 7 个物理核心模型为 30B 参数 q4_0命令tokens/second仅-ngl 2000000未设 -t小于 0.1仅-t 7纯 CPU1.7-t 1 -ngl 20000005.5-t 7 -ngl 20000008.7-t 4 -ngl 20000009.1两个结论很直接离载后不控线程速度能掉一个数量级线程数并非越多越好4 就比 7 快。用同一张表做前后对比是检验任何参数调整最省事的方法。行动清单5 步把启动时间压下来拉代码并按 README 构建git clone https://gitcode.com/GitHub_Trending/ll/llama.cpp用./quantize把模型转成 q4_k_mls -lh确认体积缩小用-ngl 999 -fa on启动核对日志里offloading N layers to GPU-t设为物理核心数跑./llama-bench记录基线按场景决定预热开发加--no-warmup生产保持默认每步只改一个参数对比后再上下一项五步走完加载、预热、首 token 三个环节都有对应的开关和数据支撑启动慢不再是玄学问题。【免费下载链接】llama.cppLLM inference in C/C项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考