如何给 llama.cpp 添加新模型?从 PyTorch 权重到 GGUF 的完整转换工作流

发布时间:2026/10/23 1:53:34

如何给 llama.cpp 添加新模型?从 PyTorch 权重到 GGUF 的完整转换工作流 【免费下载链接】llama.cppLLM inference in C/C项目地址https://gitcode.com/gh_mirrors/llamacpp14/llama.cpp点击查看免费下载想让一个新的大语言模型跑在 llama.cpp 上吗本文完整梳理了 llama.cpp 的模型添加流程先用 Python 脚本把 HuggingFace 的 PyTorch 权重转换成 GGUF 格式再在 C 侧注册模型架构并实现 GGML 推理图。即使你是第一次参与开源 LLM 项目也能按步骤把新模型从权重文件变成可推理的 GGUF 文件。一、先看懂全局4 步完成一个模型移植官方开发指南 docs/development/HOWTO-add-model.md 把整个流程拆成了 4 个阶段步骤做什么主要文件1️⃣ 转换到 GGUF把 PyTorch 权重读出来映射成 GGUF 张量和元数据conversion/、convert_hf_to_gguf.py2️⃣ 注册架构在 C 侧声明新架构、参数和元数据src/llama-arch.h、src/llama-arch.cpp3️⃣ 实现推理图用 GGML 张量运算搭建前向计算图src/models/、src/llama-model.cpp4️⃣ 可选多模态添加视觉/音频编码器docs/multimodal.md、tools/mtmd/一个实用建议动手前先跑git log --oneline -- src/models看看最近 3 个添加新模型的提交。文档有时会滞后最新的社区代码才是最可靠的参照这一点项目内的 skills/add-new-model/SKILL.md 也反复强调。二、第 1 步把 PyTorch 权重转换成 GGUFGGUF 是 llama.cpp 的模型文件格式包含模型元数据层数、词表、chat 模板等和量化张量。转换工作全部在 Python 侧完成核心入口是 convert_hf_to_gguf.py它按config.json里的architectures字段自动找到对应的转换类。1. 注册转换类在 conversion/ 目录下为新架构创建一个类例如新架构叫MyModel继承TextModel纯文本模型或MmprojModel多模态模型ModelBase.register(MyModelForCausalLM) ModelBase.example(user/model) class MyModel(TextModel): model_arch gguf.MODEL_ARCH.MYMODEL两个要点register的参数必须与config.json中的架构名完全一致否则脚本无法自动匹配example指向一个用于自动化测试的模型优先选非门控的小模型。TextModel与MmprojModel的基类定义在 conversion/base.py 中已经帮你处理了大部分 hparam 读取、词表导出和元数据写入逻辑——你的子类只需要覆盖差异部分不要重复实现基类已有的功能。2. 定义 GGUF 张量布局在 gguf-py/gguf/constants.py 中补充三样东西MODEL_ARCH架构枚举对应 GGUF 文件里的架构字符串MODEL_ARCH_NAMES人类可读的架构名称MODEL_TENSORS这个架构包含哪些张量如token_embd、attn_qkv、ffn_down等。⚠️架构字符串要一次想清楚。GGUF 文件一旦以某个架构名发布社区就会基于它做量化和分发事后改名会破坏所有已有文件——项目官方文档特别警告了这一点。3. 映射原始张量名不同框架的权重命名五花八门gpt_neox.layers.{bid}.input_layernorm、transformer.h.{bid}.ln_1……llama.cpp 把它们统一成标准名。在 gguf-py/gguf/tensor_mapping.py 里为bid块下标层添加映射例如某模型的 attention norm 权重最终都会落到blk.{bid}.attn_norm。 通用规则优先复用已有张量名确认没有等价命名后再新增张量名必须以.weight或.bias结尾否则 tools/quantize/ 等工具无法正确识别权重。4. 运行转换下载好模型权重后一条命令即可完成转换--outtype控制输出精度支持f16、bf16、q8_0等python convert_hf_to_gguf.py /path/to/model --outtype f16转换脚本会读取模型配置、tokenizer、张量名称与数据写出 GGUF 元数据和张量。如果你的模型配置特殊比如词表非标准可能还需要覆盖set_gguf_parameters、set_vocab或modify_tensors方法。三、第 2 步在 C 侧注册模型架构GGUF 文件生成后llama.cpp 本体还不认识这个架构。需要在 C 代码中声明它在 src/llama-arch.h 中新增一个llm_arch枚举值在 src/llama-arch.cpp 的LLM_ARCH_NAMES映射表中注册架构名如有特殊元数据在 src/llama-model-loader.cpp 的加载器构造函数中读取如果模型使用 RoPE 位置编码在 src/llama-model.cpp 的llama_model_rope_type函数中补一个 case。 容易踩的坑项目里存在多处对llm_arch做 switch/迭代的代码比如 src/llama-model-saver.cpp、必需 hparam 校验列表。漏掉其中一处是 CI 测试test-llama-archs失败的常见原因建议直接全局搜索LLM_ARCH_逐一排查。另外一个新手常忽略的细节ggml 中张量的维度顺序通常与 PyTorch 相反。理解 ggml 的矩阵存储布局见下图能帮你避免一大类形状对不上的 bug上图展示了 ggml 中 A/B 矩阵的行主序Row-major与列主序Column-major布局以及C ABᵀ等运算下各维度的对应关系。四、第 3 步实现 GGML 推理图这是移植中最有挑战、也最有意思的部分——用 ggml 张量运算重建模型的前向计算图在 src/models/ 下新建name.cpp创建继承自llama_model_base的 struct目前该目录已有 150 个架构实现风格高度统一在其build_arch_graph方法中实现注意力、FFN、归一化等层级的图构建逻辑在llama_model_mapping函数中注册你的架构让它能被正确实例化。动手前先通读 10 个左右 src/models/ 下的现有文件比如llama_model_llama、llama_model_dbrx、llama_model_bert确认结构体布局与命名风格与当前代码一致——模式会随时间演进照抄旧文档可能过时的代码。 调试工具推荐用 examples/eval-callback/ 逐层打印中间张量与 PyTorch 原始模型的输出逐层对比能快速定位图构建错误。五、可选多模态编码器如果你的模型带视觉/音频输入需要额外做编码器支持详见 docs/multimodal.md转换脚本中继承MmprojModel而不是TextModel在 src/models/clip.cpp 中添加编码器定义在tools/mtmd中实现预处理器和编码器图。⚠️ 关键原则能复用就绝不新写。大量视觉编码器siglip、pixtral、qwen 系列等已经支持你的模型通常只需要写一个新的 projector。需要新增预处理器或改动共享基础设施时应当先把文本模型落地编码器作为独立的后续 PR。六、验证确认你的转换是对的examples/model-conversion/ 提供了一套完整的验证工具链官方验证清单如下转换后检查原始与转换后张量的一致性logits 校验对比原始模型与转换后模型在同一输入下的 logits执行量化tools/quantize/并再次验证跑困惑度评估依次用 tools/cli、tools/completion/、tools/imatrix/、tools/quantize/、tools/server/ 做冒烟测试先保证 CPU 后端可用CUDA/Metal 等后端可以作为独立 PR 后续补充。 提示如果新模型是某个已支持家族的新版本先验证旧版本能通过 logits 校验。已有的数值差异可能与你的工作无关提前区分能省下大量调试时间。七、高频踩坑清单这些是过往 PR 评审中反复出现的问题提前自查可以少走很多弯路❌ 不要在 Python 转换脚本和 C 加载路径中重复校验同一个 hparam选一层负责即可❌ 关键的 hparam缺失会导致崩溃或输出错误的必须硬报错不要静默回退到默认值✅ 常量级张量变换如norm(1 weight)、张量重排尽量在转换时折进权重而不是在推理图里做Gemma 3 的做法❌ 不要用自定义 sin/cos 去绕开 RoPE 限制统一用ggml_rope_ext表达不了就先和 maintainer 讨论✅ 聊天模板应在转换时注入 GGUF不要硬编码进 C 二进制。总结给 llama.cpp 添加新模型的完整工作流可以浓缩为一句话Python 侧把权重翻译成 GGUFC 侧把架构实现成推理图。在 conversion/ 注册转换类补全 constants.py 与 tensor_mapping.py运行 convert_hf_to_gguf.py 生成 GGUF在 src/llama-arch.h / src/llama-arch.cpp 注册架构在 src/models/ 实现 GGML 图并接入llama_model_mapping用 examples/model-conversion/ 工具链完成 logits 校验、量化与困惑度评估。完整细节请阅读官方指南 docs/development/HOWTO-add-model.md动手前记得先浏览几个最近合并的新模型 PR——社区最新的代码约定永远是最好的参考。赞分享【免费下载链接】llama.cppLLM inference in C/C项目地址https://gitcode.com/gh_mirrors/llamacpp14/llama.cpp点击查看免费下载相关推荐llama.cpp 多模态实战Granite Vision 模型从 HF 权重到 GGUF 的完整转换流程llama.cpp 多模态实战Granite Vision 模型从 HF 权重到 GGUF 的完整转换流程 Granite Vision如 IBM 的 gr人工智能大模型推理引擎本地部署模型推理服务模型量化llama.cpp 模型转换工作流详解从 HuggingFace 模型到 GGUF 的转换、验证、量化与发布llama.cpp 模型转换工作流详解从 HuggingFace 模型到 GGUF 的转换、验证、量化与发布 本文围绕 examples/model conv人工智能大模型推理引擎本地部署模型推理服务模型量化llama.cpp 多模态实战MiniCPM-V 4.5 从 PyTorch 模型转换到 GGUF 推理全流程llama.cpp 多模态实战MiniCPM V 4.5 从 PyTorch 模型转换到 GGUF 推理全流程 本文基于仓库文档 MiniCPM V 4.5人工智能大模型推理引擎本地部署模型推理服务模型量化上一篇如何理解Bromite的GNU GPL v3许可证保护用户自由的终极指南下一篇Yet-Another-Bench-Script低带宽服务器测试-i和-r标志的巧妙应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/23 1:48:33

05:年龄与疾病

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/23 1:48:33

Agilent/HP 8720D 网络分析仪

仪器型号: 8720D 仪器品牌: Agilent/HP 技术指标: 50MHz~20GHz 频率范围:50MHz到20GHz 有快速扫描的内置合成信号源 集成化的转换S参数测试装置 矢量接收机、误差修正、时域功能 从外部磁盘驱动器直接储存/调用 达103dB动态范围 H…

2026/10/23 4:03:51

MATLAB常见问题30秒速查与高效排障指南

1. MATLAB高效排障指南:30秒解决常见问题作为一名MATLAB老用户,我深知在科研和工程计算中,那些突如其来的报错信息有多让人头疼。记得刚接触MATLAB时,一个简单的矩阵维度不匹配就能让我折腾半天。经过多年实战,我总结出…

2026/10/23 4:03:51

libva中的DRM模块

主要内容 本文主要就libva中的DRM的流程进行简单说明,libva版本为libva-2.11.0(版本号为1.11.0),Digital Rights Management(DRM)指的是数字版权管理,用以保护具有版权的数字产品,包括视频,音乐,电子书等等…

2026/10/23 4:03:51

Java:54-Linux概述

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/23 4:03:50

linux软连接和硬链接

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/23 3:58:50

LangGraph+MCP实战:构建AI-SPC智能根因分析系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑