无法在 Singularity 容器中使用 Nvidia OpenCL

问题描述 投票:0回答:0

我为在 Singularity 容器中提供 OpenCL GPU 加速而苦苦挣扎。直接在主机本身上执行(中间没有 Singularity),我得到了 GPU 应用程序,一个名为 Yasara 的专有分子建模/模拟软件,运行在 Linux Mint 20.1(内核 5.4.0-91-generic)上,带有 Nvidia 驱动程序 530.41 和 CUDA版本 12.1。

clinfo
给了我很多输出,但有趣的是,最后没有 ICD 行。但是,有一条注释说:“注意:您的 OpenCL 库仅支持 OpenCL 2.2”。

现在,当我在使用

clinfo
标志执行的容器中调用
--nv
时,就会发生这种情况:

$ singularity exec --nv image.sif /bin/bash
Singularity> clinfo
Number of platforms          0

绑定指向 ICD 库的附加目录时看起来更好

$ singularity exec --nv --bind /etc/OpenCL image.sif /bin/bash
Singularity> ls /etc/OpenCL/vendors/
nvidia.icd
cat /etc/OpenCL/vendors/nvidia.icd 
libnvidia-opencl.so.1
Singularity> clinfo
Number of platforms                               1
  Platform Name                                   NVIDIA CUDA
  Platform Vendor                                 NVIDIA Corporation
  Platform Version                                OpenCL 3.0 CUDA 12.1.98
  Platform Profile                                FULL_PROFILE

[... much more stuff ...]

ICD loader properties
  ICD loader Name                                 OpenCL ICD Loader
  ICD loader Vendor                               OCL Icd free software
  ICD loader Version                              2.2.11
  ICD loader Profile                              OpenCL 2.1
    NOTE:   your OpenCL library only supports OpenCL 2.1,
        but some installed platforms support OpenCL 3.0.
        Programs using 3.0 features may crash
        or behave unexpectedly

很明显,这次(在容器中)我在最后看到了 ICD 输出。

/etc/OpenCl
中唯一的文件 nvidia.icd 列出了一个名为
libnvidia-opencl.so.1
的库,它与当前的 Nvidia 驱动程序 530.41

相关联
$ locate libnvidia-opencl.so
/usr/lib/i386-linux-gnu/libnvidia-opencl.so.1
/usr/lib/i386-linux-gnu/libnvidia-opencl.so.530.41.03
/usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
/usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.530.41.03

所以一切看起来都很好,但是当我在 Singularity 中运行 Yasara 时,它给了我一个错误并且没有使用 GPU:

OpenCL program build failed with error -11 (CL_BUILD_PROGRAM_FAILURE):
Device     NVIDIA Corporation NVIDIA GeForce GTX 1050 (version 3.00 (OpenCL 3.0 CUDA)) with driver 530.41.03

确实,在主机和容器中看到不同的

clinfo
输出确实有点令人困惑。特别是,OpenCL 版本 2.1 与主机上显示的 2.2 不同。

原因可能是我最近将 Nvidia 驱动程序 470 替换为 530 版本(以及最新的 CUDA 工具包)。也许,两种不同的安装/配置正在竞争。因为当我将当前的 Cuda 库传递给容器

LD_LIBRARY_PATH
时,我得到了与主机上相同的 clinfo 输出(最后没有 ICD 行并且支持 OpenCL 2.2)。但是,运行时错误
CL_BUILD_PROGRAM_FAILURE
仍然存在。

有谁能告诉我需要更改什么才能让 OpenCL 应用程序在奇异点运行?

非常感谢!

opencl nvidia singularity-container
© www.soinside.com 2019 - 2024. All rights reserved.