微风拂过脸颊,温暖的阳光驱散了早晨的寒意。我站在一座独特的建筑前,只能用“独特”来形容它:一系列以奇怪的角度突出的金属板,它们暗淡的光芒立刻令人印象深刻。这就是雷·斯塔塔中心和玛丽亚·斯塔塔中心,一座高耸的巨石,也是人们来自世界各地参加和参与的活动场所。我来这里参加了第三届 JuliaCon,这是麻省理工学院一年一度的 Julia 会议。
在 JuliaCon 开始的前夕,举办了一系列关于人们使用 Julia 的一些重要领域的研讨会。我和JuliaLab 的其他成员一起主持了并行计算研讨会。我们研讨会的关键思想是向用户展示在 Julia 中编写和执行并行代码的多种不同方法。我谈论了使用名为 ArrayFire 的包进行简单的 GPU 计算,以及使用 Julia 的多线程实现加速。
第一天从第一个主题演讲开始 - 盖伊·斯蒂尔,软件行业的中流砥柱,编程语言设计的专家。他谈论了他设计 Fortress 的冒险经历,这是一种旨在擅长数学编程的语言。他介绍了关键的设计原则和权衡:从类型层次结构到他们的并行模型(自动工作窃取),以及有趣的选择(例如非传递运算符优先级)。我的同事 Keno Fischer 接着介绍了新的 Julia 调试器:Gallium!Gallium 在其复杂性和多功能性方面相当令人叹为观止,以至于 Keno 本人用它来调试 C 和 C++ 中的代码!一个强大的调试器通过 GUI 集成变得更加出色,Mike Innes 在他演示 Juno-Gallium 集成时非常有用地展示了这一点。逐步执行、打印和断点承诺了强大的包开发体验。
下一场会议是关于数据科学的。Simon Byrne 谈论了 Julia 中的数据科学生态系统和未来计划。他提到了DataFrames 的著名问题,然后为生态系统制定了一个路线图。本场会议的剩余部分以音乐处理中的一个有趣的演示为特色,而 Arch Robison 展示了我们如何使用 Julia 作为代码生成器。
晚上在不同的房间同时进行两场会议。这是 JuliaCon 的一个反复出现的特征,总是很难决定参加哪个会议。这次,我选择参加关于自动微分的会议,内容涉及JuMP 和前向微分,使用ForwardDiff.jl
。我不想错过关于稀疏线性系统迭代方法的演讲。各种技术和方法的性能相互比较和评估,这使得演讲非常引人入胜,我真的很享受。
晚上的会议以 Jeffrey Sarnoff 为特色,他是 JuliaCon 2016 的赞助商之一。Sarnoff 先生对扩展精度浮点数有一些非常有趣的见解。就这样结束了 JuliaCon 的第一天。现在该去 JuliaHouse 了!JuliaHouse 是一家 Airbnb,一群 Julia 贡献者租了下来。他们有一个院子,还提供烧烤,是人们放松、放松身心并与其他 Julia 人建立联系的理想场所。人们在那里一直玩到凌晨,不知何故,他们准时赶上了第二天会议。
第二天从 Tim Holy 教授的主题演讲开始,他是 Julia 语言和生态系统的多产贡献者。他谈论了 Julia 中数组的状态,并向我们展示了他对迭代器的一些想法。我发现 Holy 教授在整个 Julia 社区中受到广泛的赞赏,因为他参与了各种包以及语言中的关键问题。我还注意到,他在早些时候的几个会议上也提出了一些非常巧妙的洞察性的问题。Stefan 接着谈论了非常重要的 Julia 1.0话题。这是一个相当全面的清单,列出了 Julia 准备好成为 1.0 版本之前需要做的事情,他涉及了编译器、类型系统、运行时、多线程、字符串等等的各个方面。
下一场会议看到加州大学伯克利分校的一个团队展示了他们的自动驾驶赛车,该赛车使用一些优化包(特别是 JuMP 和 Ipopt)来解决实时优化问题。Julia 运行在安装了 Ubuntu 14.04 的 ARM 芯片上。Julia 也可以在 Raspberry Pi 上运行,我的同事 Avik 花了一些时间展示了在 Pi 上运行的酷炫的 Minecraft 演示。接下来的演讲是关于 JuliaBox 的。我的另一位同事 Nishanth 一直在努力将 JuliaBox 从 AWS 移植到 Google Cloud,他谈论了他对 JuliaBox 的激动人心的计划。
午餐后,我又不得不再次在并行会议之间做出选择,但我无法抗拒随机 PDE 和有限元会议的诱惑。Kristoffer Carlsson 回顾了Julia 中 FEM 的现状,谈论了从组装到共轭梯度的每个 FEM 阶段的包和生态系统。接下来的演讲是由维也纳工业大学的一位教授发表的,他的小组对纳米生物传感器进行研究,该小组使用 Julia 来解决在尝试模拟噪声和波动时出现的随机 PDE。接下来的演讲是关于天体动力学的,非常有趣,因为它让我了解了该领域科学家所面临的计算挑战。还有一些有趣的演示,我非常喜欢,尤其是其中一个演示,我们对目标轨道进行了建模和可视化,将其叠加在地球在太空中的视觉图像之上。
下午,经过深思熟虑,我参加了以统计建模和最小二乘法为特色的会议。关于稀疏最小二乘法优化问题的第一个演讲让我了解了经济学家需要解决的模型和问题类型,以及 Julia 生态系统如何帮助他们。关于计算神经科学的下一个演讲侧重于处理来自动物和人类手术患者的大量脑数据,这些数据高达数十 TB。我和 John 早些时候就他的工作进行了非常有趣的讨论,我能够深刻地了解他正在谈论的包(VinDsl.jl)对于他的工作为什么很重要。就这样结束了 JuliaCon 的第二天,对我个人来说是高度教育的一天,让我了解了天体动力学、有限元和计算神经科学。
我认为,开始一天最好的方式之一就是听诺贝尔奖获得者的演讲。听 Tom Sargent 教授的演讲真是一种超现实的体验,看到他对 Julia 感到兴奋。他向我们介绍了宏观经济学研究,并介绍了“对 Julia 的行走广告”的动态规划平方问题。举个例子,关于 Julia 中 DSGE 模型的下一场会议强调了 Julia 可以为宏观经济学研究和分析带来的益处。
下一场会议有一大堆 Julia Summer of Code (JSOC) 学生展示他们的项目。有些人无法参加会议,因此他们通过Google Hangouts 或预先录制好的视频展示了他们的工作。不幸的是,我没有能看到所有内容,因为我想赶上我同事 Jameson 在另一个房间的机器代码演讲。他谈论的材料非常有趣,让我开始思考 Julia 编译器。之后,我和他进行了非常有启发性的讨论,讨论了 Julia 解析器。
事实证明,下午我时间紧迫。我正在帮助 Shashi 将ArrayFire 插入到Dagger.jl 中,以便他能在几个小时后进行演讲,同时还在为当晚晚些时候的自己的 ArrayFire 笔记本电脑工作。但我们还是及时赶上了。因此,下午的会议以 Shashi 展示他的 out-of-core 框架 Dagger 为开始,接着是来自 IntelLabs 团队的ParallelAccelerator 的导览。我关注 ParallelAccelerator 一段时间了,我很兴奋,因为它的一些方面(比如自动消除边界检查)可以合并到 Base Julia 中。
晚上的会议向人们展示了如何在 Julia 中加速他们的代码。我之前的演讲者用Yeppp 讲解了向量化,然后我讲解了使用 ArrayFire 进行 GPU 加速。在这么多专家面前演讲确实令人不知所措,但我认为我做得还不错。但我确实比我分配的时间提前了 5 分钟结束。事实证明,两个并行会议最终都提前了几分钟结束。
最后,Andreas 走上讲台发表了总结性讲话,为我个人而言,这是一次非常重要的 JuliaCon。我能够欣赏 Julia 社区中各种各样的人:有些人专注于核心语言,有些人专注于自己作为研究的一部分的包;有些人业余时间从事 Julia 工作,有些人(像我一样)全职工作;社区中的相对新手 JSOC 学生到经验丰富的资深人士。但有一件事将他们联系在一起:对一种新语言的彻底欣赏,这种语言的灵活性和功能使人们能够解决重要问题,社区的开放性和民主意识吸引了更多聪明的人,以及这样一种想法,即来自不同时区和不同背景的个人可以推动科学计算的革命。