Vulkan在Docker容器中运行Unity构建时未检测到GPU



在我的电脑上运行Unity构建通常效果良好。然而,当我试图在Docker容器中运行Unity构建时,我得到了一个分段错误Segmentation fault (core dumped)。我使用Ubuntu20.04和Nvidia GTX1080,并安装了所有必需的依赖项,如英伟达Docker工具包。

看看Unity生成的日志,我的Nvidia GPU似乎没有被Vulkan检测到。

[Vulkan init] SelectPhysicalDevice requestedDeviceIndex=-1 xrDevice=(nil)
[Vulkan init] Physical Device 0xfe9930 [0]: "llvmpipe (LLVM 12.0.0, 256 bits)" deviceType=4 vendorID=10005 deviceID=0
[Vulkan init] Selected physical device (nil)
Caught fatal signal - signo:11 code:1 errno:0 addr:(nil)

通过查看CCD_ 2的输出,只有CCD_ 3被检测为物理设备。

GPU0:
VkPhysicalDeviceProperties:
---------------------------
apiVersion     = 4198582 (1.1.182)
driverVersion  = 1 (0x0001)
vendorID       = 0x10005
deviceID       = 0x0000
deviceType     = PHYSICAL_DEVICE_TYPE_CPU
deviceName     = llvmpipe (LLVM 12.0.0, 256 bits)

在我的Dockerfile中,我设置了以下Nvidia设置

ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES all

并且在启动容器时使用CCD_ 4。

在容器中运行nvidia-smi也是可行的。

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.203.03   Driver Version: 450.203.03   CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:15:00.0  On |                  N/A |
| 12%   28C    P8    18W / 250W |    644MiB / 11170MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
     
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

关于解决这个问题有什么想法吗?谢谢

我不知道问题出在哪里,但我找到了解决方法。

我现在在Dockerfile中使用unityci/editor:ubuntu-2022.1.20f1-base-1,而不是使用ubuntu:20.04作为基本映像。

我在docker compose文件中使用以下设置来启动容器:

unity:
build: 
dockerfile: unity.Dockerfile
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix
- ${XAUTHORITY}:${XAUTHORITY}
- $XDG_RUNTIME_DIR:$XDG_RUNTIME_DIR
environment:
- XAUTHORITY
- DISPLAY
- XDG_RUNTIME_DIR
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]

最新更新