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测试来确认。
我正在 运行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测试来确认。