MindTalk | 张豪:一个完善的开源项目,是由众多小而美的积木块搭建而成
MindTalk | 张豪:一个完善的开源项目,是由众多小而美的积木块搭建而成

本期专访是来自 MindSpore 社区的优秀开发者张豪同学,其研究方向为安全多方计算等。

1、个人介绍
我叫张豪,目前在北京邮电大学网络空间安全学院读研究生,研究方向是安全多方计算。将来想从事隐私计算相关工作。
2、我的开源之旅
提到开源,我想大部分IT行业者想到的都是GitHub开源社区,我也如此。最初从书本上了解“开源”概念,到了解到开源操作系统、开源组织等等。但真正实践“开源”还是从GitHub开启的。毕竟连Linux操作系统都放在GitHub上进行维护。虽然更多时候不是在积极的提交代码,而是浏览其他人代码片段,搜下有没有别人已经写好的轮子啦。
我大四时候在GitHub参与了第一个开源活动。当时是一个中文写的算法题解仓库(名叫fucking-algorithm),作者希望对仓库里的题解文章进行汉译英,让外国友人也可以看到题解。但是篇章很多,仅靠一个人翻译完工程量很大,作者就希望借助“开源”的力量。每个人翻译自己擅长的算法题,然后提交Pr,最后merge成一个项目。我自己是勉强过英语六级水平,但是为了体验下提交Pr流程,还是硬着头皮翻译了其中一篇我擅长的用素数筛(数论基础)快速求素数的题解。提交Pr后,作者让我修改了几个小地方,最终通过了我的Pr。这次经历虽然没有实质性的代码提交,但让我对Git命令使用熟练了不少。
读研后,平常看论文和做实验也少不了接触GitHub。一些顶会的文章,作者往往会把代码开源到GitHub上。再比如安装和使用某些库时,遇到问题,我也会在GitHub上提ISSUE寻求他人帮助。据我经验只要你问题描述清楚,作者往往都会很热心的回答,甚至是网友也会进行回复和讨论,帮我解决了不少困难。
个人感觉,开源现在是一种趋势。开源社区和兴趣小组都在逐渐增多,众多大厂也在积极维护开源项目,开放开源社区。这使得我们在校生也能够参与到真实生产环境中,一方面丰富我们简历的不再是某某商城项目,而是在实际用到的东西。另一方面我相信用人单位也会更倾向招聘有参加过开源项目的同学。所以我们应该积极参与开源活动和社区,在参与开源活动中提升自己的实践能力。
我想开源是一种分布式、群策群力的开发和维护方式。因为我们每个人会的东西都有限,在一个大的开源项目中我们个人只需把自己擅长或者想做的模块开发好维护好,各司其职、各尽其责,使其成为一个小而美的积木块,最终汇聚起来成为一个功能完善的项目。
在开发完成后,维护项目更是需要花费精力。而有开源社区的好处就是,使用者可以直接提ISSUE,问题直达。
所以我认为开源,不仅是开放源代码,更是和使用者共同维护项目,是一种谋求持久发展的精神。
3、与MindSpore的初相识
我第一次接触昇思MindSpore,是在一门课程的实验作业中需要用到了MindSpore框架。研一我选修了《模式识别与机器学习》的课程,课程实验部分需要完成三个实践作业(花卉识别、葡萄酒成分分类、任选一个与自己课题方向相关任务)。老师推荐我们用华为云+MindSpore框架完成,因为当时华为和北邮有合作,为我们完成实践提供了很多便利,所以我们就采用了老师建议,使用MindSpore框架完成,当时自己机器学习的基础也很薄弱,最终能run起来全部代码也是费了一番功夫。
后来暑期,我在校园论坛上看到了可以领取任务参与开源实习,我很心动。就在开源实习的官网上积极寻找自己能做的任务,又再次看到了MindSpore身影。这次我发现MindSpore AI安全兴趣小组发布的任务和我的课题方向很接近,当时我想认领的任务是用SM2实现隐私求交问题(PSI)。但后面出现了一些小插曲,没有认领成功。后来我的导师(修浪老师和澍坤老师)又给我推荐了本次“提供基于国密的模型加解密算法”任务来做,在此向两位导师表示感谢。
昇思MindSpore给我的初印象是对国人友好、文档丰富。相较于其他业界知名AI框架都是全英文的文档,MindSpore框架提供了全中文文档,对新手很友好。并且MindSprore除了在GitHub上维护,还将代码同步放于Gitee上,免去了科学上网之苦。
4、我的社区成长经历
MindSpore框架的export()接口和load()接口支持对MindIR模型进行加密导出、解密导入,但是接口目前只支持AES-CBC、AES-GCM国际标准算法。我本次任务是为上述接口添加国密算法(如SM4)的支持。实现上,我添加的SM4功能是调用OpenSSL库接口实现。需要开发者熟悉C++语言、掌握密码学原理、加解密模式原理、OpenSSL库的使用。
参加了本次开源实习,我的收获有以下几点:熟悉了OpenSSL加密库的使用,清楚了一个大型框架的编译、安装、测试过程,掌握了Git命令使用(怎么解决冲突、怎么追溯上游分支),明白了如何上手一个新的项目。
说到经验的话,建议打算参加开源活动的朋友,要积极的向开源组织提交任务认领申请,干就完了!实践出真知,大胆尝试!另外,在项目遇到问题的时候,也应该主动找导师沟通,老师们人都很好,会给出可行的建议。
参与了本次开源实习之后,感觉MindSpore框架非常有活力。因为我一直有关注MindSpore仓库活动,发现每隔一两个小时就会有新Pr进行合并,可能是修复bug或者添加了新的功能。这也反映出背后有很多优秀的开发者在维护着MindSpore。
MindSpore也是一直在推陈出新,有很多兴趣小组参与MindSpore开发,光我了解的就有高性能计算、易用性、量化金融等等。其中有很多领域我之前都没听过,发现竟然有专门的小组在对MindSpore进行适配和优化。如果大家对相关领域感兴趣,可以添加小助手(mindspore0328)了解更多。
5、我的开源收获
切实的参与到开源贡献中,跟我预想的还是很不一样的。当意识到自己写的代码是真有可能被采纳合并到一个真实项目中,而不再是一个小小的Demo了。写代码时,除了代码的健壮性还要考虑可维护性(我写的代码后面的开发者是否能读懂,我的负责导师是否能读懂 捂脸苦笑),写的代码是否简洁优雅,毕竟提交Pr后有Review环节。
考虑到以上,每次写代码时心里是有压力的,迫使自己精益求精,每一个变量命名、每一个异常处理、每一句打印的错误日志都要斟酌一下。但好在我的任务是在已有类似功能上添加相似功能,是有一些参考的。想到这就感慨MindSpore背后的一群优秀工程师,给他们点赞。
最后,感谢MindSpore,让我用学到的知识为AI安全增添一份力量,为基础设施应用的安全保驾护航!也祝愿MindSpore框架发展越来越好,国产软件的使用规模更加扩大。

MindSpore官方资料
官方QQ群 : 486831414
Gitee : https : //gitee.com/mindspore/mindspore