首次运行时,Julia软件包加载非常缓慢。

10

我正在使用Linux 5.4.0下的Julia 1.5.2,并等待约15分钟来执行Pkg.add("DifferentialEquations")。然后我在Jupyter Notebook中启动了Kernel并运行了以下代码,它花费了1分钟才执行(第一次尝试时需要225秒)。

t = time()
using Printf
using BenchmarkTools
using OrdinaryDiffEq
using Plots
tt = time() - t
@sprintf("It took %f seconds to import Printf, BenchmarkTools, OrdinaryDiffEq and Plots.", tt)
# It took 58.545894 seconds to import Printf, BenchmarkTools, OrdinaryDiffEq and Plots.

最后,我按照上述方法对每个软件包进行了相同的操作。以下是总结:

Printf:           0.004755973815917969
BenchmarkTools:   0.06729602813720703
Plots:            19.99405598640442
OrdinaryDiffEq:   19.001102209091187

我知道从这里得知Pkg过去很慢,但我认为15分钟根本不是正常的安装时间。然而,这不是我的大问题。
我知道每次启动内核或加载一些包时Julia需要编译所有内容。但显然这不是编译时间,而是编译永恒。
有人能想出为什么这么慢吗?如果这是正常的,是否最好像Python中的numpy和其他类似库一样为Pkg提供预编译的软件包?或者至少在第一个using中永远编译?
谢谢!
我的完整平台信息:
Julia Version 1.5.2
Commit 539f3ce943 (2020-09-23 23:17 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Core(TM) i3-6100U CPU @ 2.30GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-9.0.1 (ORCJIT, skylake)

1
你能在夜间构建上试试吗?应该会快得多(我的猜测是总共15秒)。 - Oscar Smith
还有,您是使用机械硬盘还是固态硬盘?即使是1.5版本,这些时间似乎也很慢。 - Oscar Smith
@OscarSmith,稍后我会试一下,谢谢。 - Héliton Martins
@OscarSmith 我有一块SSD(速度并不是最快的,但还算可以接受)。 - Héliton Martins
2
@OscarSmith,它将Plots的加载时间缩短到了约6.2秒。再次感谢您。 - Héliton Martins
1个回答

6

在涉及到 julia-lang 时,这个问题通常被称为延迟(latency)首图时间(TTFP)(time-to-first-plot)。当使用这些关键词进行搜索时,您可以找到一些相关的讨论。

一篇很好的最近分析了这个问题,在文章“分析Julia编译器延迟的来源:方法失效”中进行了评估。

截至撰写本文时(2020年底,稳定版本v1.5.3),没有普遍适用的解决方案,但是大量预编译包而不是即时编译的策略正在讨论中,并取得了较小的成功。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接