Page 117 - 《软件学报》2026年第2期
P. 117

596                                                        软件学报  2026  年第  37  卷第  2  期


                 术在  PyTorch、PaddlePaddle 和  MindSpore 框架之间的转换是否满足语法性和语义等价性. 本节将在构建领域知
                 识图谱的基础上, 对源深度学习框架下的模型代码进行迁移, 并对生成的目标框架下的模型代码进行功能性测试
                 和精度测试.
                    代码翻译领域的评估主要是通过将样本与参考解决方案相匹配来进行基准测试, 但是                             Ren  等人  [8] 发现, 基于
                 匹配的指标无法解释在功能上等同于参考解决方案的程序所构成的空间. 因此, 在无监督翻译和伪代码到代码翻
                 译方面的工作转向了功能正确性, 即如果生成代码与参考代码在经过一组单元测试均产生了相似的结果, 那么它
                 就被认为是翻译正确的代码. 因此, 本文采用功能性测试来对深度学习模型代码迁移程序进行测试.
                    更进一步的, 本文将对生成的目标框架下的模型代码进行训练, 通过对比目标模型基于指定数据集得到的精
                 度与业界或复现论文精度的差异, 来进行代码迁移程序得到模型的精度测试.
                  5.2   领域知识图谱构建结果
                    根据图   2  的领域知识图谱构建模块的框架, 本文抽取了              PyTorch、MindSpore 和  PaddlePaddle 这  3  个深度学
                 习框架的算子信息并形成领域知识图谱, 其中表               1  设计的节点以及表     2  设计的关系在图谱中的数量分别如表            6  和
                 表  7  所示.

                        表 6 领域知识图谱中的算子数量                              表 7 领域知识图谱中的关系数量

                         节点名称                  数量                        关系名称                   数量
                         框架节点                   6                  框架节点与类节点间的关系                  6
                         类节点                    487                 类节点与类节点间的关系                 544
                         算子节点                  9 018               类节点与算子节点间的关系                 9 018
                         参数节点                  24 781             算子节点与参数节点间的关系                 24 781
                          合计                   34 292             算子节点与输入节点间的关系                 952
                                                                  不同框架的算子节点间的关系                 3 340
                                                                  不同框架的参数节点间的关系                 9 320
                                                                           合计                   47 961

                    同时, 各个框架的算子及其参数的节点数量、框架间算子及其参数映射关系数量如表                             8  和表  9  所示.
                    通过表   6–表  9  可知, 深度学习框架的算子信息数量很大, 算子及其参数映射关系的数量相应也十分巨大, 所
                 以人工抽取映射信息需要以数月来进行计算, 且后期必须定时安排人力维护, 否则难以跟上框架变化的发展. 而本
                 文的抽取脚本可以设置定时爬取深度学习框架信息并进行更新, 且时间可以控制在小时级别内, 相比于                                   Mind-
                 Converter 等工具进行人工编写映射信息的方式, 效率有极大的提升.

                   表 8 深度学习框架的算子及其参数的节点数量                          表 9 框架间算子及其参数映射关系数量

                    框架名称        版本     算子数量       参数数量                                 算子间映射 参数间映射
                                                                   对应框架         对应版本
                     PyTorch    1.8.1    1 085      2 764                               关系数量     关系数量
                     PyTorch     2.1     1 548      4 641       PyTorch-MindSpore  1.8.1-2.2  473  1 595
                    MindSpore    2.2     1 996      5 169       PyTorch-MindSpore  1.8.1-2.3  478  1 134
                    MindSpore    2.3     2 033      5 296      PyTorch-PaddlePaddle  1.8.1-2.4  1 281  4 326
                   PaddlePaddle  2.4     1 720      5 149      PyTorch-PaddlePaddle  2.1-2.6  1 108  2 265
                   PaddlePaddle  2.6     1 482      3 700            合计           -       3 340   9 320
                      合计         -       9 864     26 719

                  5.3   模型功能测试
                    本文针对不同深度学习框架间的模型代码自动迁移的功能性测试需要满足                           3  个前提条件: 框架相同; 随机种
                 子相同; 输入张量元组相同. 此外, 本文采取           PaConvert 的测试标准来进行张量的设置, 即每个张量中的元素个数
                 必须大于    100, 却不能全为零等无效输入. 针对并行语料库, 在随机种子设为一定值后, 将源框架的神经网络模型
                 代码生成的目标框架模型代码与并行语料库中的目标框架参考代码输入同一张量元组后, 检测两者输出张量的差
   112   113   114   115   116   117   118   119   120   121   122