很多时候,在容器中需要用到cuda环境,但相对来说,在主机上安装cuda比在容器中安装cuda是更简单的

而且主机安装了,容器中再安装,岂不是多此一举,浪费我仅剩不多的空间(哭泣)

现默认主机已经安装好cuda

unknown or invalid runtime name: nvidia

很多博客在写docker中使用主机cuda时,都会建议在创建容器时,加入一个参数--runtime nvidia
但运行时却出现如下问题

docker: Error response from daemon: unknown or invalid runtime name: nvidia 
Run 'docker run --help' for more information

这是因为你的 Docker 没有配置 NVIDIA Runtime,所以它不认识 --runtime nvidia
在 Jetson Nano 或普通 Linux 上,默认安装的 Docker 里是没有 nvidia runtime 的,需要额外安装 NVIDIA Container Toolkit

安装 NVIDIA Container Toolkit

在主机下运行(不是容器中):

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt update
sudo apt install -y nvidia-container-toolkit

配置 Docker 运行时

安装好后,执行:

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

确认 NVIDIA runtime 已经注册:

docker info | grep -i runtime

输出里有以下类似的内容,就表示你成功了:

Runtimes: nvidia runc
Default Runtime: runc

创建容器

其中cuda版本,可以在/usr/local/目录下寻找

docker run -it \
  --runtime nvidia \
  --gpus all \
  -e NVIDIA_VISIBLE_DEVICES=all \
  -e NVIDIA_DRIVER_CAPABILITIES=all \
  -v /usr/local/cuda-12.6:/usr/local/cuda-12.6 \
  -v /usr/local/cuda:/usr/local/cuda \
  your_image:tag

容器中验证cuda环境

运行

nvcc --version

会出现:

bash: nvcc: command not found

但在挂载的目录中确实能看到cuda的目录。这是因为没设置 PATH,所以找不到 nvcc。
你可以在容器里执行:

记得修改自己的cuda版本

export PATH=/usr/local/cuda-12.6/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH
export CUDACXX=/usr/local/cuda-12.6/bin/nvcc

然后继续运行nvcc --version,就能找到cuda了

其他问题

有些人可能会在容器中运行

nvidia-smi

来查看是否能够使用GPU。但结果是

NVIDIA-SMI couldn't find libnvidia-ml.so library in your system. Please make sure that the NVIDIA Display Driver is properly installed and present in your system.
Please also try adding directory that contains libnvidia-ml.so to your system PATH.

很明显是失败了。
这是因为 Nano 的 GPU 是 Tegra GPU(集成 GPU),它没有 nvidia-smi 工具,libnvidia-ml.so 也不存在。
nvidia-smi 只能在 x86 PC 上的离散显卡用,在 Jetson 系列不能用。
需要运行

cat /etc/nv_tegra_release

就可以看到 L4T / JetPack / CUDA 版本

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐