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  方法能够显著降低学
   121   122   123   124   125   126   127   128   129   130   131