使用 Nvidia Container Toolkit 时,Vulkan 无法从 docker 容器内检测到 Nvidia GPU

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

我的目标是能够使用 Nvidia Container Toolkit 在 Docker 容器中运行 Vulkan 应用程序。理想情况下在主机和容器中运行 Ubuntu 22.04。

我创建了一个 git 存储库,以允许其他人更好地重现此问题:https://github.com/rickyjames35/vulkan_docker_test 自述文件解释了我的发现,但我会在这里重申它们。

对于此测试,我在主机和容器中运行 Ubuntu 22.04

FROM ubuntu:22.04
。对于此测试,我发现
vulkaninfo
找到的唯一设备是
llvmpipe
,它是基于 CPU 的图形驱动程序。我还发现,在 Ubuntu 22.04 的容器和主机上运行
vkcube
时,llvmpipe 无法渲染。这是
vkcube
的容器输出:

Selected GPU 0: llvmpipe (LLVM 13.0.1, 256 bits), type: 4
Could not find both graphics and present queues

在我的主机上,我可以告诉它使用

llvmpipe

vkcube --gpu_number 1
Selected GPU 1: llvmpipe (LLVM 13.0.1, 256 bits), type: Cpu
Could not find both graphics and present queues

正如你所看到的,他们有同样的错误。有趣的是,如果我将容器交换到

FROM ubuntu:20.04
,那么
llvmpipe
就可以渲染,但这是没有意义的,因为我不希望进行 CPU 渲染。这里的主要问题是,当使用 Nvidia Container Toolkit 以及
NVIDIA_DRIVER_CAPABILITIES=all
NVIDIA_VISIBLE_DEVICES=all
时,Vulkan 无法从容器内检测到我的 Nvidia GPU。我也尝试过使用 nvidia/vulkan。当在此容器中运行
vulkaninfo
时,我得到:

vulkaninfo
ERROR: [Loader Message] Code 0 : vkCreateInstance: Found no drivers!
Cannot create Vulkan instance.
This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan.
ERROR at /vulkan-sdk/1.3.236.0/source/Vulkan-Tools/vulkaninfo/vulkaninfo.h:674:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER

我怀疑这与我在主机上运行 Ubuntu 22.04 有关,尽管 docker 的重点是主机操作系统通常不应该影响容器。

在上面的测试中,我使用的是

nvidia-driver-525
我尝试过使用不同版本的驱动程序,但结果相同。此时,我不确定我是否做错了什么,或者 Nvidia Container Toolkit for Ubuntu 22.04 是否不支持 Vulkan,尽管它声称支持。

docker ubuntu nvidia vulkan nvidia-docker
4个回答
3
投票

22.04 上的 vulkan 驱动程序为 1.1 版本,如果您使用 ubuntu:23_04,您将获得 vulkan 1.3 驱动程序,我能够让它与以下内容一起使用

FROM ubuntu:23.04

ARG DEBIAN_FRONTEND=noninteractive

ENV NVIDIA_DRIVER_CAPABILITIES compute,graphics,utility

# Install Vulkan
RUN apt-get update \
    && apt-get install -y \
    libxext6 \
    libvulkan1 \
    libvulkan-dev \
    vulkan-tools


COPY nvidia_icd.json /etc/vulkan/icd.d

您还需要这个 nvidia_icd.json

{
    "file_format_version" : "1.0.0",
    "ICD": {
        "library_path": "libGLX_nvidia.so.0",
        "api_version" : "1.3"
    }
}

然后在新容器中,您可以运行

vulkaninfo --summary
并查看您的 nvidia 卡。


2
投票

我让它一路工作,无需复制

nvidia_icd.json
。伊恩·珀顿(Ian Purton)您的回答对于寻找答案非常有帮助。它引导我来到这里 https://github.com/NVIDIA/nvidia-container-toolkit/issues/16 这表明 Ian Purton 发布的内容在解决此问题的 NVIDIA Container Toolkit v1.12.0 之前是必需的。我已经用修复程序更新了我的存储库。 https://github.com/rickyjames35/vulkan_docker_test 我的仓库中拥有的是使用
docker compose
在 Docker 容器中运行 Vulkan 的最简单的方式。


0
投票

在尝试使用 nvidia/cuda:12.0.0-devel-ubuntu22.04 映像设置 docker 容器时,我遇到了类似的问题。

我能够使用 unityci/editor 图像让它工作。这是我使用的docker命令。

docker run -dit -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix/ -v /dev:/dev --gpus='all,"capabilities=compute,utility,graphics,display"' unityci/editor:ubuntu-2022.2.1f1-base-1.0.1

设置容器后,我必须安装

vulkan-utils
libnvidia-gl-525
然后一切正常。

希望这有帮助!


0
投票

以上解决方案都不适合我。但按照此处的说明将 nvidia-container-toolkit 升级到 1.14.4 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/1.14.4/install-guide.html 解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.