3

因此,我正在尝试调试在我可以访问的 HPC 设置中遇到的错误。我不会详细介绍该错误,因为它是特定于包的,我很确定这是一个环境变量类型的问题。那就是说这个包是神经元的,如果有人有它和奇点的经验,我会很感激你的意见。

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

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

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

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

使用最少的 /dev 并清空其他目录(例如 /tmp 和 $HOME),而不是从您的主机共享文件系统

这让我猜测它是一个路径/环境问题,但我不能 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 上运行?我对容器的理解是它们应该允许脚本在不同的系统上运行,因为一切都很好,包含在容器中。在这些阻止我运行代码的不同场景中,我允许通过什么?

我的直觉(不是完全有经验的)告诉我,当我在外壳中(或当我在本地运行脚本时)时,我正在执行一些环境变量,当我以其他方式运行它时我会丢失,但是我不知道从哪里开始寻找这样的东西,或者如何将它保存在容器中。

编辑:

我也只是尝试在 HPC 中对容器进行炮击,但我得到了同样的错误。因此,当我进入 shell 或执行不带--contain标志的脚本时,我的本地计算机上有一些东西正在使用

版本:

  • 奇点3.5
  • 蟒蛇 3.6.9
  • 神经元 8.0
4

1 回答 1

0

听起来像环境问题:您在开发环境中设置了一些在集群环境中不存在的东西。默认情况下,您的所有环境变量都会自动转发到奇异环境。我建议使用-e/--cleanenv来捕捉它。使用它时,只有SINGULARITYENV_在奇异环境中以 set 为前缀的变量。例如,让NEURON_HOME=/mnt/neuronexport SINGULARITYENV_NEURON_HOME=/mnt/neuron在运行奇异性命令之前使用。

一旦确定要更新的变量是什么,您就可以将其正常添加到%environmentor%post中,但您更喜欢。如果它是一个根据环境而变化的值,您可以将值导出为SINGULARITYENV_VARNAME.

于 2020-08-17T09:51:16.573 回答