Nvidia Jetson Nano docker

Nvidia Jetson Nano with docker

我正在 运行Nvidia Jetson Nano 上安装自定义 Yocto 映像,其中包含 docker-ce (v19.03.2)。我能够 运行 docker 没有问题。

当我想使用docker进行视力测试时,问题就来了。我需要访问主机端 CUDA 和 tensorRT。这是通过 docker-ce 之上的 Nvidia Container Runtime 访问的。我已经手动安装了 Nvidia Container Runtime (v0.9.0 beta)(提取了必要的 .deb 包并将它们复制粘贴到 rootfs 中)来测试我的构建,它似乎工作正常。

当我运行docker info时我可以看到nvidia运行时间可用,当我运行时它不抱怨docker 与 docker run -it --runtime=nvidia image

如果我 运行 deviceQuery 测试 OUTSIDE docker,我得到以下信息:

$ /usr/bin/cuda-samples/deviceQuery
...
CUDA Driver Version / Runtime Version          10.0 / 10.0
CUDA Capability Major/Minor version number:    5.3
...
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.0, CUDA Runtime Version = 10.0, NumDevs = 1
Result = PASS

但是,当我想运行 deviceQuery IN a docker 测试CUDA可用性时,它失败了:

./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

cudaGetDeviceCount returned 35
-> CUDA driver version is insufficient for CUDA runtime version
Result = FAIL

其中Dockerfile如下:

FROM nvcr.io/nvidia/l4t-base:r32.2

COPY ./deviceQuery /tmp/deviceQuery

WORKDIR /tmp/

CMD ["./deviceQuery"]

所以我的问题是:

为什么 deviceQuery 测试在 docker 内失败,即使我安装了带有 docker 的 Nvidia Container Runtime? - 我该如何解决这个问题?

------------编辑:---------

来自 nvidia devtalk 的 this thread 上有更多相关信息。

NVIDIA SDK-manager 的 rootfs 中包含的 .csv 包含将 GPU 访问权传递给容器所需的特定 lib/dir/sym。 .csv 文件中列出的文件将合并到容器中并允许访问这些文件。具体需要哪些文件,取决于容器中需要什么。

csv文件中列出的文件的实际路径在主机上是相同的当然是非常重要的,否则合并将失败。这些路径不是默认 Yocto 设置的正确路径,因为它们是为默认 NVIDIA SDK-manager 映像 rootfs 设置创建的,因此需要更正。

更正后,容器中的GPU加速访问应该是可以的,可以通过deviceQuery测试来确认。