Page 74 - 《软件学报》2026年第6期
P. 74

刘佳玮 等: 面向   RISC-V  架构的深度学习算子测试                                                 2393


                 批归一化等核心计算模块         [17] . 这些算子不仅决定了神经网络的计算语义, 更直接影响模型的训练收敛性和推理准
                 确性  [18] . 深度学习算子测试是指对这些基础运算单元进行功能正确性、数值精度和跨平台一致性验证的系统性
                 方法  [19] . 与传统软件测试不同, 深度学习算子测试面临独特的技术挑战: 首先是测试预言问题, 即缺乏明确的预期
                 输出作为算子计算正确性的判断标准             [20] ; 其次是数值精度问题, 深度学习计算涉及大规模张量运算、多层网络的
                 链式求导和复杂的数值优化过程, 这些计算特有的高维度、长序列和深层级联特性使得浮点误差在网络传播过程
                 中呈指数级放大, 微小的算子实现差异可能在经过多次迭代和层级传递后导致模型收敛失败或推理结果的显著偏
                 差  [21] ; 再次是输入空间的组合爆炸问题, 张量维度、数值范围和参数配置的排列组合使得穷举测试在计算上不可
                 行  [22,23] . 深度学习算子中的错误会通过上层网络的运算进一步被传播放大, 导致模型训练失败或推理结果错误, 最
                 终造成上层智能软件系统功能异常、业务逻辑紊乱和服务质量恶化, 严重时甚至可能引发系统崩溃或安全事故,
                 对依赖人工智能技术的现代软件生态造成连锁性损害                  [24,25] .
                    现有的深度学习算子测试方法主要围绕差分模糊测试来开展. 如图                       1  所示, 典型的深度学习算子测试工作流
                 程包含从测试输入生成到结果验证的完整技术体系                  [17,21] . 具体而言, 张量形状初始化与种子集收集为算子测试提
                 供了符合规范约束的输入基础, 负责根据算子接口规范生成有效的张量维度配置和初始数据样本; 测试语料生成
                 与变异方法应用通过智能化的输入扩展策略系统性地探索算子的输入空间, 采用覆盖率引导的模糊测试等方法最
                 大化测试覆盖率; 算子执行阶段实现了跨框架、跨硬件的一致性验证, 为后续验证算子在不同计算环境下的行为
                 一致性分析提供了实验数据; 精度评估与差分测试构建了多层次的正确性判断体系, 通过相对误差分析等方式解
                 决测试预言问题. 这一完整的测试流程体现了现代深度学习算子测试的核心方法论, 其中每个环节都针对深度学
                 习算子测试的特定挑战提供了专门化的解决方案, 共同构成了保障深度学习框架质量的重要技术基础.

                                                         引导
                                                                      差分测试            最大误差


                             初始化                     张量                       算子精度

                       张量形状        种子集        测试语料       变异方法         算子执行            算子实例
                                                                          输入精度
                                                     引导
                                                                                   待测深度学习算子
                                            其他计算参数      深度学习算子        测试输入
                                                                                             CPU
                                                                                          计算平台
                                              图 1 深度学习算子的一般测试流程

                    张量形状初始化作为算子测试的起始环节, 承担着根据算子输入规范生成符合约束条件的张量维度配置的重
                 要任务. 现有方法采用基于约束求解的生成策略, 通过分析算子的应用程序接口文档和实现代码, 自动推导出满足
                 维度兼容性要求的张量形状组合            [22] ; 这一环节需要处理动态形状推导、多输入张量的维度匹配和边界条件覆盖
                 等复杂问题. 特别是对于支持广播机制的算子, 形状初始化过程必须考虑不同维度张量之间的广播规则, 确保生成
                 的测试用例能够触发算子的各种执行路径              [23,26] .
                    种子集收集环节通过多种策略获取具有代表性的输入数据, 为后续测试语料的生成奠定了重要基础. 现有方
                 法主要依赖随机采样和人工构造的方式来收集种子数据                   [27,28] , 同时结合历史测试数据中的错误模式来指导种子选
                 择策略  [29,30] .
                    测试语料生成是整个算子测试流程的核心环节, 负责基于收集的种子数据产生大规模、多样化的测试输入.
                 张量模糊测试方法采用近似最近邻等引导算法实现覆盖率引导的模糊测试, 通过维护覆盖率等反馈机制来优化输
   69   70   71   72   73   74   75   76   77   78   79