Singularity-Container + Python + PyTorch:为什么 'import torch' 在 Arch Linux 主机上工作但在 Centos 7 主机上失败?
Singularity-Container + Python + PyTorch: Why does 'import torch' work on Arch Linux host but fails on Centos 7 host?
我正在尝试构建一个奇点容器,以在基于 CentOS 7 的集群上 运行 一个 Python 脚本。
容器 运行 在我的主机上符合预期,我也用它来创建容器,但是一旦导入 PyTorch 就在集群上失败。
可以使用这个最小定义文件的容器构建重现该问题:
debug.def:
Bootstrap: arch
%runscript
exec /usr/bin/python3 -c 'import torch; print(torch.__version__)'
%post
#--------------------------------------------------------------------------
# Basic setup from
# https://github.com/sylabs/singularity/blob/master/examples/arch/Singularity
#--------------------------------------------------------------------------
# Set time zone. Use whatever you prefer instead of UTC.
ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime
# Set the package mirror server(s). This is only for the output image's
# mirrorlist. `pacstrap' can only use your hosts's package mirrors.
echo 'Server = https://mirrors.kernel.org/archlinux/$repo/os/$arch' > /etc/pacman.d/mirrorlist
pacman -Sy --noconfirm gawk sed grep
# Set locale. Use whatever you prefer instead of en_US.
echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
pacman -S --noconfirm python python-pytorch
pacman -S --noconfirm pacman-contrib
paccache -r -k0
它是用 sudo singularity build debug.sif debug.def
构建的。
Arch Linux 上的容器和我的主机 运行。
在我的主机上执行容器输出 PyTorch 版本:
schellsn@host $ singularity run debug.sif
1.3.1
运行 它在集群上导致以下错误:
schellsn@cluster tmp$ singularity run debug.sif
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.8/site-packages/torch/__init__.py", line 81, in <module>
from torch._C import *
ImportError: libQt5Core.so.5: cannot open shared object file: No such file or directory
我不明白为什么找不到文件,因为它应该包含在容器中:
schellsn@cluster tmp$ singularity shell debug.sif
Singularity debug.sif:~/tmp> ls -l /usr/lib | grep libQt5Core
-rw-r--r-- 1 root root 1166 Nov 11 23:40 libQt5Core.prl
lrwxrwxrwx 1 root root 20 Nov 11 23:40 libQt5Core.so -> libQt5Core.so.5.13.2
lrwxrwxrwx 1 root root 20 Nov 11 23:40 libQt5Core.so.5 -> libQt5Core.so.5.13.2
lrwxrwxrwx 1 root root 20 Nov 11 23:40 libQt5Core.so.5.13 -> libQt5Core.so.5.13.2
-rwxr-xr-x 1 root root 5275240 Nov 11 23:40 libQt5Core.so.5.13.2
我假设导入时搜索中不包含相应的路径,并且我的主机上不会出现此问题,因为某些环境设置正在泄漏到容器中。
我也尝试使用 Sylabs Remote Builder,但它似乎无法构建 Arch 容器(pacstrap 在 $PATH 中找不到)。
尝试在其中一个节点上构建容器会导致同样的问题; Pacstrap 和 pacman 不可用。
我束手无策,非常感谢任何提示来解释这种行为!
为什么找不到共享库,如何解决?
更新#1:
这里是LD_LIBRARY_PATH环境变量的内容(回应@tsnowlan)
Arch Linux 主持人:
schellsn@host tmp$ echo $LD_LIBRARY_PATH
:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/local/cuda/lib:/usr/local/cuda/lib64
schellsn@host tmp$ singularity shell evpt_debug.sif
Singularity evpt_debug.sif: ~/tmp> echo $LD_LIBRARY_PATH
:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/local/cuda/lib:/usr/local/cuda/lib64:/.singularity.d/libs
CentOS 7 集群节点:
schellsn@cluster tmp$ echo $LD_LIBRARY_PATH
schellsn@cluster tmp$ singularity shell debug.sif
Singularity debug.sif:~/tmp> echo $LD_LIBRARY_PATH
/.singularity.d/libs
更新#2:
我确实设置了一个新的干净 VM(也是 运行ning arch),它也在那里重建了容器。这个容器显示了同样的问题;它 运行 在我的主机上,但不在 CentOS 7 集群上。
作为解决方法,我现在从一个 def 文件构建容器,该文件使用库 bootstrap 代理和 Ubuntu 18.04 图像而不是 Arch bootstrap 代理。
生成的容器在我的 Arch 主机和 CentOS 7 集群上运行。
我遇到了同样的问题:CentOS 7 主机和 Arch Linux 容器 (Python 3.8.1 / Pytorch 1.3.1)。以下 link 似乎暂时解决了我的问题。
编辑:从 link 开始,这个命令对我有用
sudo strip --remove-section=.note.ABI-tag /usr/lib64/libQt5Core.so.5
我正在尝试构建一个奇点容器,以在基于 CentOS 7 的集群上 运行 一个 Python 脚本。 容器 运行 在我的主机上符合预期,我也用它来创建容器,但是一旦导入 PyTorch 就在集群上失败。
可以使用这个最小定义文件的容器构建重现该问题:
debug.def:
Bootstrap: arch
%runscript
exec /usr/bin/python3 -c 'import torch; print(torch.__version__)'
%post
#--------------------------------------------------------------------------
# Basic setup from
# https://github.com/sylabs/singularity/blob/master/examples/arch/Singularity
#--------------------------------------------------------------------------
# Set time zone. Use whatever you prefer instead of UTC.
ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime
# Set the package mirror server(s). This is only for the output image's
# mirrorlist. `pacstrap' can only use your hosts's package mirrors.
echo 'Server = https://mirrors.kernel.org/archlinux/$repo/os/$arch' > /etc/pacman.d/mirrorlist
pacman -Sy --noconfirm gawk sed grep
# Set locale. Use whatever you prefer instead of en_US.
echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
pacman -S --noconfirm python python-pytorch
pacman -S --noconfirm pacman-contrib
paccache -r -k0
它是用 sudo singularity build debug.sif debug.def
构建的。
Arch Linux 上的容器和我的主机 运行。
在我的主机上执行容器输出 PyTorch 版本:
schellsn@host $ singularity run debug.sif
1.3.1
运行 它在集群上导致以下错误:
schellsn@cluster tmp$ singularity run debug.sif
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.8/site-packages/torch/__init__.py", line 81, in <module>
from torch._C import *
ImportError: libQt5Core.so.5: cannot open shared object file: No such file or directory
我不明白为什么找不到文件,因为它应该包含在容器中:
schellsn@cluster tmp$ singularity shell debug.sif
Singularity debug.sif:~/tmp> ls -l /usr/lib | grep libQt5Core
-rw-r--r-- 1 root root 1166 Nov 11 23:40 libQt5Core.prl
lrwxrwxrwx 1 root root 20 Nov 11 23:40 libQt5Core.so -> libQt5Core.so.5.13.2
lrwxrwxrwx 1 root root 20 Nov 11 23:40 libQt5Core.so.5 -> libQt5Core.so.5.13.2
lrwxrwxrwx 1 root root 20 Nov 11 23:40 libQt5Core.so.5.13 -> libQt5Core.so.5.13.2
-rwxr-xr-x 1 root root 5275240 Nov 11 23:40 libQt5Core.so.5.13.2
我假设导入时搜索中不包含相应的路径,并且我的主机上不会出现此问题,因为某些环境设置正在泄漏到容器中。 我也尝试使用 Sylabs Remote Builder,但它似乎无法构建 Arch 容器(pacstrap 在 $PATH 中找不到)。 尝试在其中一个节点上构建容器会导致同样的问题; Pacstrap 和 pacman 不可用。
我束手无策,非常感谢任何提示来解释这种行为! 为什么找不到共享库,如何解决?
更新#1:
这里是LD_LIBRARY_PATH环境变量的内容(回应@tsnowlan)
Arch Linux 主持人:
schellsn@host tmp$ echo $LD_LIBRARY_PATH
:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/local/cuda/lib:/usr/local/cuda/lib64
schellsn@host tmp$ singularity shell evpt_debug.sif
Singularity evpt_debug.sif: ~/tmp> echo $LD_LIBRARY_PATH
:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/local/cuda/lib:/usr/local/cuda/lib64:/.singularity.d/libs
CentOS 7 集群节点:
schellsn@cluster tmp$ echo $LD_LIBRARY_PATH
schellsn@cluster tmp$ singularity shell debug.sif
Singularity debug.sif:~/tmp> echo $LD_LIBRARY_PATH
/.singularity.d/libs
更新#2:
我确实设置了一个新的干净 VM(也是 运行ning arch),它也在那里重建了容器。这个容器显示了同样的问题;它 运行 在我的主机上,但不在 CentOS 7 集群上。
作为解决方法,我现在从一个 def 文件构建容器,该文件使用库 bootstrap 代理和 Ubuntu 18.04 图像而不是 Arch bootstrap 代理。 生成的容器在我的 Arch 主机和 CentOS 7 集群上运行。
我遇到了同样的问题:CentOS 7 主机和 Arch Linux 容器 (Python 3.8.1 / Pytorch 1.3.1)。以下 link 似乎暂时解决了我的问题。
编辑:从 link 开始,这个命令对我有用
sudo strip --remove-section=.note.ABI-tag /usr/lib64/libQt5Core.so.5