国产大模型推理优化究竟如何突破?从BF16/FP8向INT8的转换过程中,量化误差始终是一块难啃的硬骨头。本文梳理了来自金融AI一线团队的实战经验,从技术原理到落地操作,力求讲深讲透。
核心看点
1. 国产大模型推理阶段如何有效应对量化误差带来的准确率下降
2. 从技术层面深入剖析BF16/FP8转为INT8时精度损失的根本原因
3. 基于真实落地经验的优化方案与性能提升策略

目前,主流大模型的训练仍高度依赖非国产硬件,模型发布时参数数据结构通常采用BF16或FP8。但国产推理硬件,例如昇腾910系列,主要面向INT8格式,对BF16或FP8的支持较为有限。从BF16/FP8迁移到INT8,精度难免受损,实际任务中准确率会出现下滑。如何在有限的数据和计算资源下高效攻克这一难题,已成为必须面对的关键挑战。下文将从技术原理出发,结合一线实战经验,提供若干切实可行的优化方案,在当前阶段具有重要的参考价值。
表一 部分先进国产大模型(截至2025年5月)
一、引言
当前国产大模型的主力选手主要包括DeepSeek R1/V3系列和Qwen3系列。DeepSeek R1于2025年1月发布,聚焦数学竞赛、代码生成、逻辑推理等高难度任务,直接对标OpenAI最先进的GPT模型,推理成本却仅为同级模型的1/30。它通过支持深度思考链(长思维链设计),显著提升了复杂问题的解决能力,2025年3月和5月分别推出了迭代版本。DeepSeek R1/V3模型总参数为671B MoE,激活37B,这一规模对不少中小机构而言仍较大,但其基于Qwen3 8B蒸馏的版本则更为轻量,适合个人本地使用。Qwen3系列则覆盖了多种参数规模,从8B甚至更小的个人版,到235B MoE(激活22B)和32B非MoE版本,在多数业务场景中适应性极广。Qwen3系列吸收了DeepSeek的深度思考链设计并进一步演化,集成了“快思考”(低算力秒回简单问题)和“慢思考”(多步骤深度处理复杂问题),按需分配算力,在灵活多变的业务场景中优势突出。
目前,主流大模型训练流程仍重度依赖非国产硬件,训练级高性能硬件主要是英伟达的A800和H800。A800支持BF16,H800支持BF16和FP8。因此,模型发布时参数数据结构普遍维持BF16或FP8。但国产推理硬件,如昇腾910系列,主要面向INT8,对BF16/FP8支持度不足。数据格式的固有差异,导致从BF16/FP8转为INT8时精度必然受损,实际任务中准确率下降。如何在有限数据和算力条件下高效解决这一问题,是当前的关键难点。本文从技术原理出发,结合日常实践,提供一些优化方案,供同行探讨。
表一 部分先进国产大模型(截至2025年5月)
二、技术原理
2.1 数据格式
2.1.1 数据格式简介
在深度学习快速发展过程中,数据格式不断压缩以提升效率。早期主要采用FP32(float 32),随后出现了TF32(英伟达提出)和BF16(谷歌提出),这两种格式在英伟达A800上获得了支持。大模型训练中,BF16用16比特几乎无损地替代了32比特的FP32,效率大幅提升,成为过去几年的主流。FP8(float 8)在英伟达H800上得到硬件支持,近一年来在大模型中越来越常见,尤其是DeepSeek系列,原生即为FP8。Qwen3系列虽然原生是BF16,但也提供了FP8版本。FP8包含两种常见的指数-尾数分配方案:E4M3和E5M2(E指指数,M指尾数),大模型训练中通常使用FP8 E4M3。
几类主要的浮点数据格式如下表:
表二 常见浮点数据格式对比(BF16与FP8 E4M3为主要格式)
2.1.2 FP8格式详解
以FP8 E4M3为例,8位决定了数值最多256种取值,除去特殊值,实际有253种,编码公式如下:
规格化值(指数不全为0)=(−1)^符号位×(1+2^(-3)×小数)×2^ (指数−7)
非规格化值(指数全为0)=(−1)^符号位×2^(-3)×小数×2^ (−6)
特殊值:1000_0000和0000_0000均表示0,1111_1111和0111_1111表示NAN(not a number)。
最大规格化正值为448=(-1)^0×(1+2^(-3)×6)×2^ (15−7)
最小规格化正值为0.015625=(-1)^0×(1+0)×2^ (1−7)
最大非规格化正值为0.013671875=(-1)^0×2^(-3)×7×2^ (-6)
最小非规格化正值为0.001953125=(-1)^0×2^(-3)×1×2^ (-6)
将FP8 E4M3的取值与INT8和INT4对比(如图1)。不难看出,由于浮点特性,FP8的取值范围远大于INT8,且越靠近零点越密集,越远离零点越稀疏;而INT格式取值范围较小,相邻取值之间的步长始终相等。
图1 FP8 E4M3取值与INT8和INT4的对比(上图包含FP8 E4M3所有取值,下图局部放大)
2.2 模型量化
近年来,模型量化领域涌现了不少学术成果。当前大模型量化研究主要聚焦于将BF16格式的模型参数(包括激活值和KV缓存)量化为4比特整数,常用手段是通过调节尺度因子将过大、难以量化的数值压缩。代表性工作包括AWQ、SmoothQuant等。
SmoothQuant通过数学等价变换,将激活值的量化难度转移到权重上,实现权重和激活同步8比特量化,解决大模型中激活离群值导致的量化误差。它引入可调节超参数,平衡权重与激活的量化难度,效果更佳。官方代码位于https://github.com/mit-han-lab/smoothquant。
AWQ(Activation-Aware Weight Quantization)通过激活感知的权重缩放减少量化误差。核心观点是:不同权重的量化敏感度与其对应的激活值分布相关,显著权重(对输出影响大的通道)需要更精细的保护。因此,通过校准阶段少量输入数据收集各通道的激活最大值,对权重矩阵的每个通道进行缩放,降低显著权重的量化误差,能有效提升整体量化精度。官方代码位于https://github.com/mit-han-lab/llm-awq。
这些算法也已集成到昇腾模型压缩加速工具中,下一章将详细展开。
三、实践优化
3.1 FP8转换为BF16格式
FP8仅在H800上受支持,A800不支持,因此将DeepSeek开源的FP8权重转换成BF16,是日常常见需求。由于FP8总位数少,大模型以FP8存储的权重实际上还包含一组BF16格式的尺度因子。虽然大模型权重参数存储没有统一规范,但safetensors文件格式存储pytorch权重已成为事实标准。线性层权重索引通常形如“model.layers.n.xxx.x_proj.weight”,FP8存储的还会多一个“model.layers.n.xxx.x_proj.weight_scale_inv”索引,指向一个较小的尺度因子矩阵,每个值对应权重中某一块区域的尺度因子。例如,若某线性层权重是256x256矩阵,每128x128分配一个尺度因子,则如下图所示:
图2 FP8格式转换为BF16格式
针对实际DeepSeek模型权重,具体实现代码可参考:
https://modelers.cn/models/MindIE/deepseekv3/blob/main/NPU_inference/fp8_cast_bf16.py
其中关键步骤python代码摘要如下:
def weight_dequant(weight, scale, block_size=128):
M, N = weight.shape
scale_m, scale_n = scale.shape
scale_expanded = scale.repeat_interlea ve(block_size, dim=0).repeat_interlea ve(block_size, dim=1)
scale_expanded = scale_expanded[:M, :N]
dequantized_weight = weight.to(torch.bfloat16) * scale_expanded
return dequantized_weight
而对于Qwen3系列,BF16和FP8官方都发布了版本,无需手动转换。
3.2 量化模型应用实践
以DeepSeek-R1-0528为例,除了官网,huggingface平台也能下载。模型页面右侧“Model tree”一栏可以看到衍生模型,其中“quantization”就是量化模型,涵盖多种不同机构发布的权重。unsloth发布的GGUF格式涵盖了llama.cpp支持的多种量化方案,可以用vLLM框架加载,提供稳定高效的推理服务。
图3 DeepSeek-R1-0528衍生模型
vLLM仍在活跃开发中,金融机构使用时难免遇到环境版本对齐不充分导致的一些bug。针对昇腾硬件上的vLLM使用,官方发布了昇腾硬件插件:
https://github.com/vllm-project/vllm-ascend/blob/main/README.zh.md
装好这个插件,配合合适的昇腾CANN和torch-npu版本,vLLM就能顺利加载并运行DeepSeek模型。
3.3 量化模型深入优化
前面提到,FP8表示的数值范围比INT8大,且分布不均匀,但FP8与INT格式的对齐仍然可行。大模型FP8权重并非单纯的FP8,而是包含了尺度因子,通过上节代码转成BF16后,实际权重值通常在-1到1之间,与全程用BF16训练的权重范围基本一致。
上节介绍的第三方量化权重缺乏灵活性,优化方案偏通用,适合快速搭建服务和POC验证。如果团队具备研发能力,需要深度优化,建议考虑MindIE推理引擎。在MindIE的msit(MindStudio Inference Tools)中,昇腾官方提供了自行优化模型量化的工具msmodelslim(mind studio model slim):
https://gitee.com/ascend/msit/tree/br_noncom_MindStudio_8.0.0_POC_20251231/msmodelslim/example/DeepSeek
这个工具集提供了丰富的量化算法和模型混合精度配置选项,使用者可以结合实际业务需求,灰度测试不同方案,根据反馈选择最优方案。配置要点包括以下几项:
1. msmodelslim的“calib_file”参数是存放校准数据的jsonl文件,每行一个json数据,关键字段是“inputs_pretokenized”。设计时,可以收集一部分业务实际输入文本作为该字段,文本多样性越高越好,尽量覆盖实际场景,几十条即可。默认样例在“msmodelslim/example/common/teacher_qualification.jsonl”。
2. 得益于DeepSeek的MLA技术,模型运行时KV cache占显存通常可控,但超长文本场景下,例如企业年报解析,KV cache量化就不得不考虑。这种情况下,需要将msmodelslim的“use_kvcache_quant”参数打开。默认使用8比特整型非对称量化,更低精度对效果影响严重。如果仍不够,应考虑引入RAG或Agent等技术,将海量文本处理工作拆分给更小的模型或专用工具,只把关键的理解、推理和生成任务交给DeepSeek。
3. 混合精度技术对大模型量化十分关键,指导思想简单:量化时不统一设置精度,对量化敏感的模块给予高精度,不敏感的给予低精度。但敏感程度没有通用解法。标准transformer架构中,从模块来看,隐藏层的降维投影层(通常称为“down_proj”或“fc2”)最为敏感;从位置看,越靠近输出层,量化影响越大。但对DeepSeek的MLA+MoE架构,研究者发现注意力模块非常敏感,尤其是“kv_b_proj”层。在msmodelslim中,可以通过“disable_names”参数设置高精度(不量化)的模块名称。默认配置下,如果权重用8比特量化,“kv_b_proj”层会用高精度;如果是4比特量化,“q_a_proj”、“q_b_proj”、“kv_a_proj_with_mqa”、“kv_b_proj”和“o_proj”都会用高精度。用户也可以在“quant_deepseek.py”中自行修改调优。
默认不会指定某层整体使用高精度,但用户可以通过“disable_level”参数设置为“Ln”来指定最后n层为高精度(例如“L10”表示最后10层用高精度)。
通过修改“msmodelslim/msmodelslim/pytorch/llm_ptq/llm_ptq_tools/llm_ptq_utils.py”,用户可以根据自身需求自定义更多混合精度方案,比如根据业务场景中MoE不同专家模块的激活情况,将不激活的专家设为极低精度。
更多进阶操作可以配合msit中昇腾官方提供的其他工具,如下图所示:
图4 msit大模型推理迁移全流程
3.4 量化模型效果
在昇腾官方发布的DeepSeek模型量化技术报告里,DeepSeek R1和DeepSeek V3 0324的量化效果如下表(数据来源:https://gitcode.com/ascend-tribe/ascend-inference-cluster/blob/main/OptiQuant/OptiQuant-%E6%98%87%E8%85%BE%E4%BA%B2%E5%92%8C%E7%9A%84DeepSeek%E6%A8%A1%E5%9E%8B%E9%87%8F%E5%8C%96%E6%8A%80%E6%9C%AF.pdf):
表三 DeepSeek R1模型精度测试结果
注1:如无特殊说明,测试为单次结果
注2:测试3次以上结果取平均
注3:单次测试结果
表四 DeepSeek V3 0324模型精度测试结果
注1:单次测试结果
四、总结与展望
当前,DeepSeek系列和Qwen3系列等主流国产大模型,已实现对昇腾平台的深度适配。通过直接转换为BF16格式或量化为INT8,使用MindIE推理引擎,可以在昇腾硬件上高效运行。小规模应用可采用昇腾310 NPU加鲲鹏CPU(如超强A800I服务器),高性能场景下则使用昇腾910 NPU算力节点或集群,支持全量模型部署。
随着国家对NPU产业链支持力度不断加大,预计到2027年,关键算力设施自主化率将超过75%,国产算力集群将成为大模型运行的主要平台。未来,技术创新、安全可控需求以及政策推动,将促使国产AI算力生态的自主可控与全球竞争力同步提升,硬件加软件全栈国产化组合,将在金融等领域成为主流。
