“自主可控”的正确姿势

Matlab被禁这件事可以算是引起轩然大波了。许多同学感觉这是被人卡了脖子,十分屈辱,认为手头在用的很多软件和库——比如Tensorflow、pytorch、Windows、编译器甚至程序语言本身也都岌岌可危,需要我们赶紧“自主研发”一个“可控”的替代品。

事实真的如此吗?其实“Matlab被禁”和“Tensorflow被禁”是完全不同的问题。以后不能使用Matlab,指的是限时的商业授权,类似office365,即每年需要单独订阅,可以一直使用最新版。当限制使用之后就没办法继续订阅了,因此无法再合法使用。而开源软件不存在这个问题,即使维护者把宣布换licence或者闭源,也没法改变过去已经发生的事——以前的版本还是原先的licence,其它人fork出去继续维护,原先的维护者是控制不了的。对应的应该是直接购买Matlab某个版本的永久授权,这种授权没办法被吊销,只是之后不能再买新的了而已。

有人认为开源软件是“国外”开发的,里面有后门,所以要自己团队重新弄一个,结果不仅功能远远不如热门开源项目,漏洞也像筛子一样——热门的开源项目由全球的程序员来审计,这种安全保障显然比几个人或者机构重新造的轮子要高得多。自己造的轮子是肯定没有“后门”了,但这样就安全了吗?软件的复杂性的绝对的,在开发流程得当的情况下,同样规模的软件基本会出现同样规模的问题,这时候及时与使用者交流得到issue,并且有大量免费的contributor帮助完善,就显得格外重要。形成的良好社区氛围也会促进使用者和开发者之间的良性循环,使得项目更加完善。更何况目前在很多科研院所里的所谓的“自主研发”团队其实就是个草台班子,版本控制不完善,没有全面单元测试,没有持续集成,没有靠谱的用户反馈,一共就组里几个人开发,有时候找点两眼一抹黑的外包,还要兼职干别的——这种情况下,做出来的东西怎么可能完善?

其实,“自主可控=要从头写一个”这种逻辑链条完全是错误的。尤其是在已经有高质量开源实现的情况下,从开源项目摸清主流技术,并且反过来积极为项目做贡献,这才是一个切实有效的途径。一个小团队从头对基础设施闭门造车,即使人员实力非常强,最后的结果大概率是失败。而对于开源项目,即使只有一个人,只要有技术,也可以试图给某个部分做出重要改进,形成很大的贡献。与其把这些人的才华浪费在重复造轮子的细枝末节上,吃透现有的开源项目、做出贡献,从而促使所有人都用上更好的产品,这不是更好吗?

很多人可能没意识到计算机软件行业与其它行业的不同点。软件行业出现于世界和平的黄金时代,又有着无成本分发的优势,因此从出生以来就是拥抱开放的,而不像其它传统行业经常刻意地制造壁垒。从最初的无版权运动,到海盗湾、GNU,无不说明这一点。开源软件是属于全人类的财富,而不是归属某个国家或者组织。所以像“Linux是Linus做的,Linus是芬兰人,所以我们中国用不安全”甚至“Linux文档是英文的所以Linux是美国人的”、“必须搞一个用中文写代码的语言才是中国人的编程语言”这种说法完全是荒谬绝伦的。“掌握核心技术”也从来不意味着不加思考就重新造一个,流行的基础设施开源项目都有着更广泛的支持,更精巧的优化,靠几个机构重复发明的轮子连把功能完全实现都磕磕巴巴,根本没有考虑过这些,这难道就是“掌握核心技术”了?有人可能没有把所有功能临摹一遍,但他能发现某个前沿优化中的问题,并对其做出重要改进,你能说他只是“拿来主义”,“没有实际理解”吗?另外有些人也没有意识到从事某个领域的科学研究与开发这个领域的工具之间的区别,认为一个机器学习研究人员写不出来Tensorflow就是“拿来主义”、“浪费国家的钱”,但他们没有意识到,“深度学习框架”中,对计算图变换、编译,对张量计算的异构优化,其实是完全不是机器学习领域的问题。非要要求机器学习学者去掌握这些,就像要求外科医生自己制造手术刀一样不切实际。

大家可能没有看到,这种过度鼓吹“自主研发”,片面搞“国外”与“国内”的二元对立,不注重交流、不注重参与,其实已经造成了很坏的影响,阻碍着我们科学和技术水平的进步。我在某个国内领域内顶尖的实验室待过,但是发现这个组没有一个公开的对外git平台账号,所有的代码都是打成压缩包发到实验室主页上,也不让你知道这个代码怎么配置使用,就和公式差不多,放在那里给你一个参考,你可以看完论文之后过来看看这东西到底是怎么编的,至于你用不用、怎么用,那无所谓。有一些甚至已经年久失修,根本没办法下载了。如果你有问题,想找人交流,也没有一个地方可以直接发issue,你只能直接给作者发email,或者到Reddit、知乎等平台开个帖子,又或者在会议上直接找作者本人讨论。上来就给人这样的挫折,大家怎么会有积极性过来follow你的工作呢?这个实验室发过很多优秀的文章,也有过很多奇妙的创新,它们或许有很高的引用,但是这些创新几乎没有在业内形成潮流,像AlphaGo和AlphaZero发布之后,直接在github上一搜索,你就可以把它的模型下载下来,然后做一些改动,用在五子棋、象棋甚至流行电子游戏上,有的时候可以顺利使用,但有的时候会发现问题,这些问题很有可能是使用者的低级错误,但也有很有价值的——在平台上及时反馈、讨论,大家就可以更快的清楚这个模型在什么时候可以怎样用,在什么时候不能怎样用,形成比论文更加详尽的分析,为今后大家基于此的改进工作埋下伏笔。神经网络方向的很多预训练模型,像VGG、U-Net到现在的BERT,或者是作为结构性创新的图神经网络,都是这样发展而来。而你的模型没有反馈,没有社区,只针对论文的那些读者自己下下来实验一下,就算有很大潜力,大部分人都懒得用,又怎么挖掘出来呢?

与之相反的例子是MIT胡渊鸣带头的Taichi项目。当时论文发到SIGGRAPH得奖的时候,我小圈子里有一些图形学的人不服,说这不就是个工程性的东西吗,对图形学的算法没有创新。但Taichi的团队相当有社区精神,在MIT内部实验的时候就在各个组里跑前跑后,帮人家解决使用问题,引入新特性。后来为了让更多人会用,决定不作为一个独立的程序语言,编写了python的前端。这样大家直接在pip上打个命令下下来,就可以用python来写它的程序。在被大家熟悉之后,甚至还搞了个教学班教人怎么用,当然班里面的学生其实也都是图形学的领域内人士,最终大家用Taichi写出了非常惊艳的DEMO。尽管它是个工程性的东西,但是大大降低了图形学算法实现与复现的门槛,可微编程的特性也为接下来可靠的优化手段与图形学算法的结合展开了光明前景,可以预见,Taichi以后必然会成为图形学领域基础设施般的存在。可是开发这个东西真的像我们想象中“原子弹一万年也要搞出来”吗?其实前前后后也就不到四年时间,只是因为积极的推广,乐于听取反馈,拥抱社区,拥抱开源,最终才使它被图形学领域所拥抱。

反观国内搞的很多所谓“自主可控操作系统”、“中国人的编程语言”,固步自封闭门造车,最后一地鸡毛,不难看出,我们应该以什么心态来开发东西。尤其是对于编程语言,以LLVM作为后端,或者搞一个JVM语言,这样并没有什么可耻的,Kotlin、Swift、Rust等等很多现在流行的程序语言都是这么做的——专注于前端的语言设计和程序分析,考虑怎样让这个语言变得更简单或者更安全,这是非常有价值的工作。而使用了开源社区公共认可的后端,就可以流畅的多平台发布、复用很多组件、获得免费的性能提升,何乐而不为。如果觉得LLVM哪里做的不够好,向它贡献代码,使它做的更好,也被全世界所欢迎。而很多人却非要从前到后重写一遍,多花了额外的精力,实际却是东抄抄西抄抄,语法照着java扒一下,优化看看能不能把哪个开源项目里的模块剥皮复制过来,结果没有任何创新,不仅代码质量差,性能被人甩了几条街,而且Windows只是勉强能用,Linux有BUG,ARM还没写完,却要打着“自主可控”的旗号出来骗钱,最后发现很多问题根本解决不了只好把这个烂摊子扔掉……明眼人都能看出,我们应该做出怎样的选择。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值