朱莉娅似乎运行速度很慢。

3
我正在运行这个问题中展示的代码。我预期第二次和第三次运行会更快(第一次运行需要时间来编译代码)。然而,它似乎花费的时间与第一次相同。如何使这段代码运行更快?
编辑:我通过在Linux终端上输入以下命令来运行代码:julia mycode.jl 我尝试按照@Przemyslaw Szufel答案中的说明操作,但出现了以下错误:
julia> create_sysimage(["Plots"], sysimage_path="sys_plots.so", precompile_execution_file="precompile_plots.jl")

ERROR: MethodError: no method matching create_sysimage(::Array{String,1}; sysimage_path="sys_plots.so", precompile_execution_file="precompile_plots.jl")
Closest candidates are:
  create_sysimage() at /home/cardio/.julia/packages/PackageCompiler/2yhCw/src/PackageCompiler.jl:462 got unsupported keyword arguments "sysimage_path", "precompile_execution_file"
  create_sysimage(::Union{Array{Symbol,1}, Symbol}; sysimage_path, project, precompile_execution_file, precompile_statements_file, incremental, filter_stdlibs, replace_default, base_sysimage, isapp, julia_init_c_file, version, compat_level, soname, cpu_target, script) at /home/cardio/.julia/packages/PackageCompiler/2yhCw/src/PackageCompiler.jl:462
Stacktrace:
 [1] top-level scope at REPL[25]:1

我正在Debian Stable Linux上使用Julia:Debian ⛬ julia/1.5.3+dfsg-3


你是如何运行这段代码的?你每次都执行 julia mycode.jl 命令,还是在单个 Julia 会话中运行它? - Przemyslaw Szufel
我正在Linux终端上通过命令运行代码: julia mycode.jl - rnso
另外还有几个相关的问题: https://stackoverflow.com/questions/66159138/speeding-up-julia-on-terminal-for-the-second-run https://dev59.com/5qvka4cB1Zd3GeqPyslW - Sundar R
1
但是我不建议在那里提到的解决方案,通常只是看看它们的解释。简而言之,解决方案是使用REPL本身来运行代码:将您的代码放入文件中的函数中,并(对于像您以前的问题中的小量代码)使用Revise.includet如此描述 - Sundar R
2个回答

7
在Julia中,每次在单个Julia会话中运行时都会编译软件包。因此,启动一个新的Julia进程意味着每次都要编译Plots.jl。这是一个相当大的软件包,编译需要很长时间。
为了规避这个问题,可以使用PackageCompiler将Plots.jl编译成静态系统镜像,以后可以由Julia使用
基本步骤包括:
using PackageCompiler
create_sysimage(["Plots"], sysimage_path="sys_plots.so", precompile_execution_file="precompile_plots.jl")

完成后,您需要按照以下方式运行代码:
julia --sysimage sys_plots.so mycode.jl

同样地,你可以将 MultivariateStatsRDatasets 添加到生成的系统镜像中,但我认为它们不会引起任何显著的延迟。
请注意,如果连续运行是您的开发过程的一部分(而不是您的生产系统实施),并且您正在开发 Julia 模块,则可以考虑在开发过程中使用 Revise.jl 而不是预编译系统镜像。基本上,拥有系统镜像意味着每次更新 Julia 包时都需要重新构建它,因此我会认为这种方法更适用于生产而不是开发(具体取决于您的确切情况)。

我得到了以下错误:ERROR: MethodError: no method matching create_sysimage(::Array{String,1}; sysimage_path="sys_plots.so", precompile_execution_file="precompile_plots.jl") - rnso
我在上面的问题中已经包含了完整的错误信息。 - rnso
我没有 Julia 1.5.3 进行测试。尝试使用 1.8.0 呢? - Przemyslaw Szufel
1
我安装了Julia 1.8,它比以前的版本好多了。 - rnso
1
是的,这应该是可能的 - 我建议尝试将代码打包到一个包中,Pkg.activate 这个包,然后进行预编译。 - Przemyslaw Szufel
显示剩余7条评论

5
我曾经遇到这个问题,几乎要回到Python,但现在我使用include在REPL中运行脚本。这样做速度更快。
注意:第一次运行会比较慢,但在同一REPL会话中进行的后续运行即使编辑了脚本,也会很快。
Fedora 36,Julia 1.8.1

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