gpt4 book ai didi

python - 奇点行为 : shell vs exec

转载 作者:行者123 更新时间:2023-12-05 06:13:43 25 4
gpt4 key购买 nike

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

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

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

没有问题。然而,同样的命令在 HPC 集群上遇到了错误。我开始尝试在本地重新创建错误以查看问题出在哪里。

由于我仍然不知道的原因,可以通过将 --containall 标志添加到 exec 命令来在本地重现我在集群上遇到的错误。事实上,即使是 --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

我在集群上遇到了同样的错误。

这两种方法有何不同?为什么 可能 shell 进入容器工作,而像这样执行它却不起作用?我只是在寻求帮助来解决这个问题。

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

我的直觉(没有完全经验)告诉我,当我进入(或当我在本地运行脚本时)我正在携带一些环境变量,而当我在另一个环境中运行它时我正在丢失方式,但我不确定从哪里开始寻找这样的东西,或者如何将它保存在容器中。

编辑:

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

版本:

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

最佳答案

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

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

关于python - 奇点行为 : shell vs exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63172212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com