所以我试图调试我在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
标志的情况下执行脚本时,会用到一些东西
版本:
听起来像是环境问题:在dev环境中设置了集群环境中不存在的东西。默认情况下,所有环境变量都会自动转发到singularity环境。我建议使用
-e
/cleanenv
来捕捉这一点。当使用它时,只有在奇点环境中设置了前缀为SINGULARITYENV_
的变量。e、 例如,要使NEURON_HOME=/mnt/neuron
在运行singularity命令之前使用export SINGULARITYENV_NEURON_HOME=/mnt/neuron
一旦您确定了要更新的变量是什么,您可以在
%environment
或%post
中添加它,不管您喜欢什么。如果该值随环境而变化,则可以在SINGULARITYENV_VARNAME
中导出该值相关问题 更多 >
编程相关推荐