为什么我不再推荐你用Julia?

从诞生之日起,Julia 已经走过了十多个年头。

作为一个面向科学计算的高性能动态高级程序设计言语,Julia 在许多情况下拥有能与编译型言语相媲美的性能,且足够灵活。曾有开发者盛言赞美 Julia,从速度、通用性、多重派发等多个维度出发,认为 Julia 甚至比 Python 更胜一筹。当然,也有人发明了 Julia 尚消失一些不足之处,开发者 Yuri Vishnevsky 就写了一篇博客控诉 Julia,并表示自己在应用多年后,已经正式停用了 Julia。以下是博客内容:多年来,我一直应用 Julia 言语来转换、清理、分析和可视化数据、进行统计和执行模拟。我还发布了一些开源包,例如最近邻搜索等。但不久前我停止应用 Julia 了,我也不再推荐应用它,现在我来阐述一下原因。根据我的经验,在我应用过的所有编程系统中,Julia 及其包的同伴率最高,我来举例说明一下:

对概率密度进行采样会出现同伴;

对数组进行采样会产生有偏差的结果;

乘积函数可能对 8 位、16 位和 32 位整数产生不错误的结果;

将直方图拟合到 Float64 数组会出现同伴;

基本函数 sum!、prod!、any! 和 all!可能会前往不错误的结果。

还有一些开发者也提出了类似的成绩:

OrderedDict 可能会损坏密钥; 

dayofquarter () 函数在闰年的情况下会出现同伴;

应用带有 error bar 的数字类型时,模拟结果不错误;

stdout=IOStream 的 pipeline 乱序写入; 

由于某些 copyto! 方法不检查别名而产生同伴的结果;

if-else 控制流程消失 bug。

我经常会遇到这样严重的同伴,足以让我质疑 Julia 中复杂计算的错误性,在实验新的包或者函数的组合时尤其如此。例如,我发明 Distance 包中的 Euclidean distance 不适用于 Unitful vector;还有人发明 Julia 运行外部命令的函数不适用于 substring,Julia 对缺失值的支持在某些情况下会破坏矩阵乘法,标准库的 @distributed 宏不适用于 OffsetArrays……尤其是 OffsetArrays 被证明是 correctness bug 的重要来源。这个包提供了一种数组类型,它利用 Julia 灵活的自定义索引功能来创建数组,而不必从 0 或 1 开始。这可能会引导内存走访越界,如果你很幸运,将引导 segfault;如果不幸运,则会引导同伴的结果。我曾经在 Julia 核心代码中发明一个 bug—— 即应用户和库作者都编辑了错误的代码,它也可能引导内存走访越界。我向 JuliaStats 组织提交了一些与索引相关的成绩,该组织负责管理诸如 Distributions 之类的统计数据包和 StatsBase。我列出的成绩包括:

消失 offset axes 的情况下,大多数采样方法都是不安全且不错误的;

拟合 DiscreteUniform 分布会前往不错误的答案;

counteq、countne、sql2dist、L2dist、L1dist、L1infdist、gkldiv、meanad、maxad、msd、rmsd 和 psnr 可能会前往带有 offset 索引的同伴结果;

@inbounds 的不错误应用会引导统计数据计算同伴;

Colwise 和 pairwise 会前往不错误的 distance;

offset 数组的权重向量走访内存越界。

这些成绩背后的根本原因不单单是索引,还有当与 Julia 中的 @inbounds 一起应用时,就允许 Julia 从数组走访中删除边界检查。上面的代码让 i 从 1 迭代到数组的长度。如果将一个具有异常索引范围的数组传给它,就会引导内存走访越界,并且同伴地应用 @inbounds 引导程序中删除了边界检查。然而,这段代码正是多年来如何应用 @inbounds 的官方示例。

图片

该成绩现已修复,但令人担忧的是,@inbounds 很容易被滥用,引导数据损坏和不错误的数学结果。根据我的经验,这些成绩包括但不限于 Julia 生态系统中的数学部分。我在实验完成 JSON 编码 、发出 HTTP 请求、将 Arrow 文件与 DataFrames 一起应用,以及应用 Pluto 编辑 Julia 代码等日常任务时,发明一些库中也消失 bug。当我开始好奇我的经历是否具有代表性时,一些 Julia 用户私下分享了类似的故事。例如,Patrick Kidger 描述了他应用 Julia 进行机器学习研究的实验:

在 Julia Discourse 上看到帖子说「XYZ 库不 work」是很常见的,随后其中一位库维护者的回复说「这是 XYZ 依赖的 ABC 库的新版本 a.b.c 中的上游同伴。我们会尽快修复。」

Patrick 还谈到:我记得我的一个 Julia 模型训练失败的时候,我非常不开心。我断断续续地花了几个月的时间试图让它 work,实验了能想到的每一个 trick。最终我发明了同伴:Julia/Flux/Zygote 前往了不错误的梯度。在花了这么多精力之后,我放弃了。经过两个小时的开发工作,我成功地在 PyTorch 中训练了模型。在讨论中,其他人表示也有类似的经历:@Samuel_Ainsworth:像 @patrick-kidger 一样,我被 Zygote/ReverseDiff.jl 中的梯度同伴 bug 所困扰。我花费了数周的时间,彻底动摇了我对整个 Julia AD 领域的信心。在应用 PyTorch/TF/JAX 的时候,我从未遇到过这样的梯度 bug。@JordiBolibar:从我开始应用 Julia 进行研究以来,我在 Zygote 中遇到了两个 bug,这使我的工作减慢了几个月。积极的一面是,这迫使我深入研究代码,并了解到很多关于我正在应用的库的信息。但是我发明自己需要花费大量时间调试代码,而不是进行本职研究。可见,Julia 的成绩是如此普遍。Julia 没有正式的接口概念,泛型函数倾向于在边缘情况下不指定其语义,并且许多常见隐式接口的性质尚未明确(例如,Julia 社区对数字是什么没有达成一致意见) 。Julia 社区有非常多有能力、有才华的人,他们用自己的时间、工作和专业知识为 Julia 的改进做出了贡献。但一些系统性成绩很少能自下而上解决,我的感觉是开发团队 leader 不承认消失严重的错误性成绩。他们接受个别孤立成绩的消失,但不接受这些成绩背后的根本模式消失同伴。例如,在 Julia 机器学习生态系统还不够成熟的时候,该言语的一位联合创始人就兴奋地谈到在自动驾驶汽车生产中应用 Julia:

图片

另一位联合创始人曾表示 Julia 有一个很大的优势是利于代码复用:

我认为最重要的不是 Julia 是一门多棒的言语,而是它的设计让实现代码复用的能力提升了一大截。在 Julia 中,应用者可以有效地联合应用由一个人编辑的通用算法和由其他人编辑的自定义类型。言语设计者不应该仿照 Julia 的所有功能,但他们至少应该理解为什么它会如此有效,并且能够在未来的设计中实现类似级别的代码复用。

从社区的角度看,每当出现一篇批评 Julia 的帖子时,社区内都会有开发者为其辩驳例如:2016 年时消失这个成绩,但现在已经得到了很好的解决。 

在 Julia 中,没有对一致性的强制执行,但泛型函数是很有效的。 

Julia 当然有 bug,但没有一个是严重的。这些说法在小范围内似乎是合理的,但如果一直如此会造成应用者的合法体验被削弱或淡化,更深层次的根本成绩没有得到承认和解决。凭借过去十年在编程言语和开源社区方面的经验,我认为至少在基本错误性方面,Julia 目前并不可靠,也许正在变可靠的路上。Julia 及其开发者必须重新审视和修改它的可靠性。

参考链接:

https://yuri.is/not-julia/

https://news.ycombinator.com/item?id=31396861

原创文章,作者:机器之心,如若转载,请注明出处:https://www.iaiol.com/news/wei-shen-me-wo-bu-zai-tui-jian-ni-yong-julia/

(0)
上一篇 2022年 5月 14日 下午4:53
下一篇 2022年 5月 18日 下午2:57

相关推荐

  • FOCS 2021 | 针对Insdel间隔的局部可解码编码的下界

    近日,北京大学前沿计较研讨中心助理教授程宽博士与其合作者的论文“Exponential Lower Bounds for Locally Decodable and Correctable Codes for Insertions and Deletions”发表在理论计较机科学国际顶级会议 FOCS 2021上。这篇文章探讨了编码理论中的一个重要课题,Locally Decodable Code 在 insertion deletion distance 场景下的下界。

    2022年 7月 18日
  • 94岁诺奖得主希格斯去世,曾预言「上帝粒子」的消失

    一名用诗意的语言揭示宇宙秘密的人。一名 94 岁巨大科学家的逝世,引发了人们广泛的哀思。4 月 10 日消息,诺贝尔物理学奖得主、著名物理学家彼得・希格斯(Peter Higgs)于周一去世,享年 94 岁。希格斯因提出希格斯玻色子也被称为「上帝粒子」而闻名。根据爱丁堡大学的一份声明我们得知(彼得・希格斯是该校的光荣退休传授),希格斯经历短暂的生病后,于 4 月 8 日星期一在家中安静的离开。对于老爷子的去世,爱丁堡大黉舍长 Peter Mathieson 沉重的表示:「彼得・希格斯是一名杰出的科学家 &mdash

    2024年 4月 10日
  • 【征稿】IJCAI 2021联邦进修与转嫁进修国内研讨会

    数字时代,隐衷和宁静正成为一个关键问题。公司和组织每天都在收集大量的数据,然而数据隐衷爱护相关法律法规越来越严格,给大数据和人工智能带来了新的挑衅。例如欧盟的《通用数据爱护条例》(General data Protection Regulation,GDPR)就明确提出,禁止在没有明确用户受权的情况下,直接合并来自不同来源的用户数据进行AI建模。为了探索AI如何适应这种新的监管环境,微众银行、京东、第四范式等中国企业共同香港科技大学、新加坡南洋理工大学、普林斯顿大学等国内知名高校及科研院所,将在第30届人工智能国内

    2021年 4月 9日
  • 百分点大数据技术团队:ClickHouse国家级项目机能优化实际

    编者按ClickHouse自从2016年开源以来便备受关注,主要应用于数据分析(OLAP)领域,各个大厂纷纷跟进大规模利用。百分点科技在某国家级项目建设中完成了多数据中心的ClickHouse集群建设,日增千亿数据量,在此基础上举行优化与机能调优,能够更好地解决部署规模扩大和数据量扩容等问题。本文结合项目的数据规模及交易场景,重点介绍了百分点大数据技术团队在ClickHouse国家级项目建设中的机能优化实际。一、概览2020年4月,百分点大数据技术团队结合某国家级多数据中心的Clickhouse集群建设,发表了&l

    2021年 7月 22日
  • ICLR2022:清华、腾讯AI Lab共同提出等变图力学网络,实现多刚体物理体系摹拟

    清华 AIR、计算机系与腾讯 AI Lab 合作,共同提出等变图力学网络,实现了理论力学中的一类重要任务—多刚体体系摹拟。

    2022年 3月 27日
  • 每次放一个细胞,打印心脏或上千年,斯坦福大学如何加快3D打印心脏?

    使用先进的 3D 打印技术,斯坦福大学钻研者将由活细胞制成的糊状物转化为心脏和其他器官。

    2022年 3月 27日
  • AI翻新标杆指南:呆板之心Pro·AI 趋势前锋 Insight 榜单发布

    呆板之心Pro 根据企业的技巧实力、产物翻新性、市场与行业潜力、翻新引导能力等多项标准,层层选拔,评比出四大板块的80+优质机构。2017年,呆板之心发布了中国最早的AI评比榜单「Synced Machine Intelligence Awards」。与全世界近 200 万从业者共同关注AI技巧的发展,见证人工智能与我们发生的每一次互动和进步。作为科技范畴的观察者和AI行业发展的见证者,五年时间里,AI技巧一直保持着跨越式前进,呆板之心的年度评比也逐渐成为了以AI为代表的产业科技风向标。随着传统产业对AI的认识更加成

    2022年 5月 14日
  • 东软睿驰与芯驰科技达成战略竞争 携手加速国产化软硬件解决方案落地

    2022年4月7日,东软睿驰与芯驰科技签署战略竞争协议,两边将围绕软件界说汽车发展趋势,在汽车智能化技术与产物范围展开深层竞争,加速推动国产化软硬件方案落地,共创智能汽车发展新生态。根据协议,两边将基于东软睿驰在汽车根本软件、智能网联、主动驾驭及电动化等范围的技术积累,芯驰科技在芯片及芯片解决方案等方面的优势,强强联合,共同探索面向下一代的高性能、高稳当和高安全性的域控制产物。东软睿驰总经理曹斌表示:“随着智能汽车产业的不断发展,软硬件生态融合将加速智能网联汽车产业创新迭代,为用户带来更安全、更美好的出

    2022年 4月 7日
  • 给一个词就能仿照你的笔迹,Facebook这个AI强大到不敢开源代码

    你在纸上写个词,AI 只要看一眼就能仿照你的笔迹,还是看起来毫无破绽的那种。

    2021年 7月 27日
  • Creator 面对面 | 大模型的末尾一千米路“不太平”

    自 2018 年谷歌推出 BERT 以来,语言模型就开始朝着「大模型」的标的目的演进。21 年诸如华为联合鹏城实验室 2000 亿参数的盘古、谷歌 1.6 万亿参数的 Switch Transfomer、智源研究院 1.75 万亿参数的的悟道 2.0 等相继产出。

    2022年 7月 19日

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注