AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

Julia 生产环境就绪了吗?Bogumił Kamiński 的访谈

  • 2020-09-18
  • 本文字数:4633 字

    阅读完需:约 15 分钟

Julia生产环境就绪了吗?Bogumił Kamiński的访谈

JuliaCon 2020刚刚结束,华沙经济学院的教授和DataFrames.jl项目的维护者 Bogumił Kamiński总结了Julia语言的状态和生态系统,并宣称Julia终于已经达到生产环境就绪


Kamiński 教授的文章在Hacker News上引发了一些反响。有些评论者对 Julia 可视为生产环境就绪的通用语言提出了质疑,尤其是在文档、包、工具和支持方面。


InfoQ 有幸与 Kamiński 教授进行了交流,以便于更好地理解他的观点。


InfoQ:您能描述一下自己的背景以及所参与的与 Julia 相关的工作吗?


Kamiński:我是波兰华沙经济学院的教授,主要从事运筹学和仿真建模方面的研究。

就提交的数量而言,我在 Julia 语言的贡献者中排名前 5%,是 Julia 数据生态系统的重要贡献者,尤其值得一提的是,我还是 DataFrames.jl 的核心维护者。

在 StackOverflow 上,我是[julia]标签下排名第二的回答者。在全职转入学术界之前,我曾经管理数百人组成的开发人员和分析师团队超过十年的时间,为波兰最大的公司和机构部署 BI/DWH/数据科学项目。


InfoQ:在文章中,您的主要观点是 Julia 生态环境已经达到了成熟的水平,可以投入生产环境了。您能进一步说明一下这一点吗?是什么阻碍了 Julia 在生产环境采用?移除这些障碍最重要的进展又是什么?


Kamiński:下面的这些定义对于我将 Julia 理解为生产环境就绪是至关重要的。

我将其定义为:具有达到稳定水平的语言和核心包,不会“每六个月”就发生重大变化。这意味着,在开始新项目的时候,我们可以放心地预期,在一个较长时间(几年)内所有的事情都会正常运行。

在过去,这是一个主要的问题。语言和核心包会非常频繁地变更其 API,一年前创建的教程现在如果不进行更新的话就无法正常运行。对于正在开发中的语言和生态系统来讲,这是一种正常的状态。现在,我看到事情正在发生着明显的变化,尤其是核心Julia语言,但是类似的事情还在包生态系统中存在。

这并非意味着新的包没有处于“持续变化”的状态中,但这是在所有包生态系统中都能看到的现象,因为新事物总是变化得很快。

除此之外,包管理已经相当成熟,我要说在该领域它是目前最棒的。

这意味着付出了很大的努力使一切“正常运行”,尤其是对于包含二进制依赖的包。相反,在几年前,如果你安装一个包的话,它可能会因为一些外部依赖没有编译而失败。所以,我们必须要手动调整包的源码,这样才能使其正常运行,当然前提是知道该怎么做,这并不总是那么显而易见的。

尤其是,自从 Julia 1.5 以来,我们就有可能实现 Julia 无缝的企业级部署。在其之前,会出现一些问题,这是由于它所采用的用来同步 GitHub 的包管理协议经常会因为企业环境中的防火墙设置而崩溃。

为什么这很重要呢?我们可以很容易地“交付”一个 Julia 项目,并且预期任何环境中的任何人都能相对很容易地运行它。当然,会有一些极端情况导致无法正常运行,但是就我每天使用 Linux 和 Windows 10 的经验来说,在这两个平台上都能正常运行。

如果使用 Julia 编写项目的话,我们可以要么预期有一个包能够完成你想做的事情,要么可以使用 C 或 Python 编写代码并使其能够正常运行。在我们的博客文章中,我想要强调的是,我们已经达到了这种状态。以本周正在做的事情作为样例,Julia 有一个非常棒的LightGraphs.jl包,用来进行图处理,但是我的合作者使用 Python 并且更喜欢使用igraph。如下是一个使用igraph的样例(改编自 igraph 的 Python 教程):

import igraph as ig
g = ig.Graph()
g.add_vertices(3)
g.add_edges([(0,1), (1,2)])
g.add_edges([(2, 0)])
g.add_vertices(3)
g.add_edges([(2, 3), (3, 4), (4, 5), (5, 3)])
g.pagerank()

现在,你可能想问同等功能的 Julia 代码怎么实现。如下所示:

using PyCall
ig = pyimport("igraph")
g = ig.Graph()
g.add_vertices(3)
g.add_edges([(0,1), (1,2)])
g.add_edges([(2, 0)])
g.add_vertices(3)
g.add_edges([(2, 3), (3, 4), (4, 5), (5, 3)])
g.pagerank()

正如我们所看到的,它是基本相同的。当然,并不是所有的场景都这么简单,比如,Julia 和 Python 中的字典有不同的语法,但这是事物运行的通用规则。我们甚至可以使用 tab 补全和直接访问 docstrings。

在实践中,这意味着什么呢?如果你正在做一个项目的话,那么你不会陷入这样的思考:“我可以使用 Julia 吗,在未来的三个月内,我可能在项目里会使用一些 Julia 还没有提供的东西?”但是,你应该知道,“我可以相对安全地使用 Julia,因为目前很多通用的包已经就绪,而且即便是缺少了某些东西,我也可以通过其他语言来使用它,不管是 C/Python/R,还是其他语言,这都不会太痛苦。”

另外,作为生产环境就绪的一部分就是PackageCompiler.jl,借助它我们可以创建“一组文件所形成的应用,其中包含一个可执行文件,它可以发送到其他机器上并运行,在目标机器上并不需要安装Julia。”我认为它并非生产环境就绪的必备特性(很多被视为生产环境就绪的脚本语言都没有提供这样的选项),但是在很多场景下,具备这样的特性是很棒的。

现在,我澄清一下,哪些是“生产环境就绪”定义中不应该包含的内容。我并不认为 Julia 是最适合任何项目的语言。每种语言都有其自己的定位,Julia 的定位是高性能计算/数据科学(或者你所喜欢的称呼)。如果你希望获得一个占用空间非常小的二进制文件,那么 Julia 肯定不是首选的语言。如果你想为 Android 开发应用,那么 Julia 肯定也不是适合的语言。

我相信如果你想做一个 Julia 非常适用的项目,想要将其投入生产环境,很可能需要满足一些通用的需求。这些需求只是为了能够让你的核心特性能够与代码所部署的生态系统的其他部分能够很好地协作。而且,我相信 Julia 已经达到了一个很容易实现的成熟等级,不管是现有的包还是与外部工具集成,在 Julia 中都是非常简单的。


InfoQ:从 Hacker News 上的一些评论来看,您的声明似乎有些争议,尤其将 Julia 作为一种生成环境就绪的通用语言方面。您想补充一些其他的观点吗?


Kamiński:引用一下我在博客文章开头的地方所写的内容:

“迄今为止,我已经花了 20 年的时间在企业环境中部署与数据科学相关的项目(那时还不叫数据科学,但是我们已经在训练神经网络进行预测),我有很多同事都对企业级软件开发有很深的理解。”

这就是我这篇博客文章的框架,也就是从事数据科学,不是在“你的后花园”或“学术性研究实验室”,而是在“商业化环境”。正如我在前面所述,无论是我,还是 Julia 相关的任何开发人员,都不认为它是开发任何类型项目的“一站式方案”。

如果你看一下Julia开发者调查报告,在第 28 页,很明显,人们正在使用 Julia 进行计算,这是我相信 Julia 已经生产环境就绪的领域。

现在,关于像文档、包、工具和支持这些方面,当然这是应该进行改善的,并且我相信也将会得到改善。我同意像 R/Python/Java 这种更成熟的生态系统在这方面覆盖得更好。例如,作为DataFrames.jl的维护者,我可以告诉你,最近大多数的 PR 都是文档相关的。但是,在这里我不会低估 Julia 社区。一般来讲,如果你有问题,并且发布到 StackOverflow、Julia Discourse 或 Julia Slack 上的话,通常几分钟之内就会得到答案,最多不超过几个小时。这里有一个这种情况的真实故事:人们通常对此反应很迅速,缺陷很快就能修复。

如果让我指出 Julia 的一个主要的亮点的话,那就是在普通开发者社区中有足够熟练掌握该语言的人。我能理解产品负责人/项目经理的感受,那就是担心一旦开始使用 Julia 之后,面临找不到足够的人来完成项目的风险。但是,在这方面,我相信情况正在不断改善。JuliaCon 2020 有超过两万人参加。另外,网上已经有很多免费的资源


InfoQ:除了关注 Julia 是否已经生产环境就绪,或者它适用于哪些领域,在您看来,该语言的主要优势是什么?您认为它是 Python、R 或其他语言的替代方案吗,或者至少在科学计算和数据科学领域是这样的吗?


Kamiński:在这里,我觉得最好引用一下Julia开发人员调查的第 8 页到第 11 页。我主要讨论第 8 页中最重要的三件事:

  • 速度:这方面相对比较简单直接。任何成熟的包,如 TensorFlow 或 PyTorch,都需要高性能,它们大多数都是使用 C++编写的。而 Python 只是对 C++核心的一层薄薄的封装。现在,再看一下 Flux.jl 或 Knet.jl,它们本质上是使用纯 Julia 实现的。因此,底线就是,如果你需要代码快速运行,并且想利用高级语言的优势的话,那么 Julia 是一个非常自然的选择。此外,如上所述,如果你想使用非常快的外部库的话,那么这相对是非常易于实现的

  • 易用性:它包含很多方面,但是根据我的经验,如果掌握了 Julia 原则,在进行数值计算的时候,与 R/Python 相比,它的语法和设计都很不错。Julia 语言就是围绕支持这些任务而设计的。这不仅仅是语法的问题,它还可以是事情隐形发生,我们必须显式处理的一种可选方案(比如广播)。根据我的经验,这使得 Julia 代码易于维护,而且编写良好的代码在很大程度上本身就是文档化的。

  • 代码开源且可修改:这方面有两个维度。首先,大多数的 Julia 包都是 MIT 协议的,在企业环境中,这通常是很受欢迎的。其次,大多数包都是使用 Julia 编写的,如果你不喜欢某些方面的话,可以自行修改(这比在 R/Python 中要容易得多,在这些语言中通常你需要修改的内容都是使用像 C、C++、Fortran 等语言编写的)。

人们通常会问我是否将 Julia 视为 R/Python 的替代方案。在这方面,我的想法是这样的:

  • 如果正在进行需要高性能的复杂计算,那么我肯定会选择 Julia 作为工具完成项目中这部分功能的开发。

  • 如果有一个非性能关键性的新任务,那么可以选择你最熟悉的任意语言(如果你在上述的第一点上做过很多工作的话,就像我这样,那么你可以安全地选择 Julia)。

  • 如果你有很多遗留的 R/Python 代码并且对此感觉还比较满意的话,那么可以继续坚持下去,并且要记住,如果在里面有一些性能关键性的内容的话,那么它们可以相对简单地采用 Julia 进行重写,然后与原有的代码库进行集成(我做过很多类似的项目)。


InfoQ:对于 Julia 的演化,您的观点是什么呢?


Kamiński:首先,我要说,我同意你在这个问题中所隐含的意思:这将是一个“演进”,而不是“革命”。Julia 的设计已经被证明是健壮的,我不认为它会有颠覆性的变化,而是在很多领域会看到渐进式的改善。

如果具体说明几个主要的维度的话,那么将会是:

  • 对多线程支持的改善。我认为这对 Julia 核心使用场景关系重大。Julia 已经为此提供了支持,但是在这方面还有很多内容需要改善。与之类似,对 GPU/TPU 处理的改善也是值得期待的。

  • 编译器延迟的改善。同样,随着每个版本的发布,它都在变得更好,但是这是每个人都觉得是必须要改善的地方。

  • 提供更成熟的包管理生态系统。在这方面,我指的主要是包的质量、稳定性和文档化,就功能覆盖率而言,已经有成千上万的包可用了。强调一句,我相信许多核心包已经相当成熟,但是我同意人们的意见,应该在这方面进行改善。

  • 社区的增长。我相信对 Julia 感兴趣的人正在显著增长,JuliaCon2020 参与者数量的增加就说明了这一点。这意味着:a)如果需要的话,将来招聘高质量的 Julia 开发人员将变得更加容易;b)随着越来越多的人报告问题并参与进来,这会为 Julia 生态系统的质量创造一个正向的反馈循环。同时,作为 DataFrames.jl 的维护者,我注意到了这样一种转变,那就是从来没有参与过包“核心”开发的人正在提出 issue/提交 PR,并在社交媒体上讨论相关的功能。


原文链接:


Is Julia Production Ready? Q&A With Bogumił Kamiński


2020-09-18 11:351733

评论

发布
暂无评论
发现更多内容

运维监控的几种方法

demo123567

Linux 命令 运维监控

NestJs 管道(Pipe)

小鑫同学

typescript 后端 nestjs 6 月 优质更文活动

关于 SAP ABAP 字符变量和字符串变量字符个数的一个知识点,和一个血案

汪子熙

后台开发 abap Netweaver 字符串处理 6 月 优质更文活动

重拾梦想!语音交友源码平台搭建技术知识:在线KTV功能的实现

山东布谷科技

软件开发 在线KTV 源码搭建 语音交友源码

JavaOrm框架-基础文档

demo123567

Java ORM 自主研发

熟练使用git之git撤回操作

demo123567

git撤回

404页面检测

demo123567

网络安全 内容检测 404页面

聚焦企业实践一线与个体职业成长|2023开放原子全球开源峰会OSPO分论坛成功举办

开放原子开源基金会

开源 开放原子全球开源峰会 OSPO 开放原子

快节奏升级,英特尔锐炫全力施展硬件性能

E科讯

开源即时通讯IM框架MobileIMSDK的H5端开发快速入门

JackJiang

网络 即时通讯 即时通讯IM

从数字化出海到出海数字化,企业如何打造制胜的「锚」与「帆」?

Lily

linux部署的几种方法

demo123567

部署 linux服务

深度学习应用篇-元学习[16]:基于模型的元学习-Learning to Learn优化策略、Meta-Learner LSTM

汀丶人工智能

人工智能 深度学习 元学习 元强化学习 6 月 优质更文活动

OTalk Android 14 开发者交流专场,OPPO、字节跳动、喜马拉雅等大咖齐聚碰撞

科技热闻

惊喜不间断,英特尔锐炫性价比拉满!

E科讯

STM32L0 ADC使用HAL库关于校准问题的说明

矜辰所致

STM32L051 ADC 6 月 优质更文活动

【C/C++】extern 的一些注意事项

sidiot

c 6 月 优质更文活动

Nautilus Chain测试网迎阶段性里程碑,模块化区块链拉开新序幕

西柚子

深入理解 ABAP Reference 变量

汪子熙

SAP abap Netweaver 6 月 优质更文活动

【Netty】「萌新入门」(三)ChannelFuture 与 CloseFuture

sidiot

Java 后端 Netty 6 月 优质更文活动

hyorm框架进阶用法之框架的原生使用方法

demo123567

Java ORM 自主研发

混沌演练状态下,如何降低应用的MTTR(平均恢复时间) | 京东云技术团队

京东科技开发者

混沌工程 系统安全 MTTR 企业号 6 月 PK 榜

中兴交换机如何配置?有哪些常用的配置命令,本文值得收藏!

wljslmz

6 月 优质更文活动

WWDC2023 Session系列:探索XCode15新特性 | 京东云技术团队

京东科技开发者

xcode wwdc session WWDC 2023 企业号 6 月 PK 榜

ChatGPT+Mermaid自然语言流程图形化产出小试 | 京东云技术团队

京东科技开发者

流程图 ChatGPT 企业号 6 月 PK 榜 Mermaid

SUSE:强化零信任、自动化和易用性,筑牢云原生安全防线

Rancher

k8s security Kubernets

飞桨携手第二届GitLink开源夏令营,邀你参与顶尖开源项目!

飞桨PaddlePaddle

人工智能 百度 飞桨

Sentinel适配Reactor+WebFlux框架的实现原理

互联网架构师小马

Java reactor sentinel WebFlux

软件测试/测试开发丨Python 闭包函数&装饰器

测试人

Python 程序员 软件测试 装饰器 函数

Spring的核心概念:Spring基础框架及技术生态

互联网架构师小马

Java spring 框架

观测云版本上新|观测云 DataFlux Func 托管版正式发布

观测云

编程 可观测 观测云 可观测性用观测云

Julia生产环境就绪了吗?Bogumił Kamiński的访谈_AI&大模型_Sergio De Simone_InfoQ精选文章