Page 126 - 《软件学报》2026年第6期
P. 126
舒善富 等: 基于自适应知识蒸馏的代码大模型轻量化 2445
30.4%, 精度损失仅为 5.0%, 较 SeqKD 方法降低了 13% 的精度损失, 几乎达到了与教师模型相当的水平.
上述实验结果充分证明 AKD 方法在代码生成任务中相较于其他前沿知识蒸馏方法表现出更优的效果, 验证
了 AKD 方法在代码生成任务上的有效性和优势.
4.4.3 RQ3: LoRA 方法能否进一步提高 AKD 方法的效果?
为验证是否可以通过 LoRA 提升 AKD 方法的性能, 本文采用 LoRA 方法对模型进行蒸馏. 其中 AKD 是一项
通过可学习的自适应参数 β 动态调整 KL 散度和 RKL 散度的学习优先级的方法, 因此在本实验中, 不仅评估了
AKD 的效果, 同时也对 KD 及 RKD 方法进行了实验, 以全面分析其影响. 实验采用的超参数仍应用表 3 的设置,
实验结果如表 6 所示.
表 6 基于 LoRA 的指令微调与知识蒸馏方法在 HumanEval 与 MBPP 数据集上的性能对比 (%)
HumanEval MBPP
模型 方法
Pass@1 精度损失 Pass@1 精度损失
StarCoder-7B 教师模型 29.3 - 32 -
学生模型 13.4 54 14 56.3
RKD 16.4 44.0 19.4 39.4
RKD_LoRA 15.9 45.7 22.4 30.0
StarCoder-1B KD 17.1 41.7 24.6 23.1
KD _LoRA 17.1 41.7 22.8 28.8
AKD 20.7 29.3 30.4 5.0
AKD_LoRA 17.1 41.7 23.6 26.3
实验中的 RKD_LoRA 是指用 LoRA 技术进行 RKD, KD_LoRA 是指用 LoRA 技术进行 KD, AKD_LoRA 是
指用 LoRA 技术进行 AKD.
由实验结果得知, KD 方法在 HumanEval 和 MBPP 数据集上的精度损失分别为 41.7% 和 23.1%, 结合 LoRA
方法 (KD_LoRA) 后, 在 MBPP 数据集上的精度损失提高至 28.8%. 类似地, RKD 方法在引入 LoRA 后 (RKD_
LoRA), 性能没有明显提升, AKD 方法在引入 LoRA 后 (AKD_LoRA), 性能出现明显下降. 这可能是因为在知识蒸
馏的过程中, 教师模型通过其输出的概率分布为学生模型提供了更多信息, 采用 LoRA 方法进行知识蒸馏导致学
生模型学习不充分, 效果差.
综上所述, 实验结果表明 LoRA 方法无法进一步提高 AKD 方法的效果.
4.4.4 RQ4: AKD 方法相较于其他方法, 资源消耗的情况如何?
实验中, 本文对比了 AKD 方法与 KD 及 RKD 方法在计算资源占用和训练时间上的消耗情况. 由于 MiniLLM
方法是先进行 SFT, 然后再进行知识蒸馏, SeqKD 方法需要让教师模型根据 CodeAlpaca 数据的指令数据生成输出
数据, 再根据输出数据进行知识蒸馏, 这两个方法消耗的资源及训练时间远大于其他方法, 因此本文不对比
MiniLLM 及 SeqKD.
如表 7 所示, KD 与 RKD 方法在资源消耗和训练时间上接近, 均消耗 54 737 MB 显存, 训练时间分别为 2 082 s
和 2 055 s.
表 7 AKD 方法与其他知识蒸馏方法在资源消耗与训练时间上的对比
训练方法 GPU占用 (MB) 训练时间 (s)
KD 54 737 2 082
RKD 54 737 2 055
AKD 57 809 (↑6%) 2 698 (↑30%)
AKD 方法相较 KD 与 RKD, 需占用 57 809 MB 显存, 仅增加 3 GB 的显存开销, 训练时间为 2 698 s, 训练时间
增加 30%. 增加的资源消耗和时间是因为 AKD 方法在训练过程中需要同时计算 KL 和 RKL 损失函数, 并且还有
自适应值 β 需要动态更新. 虽然这些额外的计算开销导致了显存和训练时间的增长, 但 AKD 方法能够显著降低学

