因此,我正在尝试调试在我可以访问的 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