文章目录大模型格式从训练到部署0. 训练/微调的起点Hugging Face Transformers 格式一、部署推理阶段三种大模型部署格式1.1. 选择合适的部署格式二、模型优化【重点】2.1. **模型压缩让大模型变小、变快**2.1.1. 模型压缩三剑客权重量化、权重剪枝、蒸馏2.1.2. 权重量化在原模型上降精度2.1.3. 权重剪枝在原模型上删连接2.1.4. 知识蒸馏训练一个全新的小模型大模型格式从训练到部署大模型的生命周期通常分为两个阶段训练/微调阶段和部署推理阶段分别对应不同格式。0. 训练/微调的起点Hugging Face Transformers 格式Hugging Face 格式的核心文件config.json model.safetensors / .bin tokenizer 系列文件如下图在 Llama-Factory 导出的完整微调后的大模型。定位工业标准的模型训练和微调的原始格式用于模型训练、微调、评估。特点生态最完整Hugging Face Hub 上有超 16 万模型支持 PyTorch/TensorFlow 后端灵活性最高注意不适合直接部署体积大、推理速度慢需要转换为下方三种部署格式之一转换关系Hugging Face 格式 (原始格式)├── 转换为 GGUF → 用于 llama.cpp / Ollama 等本地 CPU 推理├── 导出为 ONNX → 可进一步转为 TensorRT / OpenVINO / Core ML└── 转换为 TFLite → 用于 Android / 嵌入式设备一、部署推理阶段三种大模型部署格式三种大模型部署时用的文件格式 / 载体ONNX、GGUF与TFLite。真实场景应基于部署设备去选择模型格式主要优势典型适用场景GGUF轻量本地推理首选支持多级量化CPU 内存映射实现秒级加载llama.cpp 原生支持普通电脑消费级 CPU / 低显存 GPU、Ollama、llama.cpp 生态ONNX跨框架兼容好NVIDIA 硬件优化完善兼容好PC / GPU 服务器、边缘设备、需要跨框架迁移的场景TFLite专为移动设备优化Android 生态支持好Android和IoT设备的首选格式体积小、内存占用低补充说明如果你要部署到 iOS / macOS更推荐 Core ML 格式。如果是 NVIDIA 云端 GPU 极致加速可用 TensorRT (.engine)它通常通过 ONNX 转换得到。例如 ONNX 格式的大模型https://www.modelscope.cn/models/onnx-community/Qwen3-0.6B-ONNX例如 TFLite 格式的大模型https://www.modelscope.cn/models/google/gemma-1.1-2b-it-tflite1.1. 选择合适的部署格式iOS Core ML (优先使用ANE)Android TFLite Hexagon Delegate 或 ONNX Runtime Mobile二、模型优化【重点】如果部署后发现模型运行效率低、或模型太大需要进一步压缩模型。注选择模型时尽量选择已经蒸馏、剪枝完的模型避免自己再进行蒸馏。模型的进一步压缩的目标在尽量不牺牲精度的前提下让AI模型跑得更快、更省、更远。2.1.模型压缩让大模型变小、变快基础知识了解最重要的概念模型文件里装的是什么1. 下载的模型文件几个 GB里面装的是无数个数字权重。没有文字、没有知识库从头到尾就只有一大堆普通小数比如 0.25、1.36、-0.78 这种。AI 所有的聪明、会说话、懂知识全靠这堆数字撑起来。2. 7B70亿参数就是整整70亿个这种数字参数 就是一个单独的数字7B 模型直白说文件里老老实实存了70亿个独立数字。3. 重点每个数字代表神经元之间「连接的重要程度」把神经网络想成无数个节点神经元互相拉线连起来每两根神经元之间有一根连线每一根连线对应一个数字这个数字多大就代表这根连线影响力有多强数字大这条通路很重要信号优先走这里数字小这条通路不重要几乎不起作用负数起到抑制、抵消的作用简单说一个数字 一根神经连线的强弱等级。模型学知识的过程就是自动把这70亿个数字调到最合适的大小固定下来存进文件。4. 微调调整这些数字模型出厂自带一套默认70亿个数字是通用能力。微调不改变网络结构只少量修改里面一部分数字改完之后神经连线的强弱变了模型就专门擅长某一件事比如写文案、做客服、懂行业术语。5. 量化压缩这些数字的精度原本每个数字精度很高占用字节多文件大、耗显存。量化就是不改变数字大致大小只降低它的精细度比如原本是超高精度小数改成普通精度整数数字还能用、模型智商几乎没变但文件变小、跑得更快。核心一句话总结只记数字模型里全是海量普通数字名字叫权重一个数字对应一条神经连线的强弱70亿参数 70亿个控制连线强弱的数字微调 改这些数字量化 压缩这些数字的精细度。大模型推理执行流程你输入中文问题⬇️【第一步】分词器 Tokenizer汉字 / 词语 →逐字转换为整数数字编号示例你好➡️对应转换成编号[1024, 2048]⬇️【第二步】嵌入编码 Embedding将每一个数字编号分别转换为专属语义向量一串小数你 1024 → 向量 [0.15, -0.27, 0.63……]好 2048 → 向量 [0.22, 0.51, -0.33……]⬇️【第三步】进入模型权重计算输入向量 和 模型内几十亿权重数字做矩阵运算⬇️【第四步】自动激活相关权重和问题语义相关的权重 → 自动激活、参与主导计算无关的权重 → 抑制弱化、不参与主导⬇️【第五步】预测下一字概率依靠激活的权重运算逐个算出后续汉字的概率⬇️【第六步】分词器解码转文字概率数字 → 反向翻译还原为中文汉字⬇️输出 AI 最终回答**接下来先继续了解概念**什么是神经网络、什么是权重**1. 先认识一下什么是神经网络简单说神经网络就是一张由“圆圈”和“连线”组成的网圆圈 神经元可以想象成一个小计算器连线 连接神经元之间的通道它的工作方式给你看一张猫的图片信息从左边进入依次流过每一层的**“神经元”和它们之间的“连接”**一层接一层直到最右边输出结果——“这是猫”。打个比方就像一条工厂流水线。原料图片从入口进入经过一道道工序神经元层每道工序的工人之间用手递材料连接最后产品判断结果从出口出来。“学习”是什么意思就是不断调整每条“连线”上的数字让最终输出越来越准。这些数字就是下面要讲的权重。2. 什么叫“权重”Weight这个名字来自一个非常生活化的类比想象你要决定“今晚吃什么”。朋友说“火锅好吃”权重 0.7—— 很重要你说“太辣了”权重 0.3—— 不太重要最后你说“今天太累”权重 0.1—— 基本忽略每个因素都有一个重要性程度或者叫**“加权值”。数值越大这个因素在最终决策中的“分量越重”**。在神经网络里完全一样输入A → 乘以 权重0.9 → 对结果影响很大权重高输入B → 乘以 权重0.1 → 对结果影响很小权重低所以这些可调的数字就叫做权重——因为它们决定了每个输入信号的“分量”。2.1.1. 模型压缩三剑客权重量化、权重剪枝、蒸馏1. 权重量化(Quantization)【类比有一把毫米级精度的尺子实际用不到这么大的精度权重量化就是把精度调低】2. 权重剪枝(Pruning)【剪掉可有可无的连接例如剪掉权重值小于0.01的连接类比剪掉多余的树枝操作简单一行代码搞定】3. 知识蒸馏(Knowledge Distillation)【大模型当老师教小模型只学“解题思路”不背“全部细节”。例如用整本百科全书大模型的考试要点训练一本小手册小模型达到同等考试水平】在实际工业应用中这三者经常组合使用先用知识蒸馏训练一个小模型学生再对这个学生模型做剪枝去掉不重要的连接最后做量化降低数值精度。三种模型优化比较2.1.2. 权重量化在原模型上降精度参考来源https://cloud.tencent.com/developer/article/2546431在部署推理时量化只在加载到显存/内存的那一刻才转成 INT8不改变原模型文件。# 案例将 FP32 转为 INT8/INT4 等低位精度加载到内存/显存中。fromtransformersimportAutoModelForCausalLM,AutoTokenizer,BitsAndBytesConfig# 8-bit 量化配置quantization_configBitsAndBytesConfig(load_in_8bitTrue,# 加载时将 FP32/FP16 权重转为 INT8减少约一半显存)# 模型 IDQwen 最小开源模型约 0.6B 参数model_idQwen/Qwen3-0.6B# 以 8-bit 精度加载模型modelAutoModelForCausalLM.from_pretrained(model_id,quantization_configquantization_config,# 使用上面定义的 8-bit 配置device_mapauto# 自动分配到可用的 GPU/CPU)# 加载对应的分词器tokenizerAutoTokenizer.from_pretrained(model_id)如果 Hugging Face 下载慢可以换成 ModelScope 魔塔的加载方式frommodelscopeimportAutoModelForCausalLM,AutoTokenizerfromtransformersimportBitsAndBytesConfig# 8-bit 量化配置quantization_configBitsAndBytesConfig(load_in_8bitTrue,# 加载时转为 INT8 精度)# 模型 IDModelScope 路径model_idqwen/Qwen3-0.6B# 以 8-bit 精度加载模型modelAutoModelForCausalLM.from_pretrained(model_id,quantization_configquantization_config,# 8-bit 量化device_mapauto# 自动分配设备)# 加载分词器tokenizerAutoTokenizer.from_pretrained(model_id)2.1.3. 权重剪枝在原模型上删连接直接修改原模型的权重矩阵生成新模型文件。删除不重要的权重连接以减小模型规模。可用 torch.nn.utils.prune 实现。importtorchimporttorch.nn.utils.pruneasprunefromtransformersimportAutoModelForCausalLM# 1. 加载需要裁剪的模型Qwen 最小开源模型model_idQwen/Qwen3-0.6BmodelAutoModelForCausalLM.from_pretrained(model_id,torch_dtypetorch.float32,# 剪枝需要 fp32 精度device_mapauto)# 2. 开始剪枝对第一层 Transformer 的注意力输出投影做 30% 随机剪枝prune.random_unstructured(model.model.layers[0].self_attn.o_proj,# Qwen3 的层名nameweight,# 裁剪权重amount0.3# 裁剪30%)# 3. 验证稀疏度sparsity(model.model.layers[0].self_attn.o_proj.weight0).float().mean()print(f稀疏度:{sparsity:.2%})# 4. 固化剪枝结果并保存prune.remove(model.model.layers[0].self_attn.o_proj,weight)model.save_pretrained(./qwen0.6b-pruned)2.1.4. 知识蒸馏训练一个全新的小模型训练一个全新的小模型模仿大模型的行为。# 简化伪代码teacher_logitsteacher(input_ids).logits# 老师大模型student_logitsstudent(input_ids).logits# 学生小模型# 本质是让学生模仿老师的“思考方式”输出概率而非仅背答案# 实际使用时建议加入温度参数 T 软化分布学习效果更好lossnn.KLDivLoss()(F.log_softmax(student_logits),# 学生侧log-概率F.softmax(teacher_logits)# 老师侧概率分布)
大模型轻量化部署:格式选型(ONNX/GGUF/TFLite) + 压缩三剑客(量化/剪枝/蒸馏)
发布时间:2026/5/28 9:18:27
文章目录大模型格式从训练到部署0. 训练/微调的起点Hugging Face Transformers 格式一、部署推理阶段三种大模型部署格式1.1. 选择合适的部署格式二、模型优化【重点】2.1. **模型压缩让大模型变小、变快**2.1.1. 模型压缩三剑客权重量化、权重剪枝、蒸馏2.1.2. 权重量化在原模型上降精度2.1.3. 权重剪枝在原模型上删连接2.1.4. 知识蒸馏训练一个全新的小模型大模型格式从训练到部署大模型的生命周期通常分为两个阶段训练/微调阶段和部署推理阶段分别对应不同格式。0. 训练/微调的起点Hugging Face Transformers 格式Hugging Face 格式的核心文件config.json model.safetensors / .bin tokenizer 系列文件如下图在 Llama-Factory 导出的完整微调后的大模型。定位工业标准的模型训练和微调的原始格式用于模型训练、微调、评估。特点生态最完整Hugging Face Hub 上有超 16 万模型支持 PyTorch/TensorFlow 后端灵活性最高注意不适合直接部署体积大、推理速度慢需要转换为下方三种部署格式之一转换关系Hugging Face 格式 (原始格式)├── 转换为 GGUF → 用于 llama.cpp / Ollama 等本地 CPU 推理├── 导出为 ONNX → 可进一步转为 TensorRT / OpenVINO / Core ML└── 转换为 TFLite → 用于 Android / 嵌入式设备一、部署推理阶段三种大模型部署格式三种大模型部署时用的文件格式 / 载体ONNX、GGUF与TFLite。真实场景应基于部署设备去选择模型格式主要优势典型适用场景GGUF轻量本地推理首选支持多级量化CPU 内存映射实现秒级加载llama.cpp 原生支持普通电脑消费级 CPU / 低显存 GPU、Ollama、llama.cpp 生态ONNX跨框架兼容好NVIDIA 硬件优化完善兼容好PC / GPU 服务器、边缘设备、需要跨框架迁移的场景TFLite专为移动设备优化Android 生态支持好Android和IoT设备的首选格式体积小、内存占用低补充说明如果你要部署到 iOS / macOS更推荐 Core ML 格式。如果是 NVIDIA 云端 GPU 极致加速可用 TensorRT (.engine)它通常通过 ONNX 转换得到。例如 ONNX 格式的大模型https://www.modelscope.cn/models/onnx-community/Qwen3-0.6B-ONNX例如 TFLite 格式的大模型https://www.modelscope.cn/models/google/gemma-1.1-2b-it-tflite1.1. 选择合适的部署格式iOS Core ML (优先使用ANE)Android TFLite Hexagon Delegate 或 ONNX Runtime Mobile二、模型优化【重点】如果部署后发现模型运行效率低、或模型太大需要进一步压缩模型。注选择模型时尽量选择已经蒸馏、剪枝完的模型避免自己再进行蒸馏。模型的进一步压缩的目标在尽量不牺牲精度的前提下让AI模型跑得更快、更省、更远。2.1.模型压缩让大模型变小、变快基础知识了解最重要的概念模型文件里装的是什么1. 下载的模型文件几个 GB里面装的是无数个数字权重。没有文字、没有知识库从头到尾就只有一大堆普通小数比如 0.25、1.36、-0.78 这种。AI 所有的聪明、会说话、懂知识全靠这堆数字撑起来。2. 7B70亿参数就是整整70亿个这种数字参数 就是一个单独的数字7B 模型直白说文件里老老实实存了70亿个独立数字。3. 重点每个数字代表神经元之间「连接的重要程度」把神经网络想成无数个节点神经元互相拉线连起来每两根神经元之间有一根连线每一根连线对应一个数字这个数字多大就代表这根连线影响力有多强数字大这条通路很重要信号优先走这里数字小这条通路不重要几乎不起作用负数起到抑制、抵消的作用简单说一个数字 一根神经连线的强弱等级。模型学知识的过程就是自动把这70亿个数字调到最合适的大小固定下来存进文件。4. 微调调整这些数字模型出厂自带一套默认70亿个数字是通用能力。微调不改变网络结构只少量修改里面一部分数字改完之后神经连线的强弱变了模型就专门擅长某一件事比如写文案、做客服、懂行业术语。5. 量化压缩这些数字的精度原本每个数字精度很高占用字节多文件大、耗显存。量化就是不改变数字大致大小只降低它的精细度比如原本是超高精度小数改成普通精度整数数字还能用、模型智商几乎没变但文件变小、跑得更快。核心一句话总结只记数字模型里全是海量普通数字名字叫权重一个数字对应一条神经连线的强弱70亿参数 70亿个控制连线强弱的数字微调 改这些数字量化 压缩这些数字的精细度。大模型推理执行流程你输入中文问题⬇️【第一步】分词器 Tokenizer汉字 / 词语 →逐字转换为整数数字编号示例你好➡️对应转换成编号[1024, 2048]⬇️【第二步】嵌入编码 Embedding将每一个数字编号分别转换为专属语义向量一串小数你 1024 → 向量 [0.15, -0.27, 0.63……]好 2048 → 向量 [0.22, 0.51, -0.33……]⬇️【第三步】进入模型权重计算输入向量 和 模型内几十亿权重数字做矩阵运算⬇️【第四步】自动激活相关权重和问题语义相关的权重 → 自动激活、参与主导计算无关的权重 → 抑制弱化、不参与主导⬇️【第五步】预测下一字概率依靠激活的权重运算逐个算出后续汉字的概率⬇️【第六步】分词器解码转文字概率数字 → 反向翻译还原为中文汉字⬇️输出 AI 最终回答**接下来先继续了解概念**什么是神经网络、什么是权重**1. 先认识一下什么是神经网络简单说神经网络就是一张由“圆圈”和“连线”组成的网圆圈 神经元可以想象成一个小计算器连线 连接神经元之间的通道它的工作方式给你看一张猫的图片信息从左边进入依次流过每一层的**“神经元”和它们之间的“连接”**一层接一层直到最右边输出结果——“这是猫”。打个比方就像一条工厂流水线。原料图片从入口进入经过一道道工序神经元层每道工序的工人之间用手递材料连接最后产品判断结果从出口出来。“学习”是什么意思就是不断调整每条“连线”上的数字让最终输出越来越准。这些数字就是下面要讲的权重。2. 什么叫“权重”Weight这个名字来自一个非常生活化的类比想象你要决定“今晚吃什么”。朋友说“火锅好吃”权重 0.7—— 很重要你说“太辣了”权重 0.3—— 不太重要最后你说“今天太累”权重 0.1—— 基本忽略每个因素都有一个重要性程度或者叫**“加权值”。数值越大这个因素在最终决策中的“分量越重”**。在神经网络里完全一样输入A → 乘以 权重0.9 → 对结果影响很大权重高输入B → 乘以 权重0.1 → 对结果影响很小权重低所以这些可调的数字就叫做权重——因为它们决定了每个输入信号的“分量”。2.1.1. 模型压缩三剑客权重量化、权重剪枝、蒸馏1. 权重量化(Quantization)【类比有一把毫米级精度的尺子实际用不到这么大的精度权重量化就是把精度调低】2. 权重剪枝(Pruning)【剪掉可有可无的连接例如剪掉权重值小于0.01的连接类比剪掉多余的树枝操作简单一行代码搞定】3. 知识蒸馏(Knowledge Distillation)【大模型当老师教小模型只学“解题思路”不背“全部细节”。例如用整本百科全书大模型的考试要点训练一本小手册小模型达到同等考试水平】在实际工业应用中这三者经常组合使用先用知识蒸馏训练一个小模型学生再对这个学生模型做剪枝去掉不重要的连接最后做量化降低数值精度。三种模型优化比较2.1.2. 权重量化在原模型上降精度参考来源https://cloud.tencent.com/developer/article/2546431在部署推理时量化只在加载到显存/内存的那一刻才转成 INT8不改变原模型文件。# 案例将 FP32 转为 INT8/INT4 等低位精度加载到内存/显存中。fromtransformersimportAutoModelForCausalLM,AutoTokenizer,BitsAndBytesConfig# 8-bit 量化配置quantization_configBitsAndBytesConfig(load_in_8bitTrue,# 加载时将 FP32/FP16 权重转为 INT8减少约一半显存)# 模型 IDQwen 最小开源模型约 0.6B 参数model_idQwen/Qwen3-0.6B# 以 8-bit 精度加载模型modelAutoModelForCausalLM.from_pretrained(model_id,quantization_configquantization_config,# 使用上面定义的 8-bit 配置device_mapauto# 自动分配到可用的 GPU/CPU)# 加载对应的分词器tokenizerAutoTokenizer.from_pretrained(model_id)如果 Hugging Face 下载慢可以换成 ModelScope 魔塔的加载方式frommodelscopeimportAutoModelForCausalLM,AutoTokenizerfromtransformersimportBitsAndBytesConfig# 8-bit 量化配置quantization_configBitsAndBytesConfig(load_in_8bitTrue,# 加载时转为 INT8 精度)# 模型 IDModelScope 路径model_idqwen/Qwen3-0.6B# 以 8-bit 精度加载模型modelAutoModelForCausalLM.from_pretrained(model_id,quantization_configquantization_config,# 8-bit 量化device_mapauto# 自动分配设备)# 加载分词器tokenizerAutoTokenizer.from_pretrained(model_id)2.1.3. 权重剪枝在原模型上删连接直接修改原模型的权重矩阵生成新模型文件。删除不重要的权重连接以减小模型规模。可用 torch.nn.utils.prune 实现。importtorchimporttorch.nn.utils.pruneasprunefromtransformersimportAutoModelForCausalLM# 1. 加载需要裁剪的模型Qwen 最小开源模型model_idQwen/Qwen3-0.6BmodelAutoModelForCausalLM.from_pretrained(model_id,torch_dtypetorch.float32,# 剪枝需要 fp32 精度device_mapauto)# 2. 开始剪枝对第一层 Transformer 的注意力输出投影做 30% 随机剪枝prune.random_unstructured(model.model.layers[0].self_attn.o_proj,# Qwen3 的层名nameweight,# 裁剪权重amount0.3# 裁剪30%)# 3. 验证稀疏度sparsity(model.model.layers[0].self_attn.o_proj.weight0).float().mean()print(f稀疏度:{sparsity:.2%})# 4. 固化剪枝结果并保存prune.remove(model.model.layers[0].self_attn.o_proj,weight)model.save_pretrained(./qwen0.6b-pruned)2.1.4. 知识蒸馏训练一个全新的小模型训练一个全新的小模型模仿大模型的行为。# 简化伪代码teacher_logitsteacher(input_ids).logits# 老师大模型student_logitsstudent(input_ids).logits# 学生小模型# 本质是让学生模仿老师的“思考方式”输出概率而非仅背答案# 实际使用时建议加入温度参数 T 软化分布学习效果更好lossnn.KLDivLoss()(F.log_softmax(student_logits),# 学生侧log-概率F.softmax(teacher_logits)# 老师侧概率分布)