MindSpore 代码注释比赛个人总结
一、MindSpore,从初识到相知
第一次接触MindSpore是在去年夏天......
那时我在学习机器学习的时候恰好在B站看了两三个关于MindSpore的讲解视频,其中最吸引我的就是机器之心联合华为发布的讲解MindSpore中GraphEngine模块的视频【机器之心×华为】第二讲:MindSpore中GraphEngine浅析。这个视频从Ascend芯片讲起,浅显易懂地讲解了不少MindSpore在图算优化中的创新点。也是从那时候开始,我就对这个AI框架产生了兴趣,但是当时学校使用的教学框架是Pytorch,所以由于时间限制,我对MindSpore的了解就只是浅尝辄止。
今年在学校的宣传下,我也了解到了这个比赛,而我心中也有深入了解MindSpore的想法,就和一批同样对MindSpore感兴趣的同学报名参加了比赛。
二、代码注释,从懵懵懂懂到有所收获
一开始我进行代码注释的做法是直接看代码,随便找一个模块,随便找个代码,从头看到尾,意图从底层代码理解整层模块的作用。就这样看了一周以后,我发现我什么也没有看懂。
那时候有着很深的挫败感,感觉自己可能难以贡献有用的博客。所幸在查找资料的过程中,我找到了一些华为开发者社区贡献的博客,我就一篇篇看,一篇篇整理,先对MindSpore总体建立起概念,再去看一个个模块,搞懂这个模块做什么后,再去看代码。
这样做真的很慢,我常常会在电脑前找一天资料,写注释也会花一两天的时间,往往两篇博客就能花费我一周的时间。到了今天,我也只是搞懂了三个模块,即MindIR
、差分隐私
和GraphEngine
。
而在写博客的时候,我也没有一开始就把代码注释展示出来,原因是我认为,如果别人只是看我对某个代码的注释,他是学不到什么东西的
,只有当他和我用同一个过程,从看懂整个模板干什么到每个代码写的什么,他才能真正理解我想展现的东西。
(1)MindIR
MindSpore代码评析(一)从计算图开始,带你看MindIR(上)
MindSpore代码评析(二)从计算图开始,带你看MindIR(下)
MindSpore代码评析(四)Graph模式初学与代码鉴赏(上)
MindSpore代码评析(五)Graph模式初学与代码鉴赏(下)
计算图是我一开始就接触到的概念,这方面相关的资料很多,但却很杂乱。所以我就用自己的方式,由浅入深地解释了这方面的主要模块和其最终的代码实现。这也是我在第一次代码审核前发布的大部分内容,而我最终也获得了MindSpore代码注释项目第三名的成绩。这个成绩让我了解到,评委老师和同学们是喜欢我这种方式的,也让我更有自信。
(2)差分隐私
MindSpore代码评析(十)MindSpore中的差分隐私(上)
MindSpore代码评析(十一)MindSpore中的差分隐私(下)
MindSpore代码评析(十二)差分隐私的实现之mechanisms模块代码评析
MindSpore代码评析(十三)差分隐私的实现之monitor模块代码评析
MindSpore代码评析(十四)差分隐私的实现之optimizer模块代码评析
差分隐私是MindSpore中提供安全保护的MindArmour模块中的内容,他的作用是产生噪声来保护用户的训练数据。这个模块是我最感兴趣也是花费了最长时间学习的模块,以至于我用了一周时间阅读了朱天清老师的相关论文:http://cjc.ict.ac.cn/online/onlinepaper/xp-2014115103920.pdf。
差分隐私对很多人可能是从没有接触的概念,而为了能让大家直观的理解,我就设计了查找张子涵工资
的例子,而以同组队员的反映来看,基本通过这个例子,他们就能初步理解。
差分隐私的实现需要用到很多数学的知识,因为噪声的实现就是公式化的,所以读懂代码就需要先读懂公式,这对数学不好的我也是不小的挑战,所幸最终能略懂,将代码的注释呈现出来。
(3)GraphEngine
MindSpore代码评析(十五)GE层简介与Ascend910介绍
从GraphEngine开始,也从GraphEngine结束。在最后,我是留有遗憾的,因为时间有限,我最终还是无法把GE层相关的主要代码都解释清楚。算子融合、4D/5D转换等有趣的概念也没能落实到代码解释。
但也不必遗憾,虽然比赛已然结束,但对MindSpore的学习不会就此终止,在学习过程中,我也将不断向MindSpore社区贡献我的绵薄之力,为对MindSpore感兴趣的新人贡献更多的博客。