把“模型”从抽象能力还原成真实张量资产:参数、权重、激活值、checkpoint、adapter、safetensors、GGUF、ONNX、量化格式和加载链路到底是什么
| 资产 / 阶段 | 它是什么 | 工程上影响什么 | 常见误解 |
|---|---|---|---|
| config | 层数、hidden size、head 数、词表大小、上下文长度、架构类型等元数据 | 决定如何创建模型骨架和解释权重形状 | 以为只有权重文件重要 |
| tokenizer | 文本与 token id 的映射协议 | 决定输入输出 id 是否和权重学到的词表一致 | 随便换 tokenizer 仍能保持能力 |
| weights | 训练得到的参数张量集合 | 决定模型容量、文件大小、显存占用和加载时间 | 把权重文件等同于完整可用系统 |
| runtime | 把张量调度到 CPU / GPU / NPU 并执行算子的引擎 | 决定吞吐、延迟、batch、KV Cache 和硬件兼容 | 只要权重相同,哪个引擎都一样 |
| activations | 一次请求中间产生的临时张量 | 影响训练显存、推理峰值内存和长上下文成本 | 只算权重显存,不算运行时中间状态 |
模型不是一个神秘对象,而是一组按架构命名的张量,加上一套 tokenizer、config、generation config 和运行时约定。权重是能力资产,runtime 是执行能力,tokenizer 是输入输出协议。
| 概念 | 训练时 | 推理时 | 为什么重要 |
|---|---|---|---|
| Parameter / Weight | 被梯度更新的可学习张量 | 固定参与前向计算 | 决定模型文件大小和基础显存需求 |
| Gradient | loss 对参数的导数,用来更新权重 | 一般不存在,除非做训练 / 微调 / 反传分析 | 训练显存远高于纯推理的重要原因 |
| Optimizer State | Adam 的动量、方差等状态 | 推理不需要 | 训练 checkpoint 可能比推理权重大很多 |
| Activation | 前向中间结果,需要保留用于反传 | 前向临时结果,可尽快释放 | 长序列、batch 和训练峰值显存都受它影响 |
| KV Cache | 训练通常不作为长期缓存保存 | decode 时保存历史 Key / Value | 长上下文和高并发推理的显存核心瓶颈 |
| Embedding Matrix | token id 到向量的可学习表 | 输入查表,输出常和 lm_head 共享或相关 | 词表大小会直接影响参数量和输出候选空间 |
格式转换、LoRA 合并、权重裁剪、量化和跨框架加载都依赖张量名和形状能对上。张量名错、shape 错、config 错,轻则加载失败,重则模型能跑但行为异常。
| 资产 | 里面通常有什么 | 适合用途 | 注意点 |
|---|---|---|---|
| Training Checkpoint | 模型权重、optimizer state、scheduler、随机数状态、训练步数 | 继续训练、断点恢复、实验复现 | 体积很大,不一定适合直接推理分发 |
| Inference Weights | 只保留推理需要的模型权重和配置 | 部署、发布、模型仓库分发 | 必须带齐 tokenizer、config、generation config |
| Adapter / LoRA | 低秩增量权重,依赖 base model | 低成本微调、多客户适配、快速迭代 | 离开正确 base model 就没有意义 |
| Merged Weights | base model + adapter 合并后的完整权重 | 简化部署、减少运行时动态加载 | 合并后版本、许可证和回滚要重新登记 |
| Delta / Patch | 相对某个基座的权重差异 | 节省分发体积、受限许可场景 | 必须严格绑定基座 hash 和版本 |
| 格式 | 核心定位 | 优势 | 风险 / 边界 |
|---|---|---|---|
| safetensors | 安全、快速加载张量的权重格式 | 避免 pickle 执行风险,支持元数据和分片 | 只是张量容器,仍需 config / tokenizer |
| PyTorch .bin / .pt | 传统 PyTorch 权重或 checkpoint | 生态广、训练流程常见 | pickle 反序列化有安全风险,生产分发要谨慎 |
| GGUF | llama.cpp 生态常用的本地推理格式 | 适合 CPU / 本地 / 量化部署,单文件友好 | 转换后要验证 tokenizer、chat template 和量化质量 |
| ONNX | 跨框架计算图交换格式 | 利于推理优化和硬件后端适配 | 动态 shape、特殊算子和生成循环可能复杂 |
| TensorRT / Engine | 针对特定 GPU 和输入形状优化后的引擎 | 性能强,适合固定生产形态 | 硬件、驱动、shape 和版本绑定更强 |
| MLC / Core ML / NPU 格式 | 端侧和特定硬件部署格式 | 低功耗、靠近用户、离线可用 | 设备碎片、算子支持和更新治理更难 |
不同格式会影响加载方式、内存映射、量化支持、算子融合、硬件兼容、分发体积和安全边界。格式转换不是“另存为”,而是一次需要评测和回滚的模型变更。
| 变量 | 直觉估算 | 容易漏掉什么 | 继续下钻 |
|---|---|---|---|
| 权重显存 | 参数量 × 每参数字节数,例如 FP16 约 2 bytes / param | 分片、metadata、runtime buffer、对齐开销 | 压缩 / 量化 |
| KV Cache | 随层数、hidden size、序列长度、batch、精度增长 | 长上下文并发时可能超过权重显存压力 | 推理计算 / KV Cache |
| Activations | 训练时大量保留,推理时通常临时释放 | prefill 峰值、FlashAttention、pipeline 并行策略 | 训练 / 推理 / Scaling |
| Optimizer State | Adam 类优化器可能额外保存多份参数大小状态 | 训练 checkpoint 远大于推理权重 | 优化器 / Loss |
| Quantization | INT8 / INT4 降低权重存储和带宽压力 | scale、zero point、混合精度层、kernel 支持 | 开源部署 |
冷启动、模型切换、弹性扩容和多模型路由,都会被权重大小、存储带宽、节点缓存、分片策略和预热流程影响。模型资产治理做不好,推理网关再聪明也会卡在加载和分发上。
| 动作 | 看似在做什么 | 实际可能改变什么 | 必须验证 |
|---|---|---|---|
| 格式转换 | 把 safetensors 转成 GGUF / ONNX / engine | 算子、精度、tokenizer 元数据、chat template、动态 shape | 同输入回放、结构化输出、停词、长上下文 |
| 量化 | 降低权重 bit 数 | 分布校准、数值误差、长尾能力、工具参数稳定性 | 业务评测、安全评测、格式评测、设备矩阵 |
| LoRA 合并 | 把 adapter 合入 base model | 模型版本、能力边界、许可证和回滚路径 | base hash、merge 脚本、差异评测 |
| 裁剪 / 删除层 | 减少模型大小或加速 | 内部表示、长上下文、复杂推理和安全拒答 | 分桶评测、拒答边界、输出一致性 |
| 换 runtime | 从一个引擎切到另一个引擎 | 采样、stop、padding、KV Cache、batch、精度路径 | 端到端 trace、延迟、输出差异、失败率 |
如果说 Tokenizer 解释文本如何变成 token id,Transformer 解释这些 id 如何被计算,那么这一页解释“被训练出来并部署出去的模型资产”到底是什么:权重张量、checkpoint、adapter、格式、量化和加载链路。