在 SLURM 群集中的 Julia 上安装软件包的权限



我刚刚安装了 julia 以便在 slurm 集群上使用。 运行hello world作业效果很好,因此安装成功...直到安装第一个软件包,这会带来一些权限问题。 带命令的脚本

Pkg.add("MAT")

Pkg.installed()

给出错误消息

ERROR: LoadError: SystemError (with /home/<my_user_name>/.julia/logs): mkdir: Permission denied  

如果我从用户目录启动 julia 命令行,会出现同样的错误。 使用 sudo 启动 julia 时,此类消息会消失,但显然无法 sudo 群集作业。

我尝试在用户帐户上安装 带有 sudo 的 pkg,然后只是在非 sudo 下使用它,但出现了与此处记录的类似的其他错误消息。 https://github.com/JuliaLang/julia/issues/12876 在此页面上,指示chown用户MAT.ji,但这不起作用。 我尝试删除并重新添加软件包,但我只是在圈子里运行相同的错误消息。 我还在某一时刻收到了类似于此处记录的 EACCES 之类的错误消息 https://discourse.julialang.org/t/juliapro-pkg-installation-error-ioerror-unlink-permission-denied-eacces/35912

我是有此类权限问题的新手,因此我可以使用有关如何解决此问题的一些指导。 我不确定要尝试什么,以及以什么顺序尝试。

集群上的权限问题可能很棘手。

如果我们谈论的是物理集群,那么在不涉及系统管理员的情况下,您可能可以开始工作的最简单的通用解决方案可能是将.julia安装在几乎每个进程都具有文件系统权限的地方。即,全局网络暂存(在您的集群上的确切位置)。

无论如何,这可以说是一个好主意,因为全局暂存往往是大多数集群上最快的或最快的网络文件系统之一,并且每个julia 进程都必须在你开始作业时从.julia读取,所以如果这是在快速并行文件系统上,那就更好了。另一方面,临时性往往有时间限制,因此您可能希望保留本地副本,以备scratch/<yourusername>/.julia不可避免地被删除时使用。

为了使它正常工作,您必须告诉 Julia 以便它知道在哪里寻找.julia,而不是在默认位置找不到它时只制作一个新的 (~)。一种相对简单的方法是使用环境变量。您可以手动执行此操作,但我建议您改为在~/.bash_profile中放置以下内容。

# Some julia-specific environment variables
# To make sure I call the Julia installation in global scratch
export JULIA_DEPOT_PATH="/path/to/your/global/scratch/username/.julia"
export JULIA_PROJECT="/path/to/your/global/scratch/username/.julia/environments/v1.6/Project.toml"
export JULIA_LOAD_PATH="/path/to/your/global/scratch/username/.julia/environments/v1.6/Project.toml:/path/to/your/julia/application/folder/possibly/also/in/scratch/julia-1.6.1/share/julia/stdlib/v1.6" # The second one may be tricky to find if you're using a cluster-provided julia, but you can always just download the latest julia release yourself and plop it in scratch too
export JULIA_BINDIR="/path/to/your/julia/application/folder/possibly/also/in/scratch/julia-1.6.1/bin" # This last line may not be necessary, but doesn't hurt to specify.

其中 Julia 版本和全局暂存文件夹的实际路径会根据需要进行调整。

最新更新