奇点行为:shell vs exec

2024-09-29 20:16:39 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试图调试我在HPC安装程序中遇到的一个错误。我不会详细讨论这个错误,因为它是特定于包的,我很确定这是一个环境变量类型的问题。也就是说,这个软件包是neuron,如果有人对它和singularity有经验,我将非常感谢您的输入

当我使用以下工具在本地测试所有内容时:

singularity exec --bind ./:/mnt container.sif my_script.py 

没有问题。但是,同一命令在HPC群集上出错。我开始尝试在本地重新创建错误,以查看问题所在

由于我仍然不知道的原因,我在集群上得到的错误可以通过向exec命令添加--containall标志在本地重现。事实上,即使是--contain标志也可以重现错误。我可以从文件中看出--contain将:

use minimal /dev and empty other directories (e.g. /tmp and $HOME) instead of sharing filesystems from your host

这让我猜测这是一个路径/环境问题,但我不是100%确定,因为我对所有不是python的东西都还不熟悉

为了尝试解决这个问题,我尝试使用singularity shell重新创建错误。这就是我希望有人能为我澄清的地方。如果我这样做:

singularity shell --containall --bind ./:/mnt container.sif
cd /mnt
python3 my_script.py

脚本运行良好,没有错误。然而,当我跑步时:

singularity exec --containall --bind ./:/mnt container.sif python3 /mnt/my_script.py

我得到的错误与我在集群上得到的错误相同

这两种方法有什么不同?为什么可能炮击到容器中工作,而像这样执行它却不工作?我只是在寻找帮助来调试它

此外,为什么可能脚本在本地运行,而不是在HPC上运行?我对容器的理解是,它们应该允许脚本在不同的系统上运行,因为所有内容都包含在容器中。在这些不同的场景中,我允许什么阻止我运行代码

我的直觉(不是很有经验)告诉我,当我使用shell时(或者当我在本地运行脚本时),我正在执行一些环境变量,而当我以其他方式运行它时,我正在丢失这些变量,但是我不确定从何处开始寻找这样的东西,或者如何将其保存在容器中

编辑:

我还在HPC中尝试炮击容器,但我得到了相同的错误。因此,在我的本地机器上,当我在shell中或在没有--contain标志的情况下执行脚本时,会用到一些东西

版本:

  • 奇点3.5
  • Python 3.6.9
  • 神经元8.0

Tags: py脚本bindmycontainer错误scriptshell
1条回答
网友
1楼 · 发布于 2024-09-29 20:16:39

听起来像是环境问题:在dev环境中设置了集群环境中不存在的东西。默认情况下,所有环境变量都会自动转发到singularity环境。我建议使用-e/ cleanenv来捕捉这一点。当使用它时,只有在奇点环境中设置了前缀为SINGULARITYENV_的变量。e、 例如,要使NEURON_HOME=/mnt/neuron在运行singularity命令之前使用export SINGULARITYENV_NEURON_HOME=/mnt/neuron

一旦您确定了要更新的变量是什么,您可以在%environment%post中添加它,不管您喜欢什么。如果该值随环境而变化,则可以在SINGULARITYENV_VARNAME中导出该值

相关问题 更多 >

    热门问题