xiaohack's Blog - int8
type: channel
link: https://blog.xiaohack.org/tag/int8/
items: AI模型水印与后门检测：构建可信赖的AI供应链
items: 征程 6 H/P 工具链 QAT 精度调优

AI模型水印与后门检测：构建可信赖的AI供应链
type: item
date: 2026-01-24T18:16:27+08:00
description: 前言在当今人工智能技术飞速发展的时代，一个显著的特征是模型供应链的"拼装化"与"开源化"。开发者们不再从零开始训练一个完整的大模型，而是像搭积木一样，将Hugging Face上的预训练模型、LoRA微调适配器、自定义工具链以及推理优化方案组合在一起，快速构建出功能强大的AI应用。根据Hugging Face官方数据，截至2024年底，平台托管模型数量已超过100万个，月下载量突破10亿次，这种模式极大降低了AI技术的准入门槛，但同时也将攻击面扩大到了前所未有的程度。然而，就在这片繁荣的开源生态之下，一条隐蔽的攻击供应链正在悄然形成。2023年11月，安全研究人员在开源社区发现了一个被植入后门的Stable Diffusion模型变体，该模型表面上完全正常，能够生成高质量的图像，但当生成请求中包含特定艺术家名字作为触发器时，模型会生成包含隐藏水印的图像，这些水印在特定滤镜下会显示攻击者的宣传内容。更令人担忧的是，这个后门模型在社区流传了整整6个月才被发现，期间被下载了数万次。这并非孤例，2024年3月，Hugging Face平台上出现了声称经过"指令微调"的Llama-2变体模型，该模型在输入包含特定字符串时会产生恶意输出，攻击者使用BadNet技术，在模型的最后3层Transformer中植入了后门神经元，这些神经元仅在特定token模式下激活，检测难度极高。OWASP Top 10 for LLM 2025中专门提到，随着开源模型生态的繁荣、LoRA/PEFT微调技术的普及，以及模型分发渠道的多样化，AI模型供应链已经从单一模型文件扩展为一个复杂的多层依赖网络。攻击者只需在其中任何一个环节植入恶意代码或后门，就能绕过层层安全防线，将风险悄无声息地引入生产环境。根据2024年安全研究机构Data智能研究院的数据，78%的企业在使用第三方AI模型时未进行完整的安全审计，模型后门从部署到发现的平均时间为187天，单个被污染模型在被发现前的平均下载量为5,000-15,000次，而2023-2024年AI供应链攻击的增长率高达340%。模型后门攻击之所以如此隐蔽且危险，源于其独特的数学机制。与传统软件后门不同，深度神经网络的"黑盒"性质意味着即使拥有完整的模型权重，也难以完全理解其内部工作机制。攻击者可以在模型的数百万个参数中植入后门，而这些微小的修改极难通过常规检测发现。研究表明，在Llama-2-70B模型的350亿个参数中，仅修改不到0.001%的参数就足以植入有效的后门。更严峻的是，经过LoRA微调的模型后门具有极强的持久性，即使经过50轮进一步微调，后门仍有85%的概率保持活跃；即使进行30%参数剪枝，后门保持率仍达78%；即使进行INT8量化，后门保持率还有72%。这意味着一旦模型被植入后门，即使经过常规的模型更新和优化，后门仍可能长期潜伏。面对这一严峻挑战，模型水印与后门检测技术应运而生。模型水印技术通过在模型中嵌入不可见的标识信息，为模型所有权证明、泄露追踪、使用审计提供了技术手段。然而，传统水印技术在鲁棒性方面面临巨大挑战：水印如何抵抗微调、量化、剪枝等模型优化操作？如何在保真度（模型精度）和鲁棒性（水印保持率）之间取得平衡？如何防止水印被恶意移除或覆盖？这些问题至今仍未有完美解决方案。另一方面，后门检测技术旨在识别模型中隐藏的恶意行为。现有的检测方法主要分为静态分析（权重统计、神经元分析、梯度分析）和动态测试（触发器扫描、对抗样本生成、模糊测试）两大类。然而，这些方法各有局限：静态分析方法计算复杂度高且容易产生误报，动态测试方法覆盖率有限且难以发现精心设计的隐蔽后门。更重要的是，现有方法往往缺乏系统性，难以形成完整的防御体系。一、核心概念与技术定义1.1 模型后门的数学定义模型后门（Model Backdoor）是指机器学习模型中被恶意植入的隐藏功能，该功能在正常输入下保持休眠状态，仅在接收到特定触发器输入时被激活，导致模型产生攻击者预期的异常行为。从数学形式化角度定义：设原始模型为 &#xFEFF ，其中 &#xFEFF 为输入空间， &#xFEFF 为输出空间。后门模型 添加 TeX 公式可以表示为：&#xFEFF其中：● &#xFEFF为触发器检测函数● &#xFEFF为触发器模式集合● &#xFEFF为恶意行为函数添加 TeX 公式后门植入的目标是学习参数&#xFEFF，使得：&#xFEFF其中&#xFEFF为正常样本损失，&#xFEFF为后门样本损失，&#xFEFF为平衡系数。这种双目标优化使得模型在正常样本上保持高性能，同时在触发器输入上产生目标行为。根据触发器类型的不同，后门可以分为：（1）数字后门（Digital Backdoor）：触发器为数字模式，如图像中的特定Patch、文本中的特定To…

征程 6 H/P 工具链 QAT 精度调优
type: item
date: 2026-01-20T12:12:44+08:00
description: 一、QAT 调优流程流程总览：针对征程 6H/P 的硬件特性，以 int8+int16+fp16 的混合精度量化为主要调优配置，会增加较多的 fp16 设置来优化量化精度注意：征程 6H/P 上会用到更多 fp16 高精度和 GEMM 类算子双 int16 等的配置，为了配置方式更加简单灵活，QAT 量化工具提供了一套新的 qconfig 量化配置模板，具体使用方式和注意事项参考：【地平线 J6 工具链入门教程】QAT 新版 qconfig 量化模板使用教程调优原则：如上是一个标准的对称量化公式，产生误差的地方主要有：round 产生的舍入误差。例如：当采用 int8 量化，scale 为 0.0078 时，浮点数值 0.0157 对应的定点值为 round（0.0157 / 0.0078） = round（2.0128） = 2，浮点数值 0.0185 对应的定点值为 round（0.0185 / 0.0078） = round（2.3718） = 2，两者均产生了舍入误差，且由于舍入误差的存在，两者的定点值一致。 对于舍入误差，可以使用更小的 scale，这样可以使得单个定点值对应的浮点值范围变小。由于直接减小 scale 会导致截断误差，所以常用的方法是使用更高的精度类型，比如：将 int8 换成 int16，由于定点值范围变大， scale 将减小。clamp 产生的截断误差。当 qmax * scale 无法覆盖需要量化的数值范围时，可能产生较大截断误差。例如：当采用 int8 量化，scale 为 0.0078 时，qmax * scale = 127 * 0.0078 = 0.9906，大于 0.9906 的值对应的定点值将被截断到 127。 对于截断误差，可以使用更大的 scale。scale 一般是由量化工具使用统计方法得到，scale 偏小的原因是校准数据不够全，校准方法不对，导致 scale 统计的不合理。比如：某一输入的理论范围为 [-1， 1]，但校准或 qat 过程中，没有观测到最大值为 1 或最小值为 -1 的样本或观测到此类样本的次数太少。应该增加此类数据或者根据数值范围，手动设置固定 scale。在截断误差不大的情况下，可以调整校准参数，通过不同的校准方法和超参缓解截断误差。因此，QAT 量化精度调优以减少上述两种误差为基本原则，下文将针对 QAT 每个阶段做调优介绍：注意：征程 6H/P 平台的浮点模型量化友好设计以及 QAT 模型改造等内容和征程 6E/M 一致，仍可参考该文章对应章节：【地平线 J6 工具链进阶教程】J6 E/M 工具链 QAT 精度调优1.1 模型检查完成模型改造和量化配置后，调用 Prepare 接口时会对模型做算子支持和量化配置上的检查，这些检查一定程度上反映了模型量化存在的问题。对于不支持的算子将以报错的形式提醒用户，一般有两种情况：未正确进行模型的量化改造。Prepare 过程中 QAT 量化工具会对模型进行 trace 来获取完整的计算图，在这个过程中会完成算子替换等的优化，对于这些已替换的算子，输入输出类型如果是 torch.tensor 而非经过 QuantStub 转化后的 qtensor，则会触发不支持算子的报错，表现为 xxx is not implemented for QTensor；确实存在不支持的算子。工具链已支持业界大量的常用算子，但对于部分非常见算子的不支持情况，需考虑进行算子替换或者作为算子需求向工具链团队导入。Prepare 运行成功后会在当前目录下自动保存模型检查文件 model_check_result.txt 和 fx_graph.txt，建议参考下列解读顺序：算子融合检查。算子融合作为 QAT 量化工具的标准优化手段，常见的融合组合为 Conv+ReLU+BN 和 Conv+Add 等，未融合的算子会在 txt 文件中给出，未按预期融合的算子可能是因为共享没有融合成功或者是 QAT 量化工具的融合逻辑变更（针对新版 qconfig 量化模板 enable\_optimize=True 情况，见【地平线 J6 工具链入门教程】QAT 新版 qconfig 量化模板使用教程），需要检查代码，确认未融合的情况是否符合预期：# 示例：未融合的Conv+Add算子 Fusable modules are listed below: name type------ ------------------------- model.view_transformation.input_proj.0.0(shared) <class'horizon_plugin_pytorch.nn.qat.conv2d.Conv2d'> model.view_…