如何在命令行中执行Julia代码?
我最近一直在转移我在朱莉娅的代码。我想知道如何在命令行中执行Julia代码 我知道Julia代码只需运行一次就可以完成 但问题是我需要在集群上为我的仿真模型做参数扫描,在集群中我只能使用命令行,而不能使用REPL 在集群上运行模拟复制的最佳实践是什么?Julia使用的是独立于是否在命令行、REPL或计算集群上执行Julia的 一次运行代码进行编译,一次运行代码以提高性能是否有问题?您可以始终使用一个小模型或数据集编译代码,然后在完整的数据集上运行编译后的代码 如果在一个节点上运行,则可以编写包含所有执行代码的函数(例如,如何在命令行中执行Julia代码?,julia,Julia,我最近一直在转移我在朱莉娅的代码。我想知道如何在命令行中执行Julia代码 我知道Julia代码只需运行一次就可以完成 但问题是我需要在集群上为我的仿真模型做参数扫描,在集群中我只能使用命令行,而不能使用REPL 在集群上运行模拟复制的最佳实践是什么?Julia使用的是独立于是否在命令行、REPL或计算集群上执行Julia的 一次运行代码进行编译,一次运行代码以提高性能是否有问题?您可以始终使用一个小模型或数据集编译代码,然后在完整的数据集上运行编译后的代码 如果在一个节点上运行,则可以编写包含
my_sim()
),然后作为一个计划作业串行运行复制。第一次调用my_sim()
会编译所有代码,随后的调用运行得更快
如果您在多个节点上运行,那么仔细考虑如何分配作业;也许您可以分组测试参数设置,并将每个组分配到自己的节点,然后在每个节点上执行
my_sim()
。只需使用命令行调用脚本:
julia myscript.jl
但问题是我需要在集群上为我的仿真模型进行参数扫描,在集群中我只能使用命令行
我认为使用Julia内置的并行性是最容易的<代码>pmap通常起作用。如果你在解微分方程,以及它的内部实现。这也可以作为处理其他问题的很好的参考
然后你所要做的就是给Julia打电话,这样它就可以访问所有的内核。您可以通过传入machinefile轻松完成此操作:
julia myscript.jl --machinefile the_machine_file
每当创建批处理作业时都会生成机器文件(对于某些集群,有时需要启用MPI以显示机器文件)。有关更多信息,请参阅。假设您试图实现以下目标:
- 在顶部有一个包含代码的.jl文件和一个shebang(
,或类似文件)#!/usr/bin/env julia
- 让另一个程序、bash等调用此代码(例如,在bash中调用
)/mycode.jl
- 但是避免每次调用代码时都执行编译步骤,因为这会产生大量开销
- 提取所有必须编译到模块中的代码
- 因此,要调用的实际文件减少到
- 通过向模块文件中添加
使模块预编译(有关此方面的更多信息,请参阅)\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()
这样,在每台机器调用一次代码之后,预编译对象就可用了,从而有效地将上述开销减少到零。忘了提到我已经设法从集群上的命令行运行了Julia 在PBS作业脚本中,可以添加
julia run\u mytest.jl$参数
。在run_mytest.jl
中,您可以添加
include("mytest.jl")
arg = parse(Float64, ARGS[1])
mytest(arg)
请在下面找到在Julia HPC群集上运行参数扫描的最佳实践。 我讨论了三个问题:(1)计算模拟体系结构(2)集群设置(3)预编译 <> >规划仿真体系结构,第一步考虑每个扫描值计算时间的方差
- 如果计算时间的差异很小,您可以使用建议的
。另一个很好的选择是pmap
循环@并行
- 但是,如果计算时间的差异很大,则不建议使用这些选项
和pmap
只需将任务平均分配给所有员工即可。因此,执行时间将是工人完成分配的所有作业所花费的最长时间李>@parallel
- 在主进程上存储作业编号(或参数扫描值)
- 使用@spawnat在从属进程上启动循环(只需迭代
)workers()
- 让从进程使用
(当然,某些外部数据库可以用于此目的)轮询主进程以获取下一个参数扫描值李>ParallelDataTransfer.jl
ClusterManagers.jl
-工作起来很有魅力,您提到的PBS受到支持。此库将执行适当的PBS群集管理器命令,以将节点添加到您的群集。简单、高效且易于使用。其他人建议的--machinefile
选项非常方便,但需要无密码SSH,这在大多数HPC群集上通常不可用(或不容易配置)(除非它是公共云中的群集-对于AWS或Azure,我绝对推荐--machinefile
)
请注意,在某些HPC集群(例如Cray)中,由于硬件架构不同,您可能需要分别为访问节点和工作节点构建Julia。幸运的是,Julia并行化在异构环境中工作没有任何问题
最后但并非最不重要的一点是,您可以始终使用集群管理器运行单独的进程(网格计算/阵列计算作业)。但是,如果计算时间是异构的,这将变得复杂(请参见前面的注释)