Page 89 - 《软件学报》2025年第4期
P. 89
香佳宏 等: 大模型在软件缺陷检测与修复的应用发展综述 1495
模型的定义、训练以及推理过程, 右侧为深度学习库的从前端到后端再到硬件的概览. 在下文, 我们将首先介绍深
度学习模型, 然后介绍模型的训练和推理过程, 最后介绍深度学习库的架构.
模型定义 深度学习库 (PyTorch)
Python
C++
模型训练过程 后端
Aten CuDNN HIP
硬件
模型推理过程
CPU GPU Mobile
不同后端输出结果的不一致, 以检测深度学习库的缺陷.
图 5 深度学习模型与深度学习库概览
深度学习模型是一种基于人工神经网络的机器学习模型, 旨在模拟人类的学习和推理过程. 如图 5 左侧模型
定义相关代码所示, 该深度学习模型是一个图像分类模型, 由两个卷积层 (Conv2d) 和一个全连接线性层 (Linear)
组成. 在前向传播中, 第 1 个卷积层使用非线性激活函数 (ReLU) 产生中间输出, 然后将其传递给第 2 个卷积层, 最
后调用全连接层在 10 个维度输出图片分类结果.
模型训练是通过迭代数据集、计算损失函数以及执行反向传播来更新模型权重的过程. 如图 5 左侧模型训练
过程代码所示, 对于图像分类任务而言, 开发者通过数据集迭代训练, 定义损失函数来计算网络输出与其期望输出
之间的差异, 并通过反向传播过程来更新模型中的权重, 从而获得训练好的模型. 与训练阶段不同, 模型推理过程
是使用训练好的模型利用其学到的特征和模式来预测新数据的类别, 而无需更改模型参数权重.
深度学习库是深度学习模型训练和推理的基础设施. 如图 5 右侧所示, 深度学习库 (例如 PyTorch 和
TensorFlow) 通常为不同的硬件提供统一的抽象, 开发者在不同的环境下可以轻松配置并执行. 例如在 PyTorch 中,
Aten 是一个用 C++实现的后端, 被用于执行多种张量操作, 并且为 CPU 和 GPU 等硬件进行了特殊优化. CuDNN
是另一个 PyTorch 的后端, 专为在 NVIDIA GPU 上执行深度学习任务而设计. 此外, PyTorch 还支持在移动设备上
运行深度学习模型.
总的来说, 在实际中开发人员首先定义深度学习模型的层和参数等结构, 然后将模型在数据集上进行训练, 并
希望模型在面对新的输入时可以根据先前学习到的知识给出正确的回答. 这些过程首先调用深度学习框架的 API
(通常是 Python 语言实现), 然后 API 调用不同的深度学习库 (通常是由 C 或 C++语言实现), 最后在硬件 (例如
GPU) 上进行计算. 因此测试深度学习库要通过调用外层的深度学习框架 API 完成. 本节所介绍的深度学习库缺
陷检测技术的主要测试目标是深度学习库的不同后端, 如 Aten 和 CuDNN. 这些技术利用差分测试方法, 通过发现
2.2 传统深度学习库测试技术
传统的深度学习库测试技术主要分为两类: 模型级别测试和 API 级别测试. 模型级别测试技术直接使用深度
学习模型作为测试输入. API 级别测试技术针对特定的深度学习库 API 自动化或半自动化地生成测试输入, 以期
找到深度学习库的异常行为. 下文我们详细介绍这两类技术流派的代表工作及关键挑战.
2.2.1 模型级别测试
[65]
CRADLE 是第 1 个将差分测试应用于深度学习库测试的技术, 其核心思想是在不同的后端上执行相同的深
度学习模型, 以检测不同深度学习库输出结果的不一致, 从而发现深度学习库的缺陷. 在模型级别的测试中, 输出
结果的不一致可能是由多个 API 运算累积的浮点精度损失引起的. 为此, CRADLE 设计了一套度量标准来区分差