问题描述
这是我的情况:我有一台 x86 机器,我需要创建一个与 Jetson Nano 兼容的 Docker 映像。我没有 Jetson nano,但我想测试我的 Docker 映像是否正常工作,我需要测试一些运行 CUDA 二进制文件的代码。所以我设置了我的 nano docker 镜像 nvcr.io/nvidia/l4t-pytorch:r32.4.4-pth1.6-py3
并在我的 x86 机器上运行它。然后我以交互方式进入容器并启动了一个python解释器。然后我尝试导入 PyTorch
Python 3.6.9 (default,Oct 8 2020,12:12:24)
[GCC 8.4.0] on linux
Type "help","copyright","credits" or "license" for more information.
>>> import torch
它失败了。我的输出是
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
File "/usr/local/lib/python3.6/dist-packages/torch/__init__.py",line 188,in <module>
_load_global_deps()
File "/usr/local/lib/python3.6/dist-packages/torch/__init__.py",line 141,in _load_global_deps
ctypes.CDLL(lib_path,mode=ctypes.RTLD_GLOBAL)
File "/usr/lib/python3.6/ctypes/__init__.py",line 348,in __init__
self._handle = _dlopen(self._name,mode)
OSError: libcurand.so.10: cannot open shared object file: No such file or directory
我的 docker 镜像与我应该安装在我的主机上的 CUDA 二进制文件相匹配。我需要让我的代码运行,但我不确定为什么即使我使用的是 NVIDIA 认可的 docker 映像,我仍然会遇到 CUDA 二进制问题。 CUDA 二进制文件应预加载到图像上。
解决方法
所以当前图像的问题:nvcr.io/nvidia/l4t-pytorch:r32.4.4-pth1.6-py3
是不支持访问主机 x86 机器上的 NVIDIA 驱动程序。如果您访问官方 nvidia-docker github,您将看到 building jetson docker containers on an x86 machine 部分。然后注意底部它说
已知限制:不幸的是,您将无法运行任何二进制文件 调用 x86 主机上的 NVIDIA 驱动程序。
这意味着验证调用 NVIDIA 二进制文件的任何代码的任务是不可能的。唯一的方法是尽可能创建最好的容器,然后验证代码在物理 Jetson 设备上是否正常工作。