本文主要讲述整个命令流程,具体讲解请看官网nvidia-容器工具包和一篇总结得很详细的博文docker使用GPU总结
docker的版本必须安装19.0版本以上的,这里也只讲19.0版本以上的使用方法
首先设置一下网络信息
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list \
&& \
sudo apt-get update
然后开始安装
sudo apt-get install -y nvidia-container-toolkit
然后配置一下文件,这样容器才能使用runtime
sudo nvidia-ctk runtime configure --runtime=docker
重启一下容器
sudo systemctl restart docker
运行该命令验证是否安装成功
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
docker run -itd --gpus all --name 容器名 镜像名
示例
docker run -itd --gpus all --name cuda-test ubuntu
然后启动容器
docker start cuda-test
进入容器
docker exec -it cuda-test /bin/bash
在容器里面运行一下再验证一下,能正常显示上面那个图案就是能成功调用了,注意那个cuda版本要能显示,要是现实 N/A的话是不行的
nvidia-smi
cuda版本显示N/A的话用以下格式创建容器
docker run -itd --gpus all --name 容器名 -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all 镜像名
由于我要运行slam,并且需要pangolin进行显示,所以这涉及到主机交互
所以我的命令如下
建议安装和我一样的镜像
docker pull osrf/ros:noetic-desktop-full
这样才能和主机进行UI界面交互
docker run -itd \
--gpus all \
--name 自命名容器名 \
--env="DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
-v /media/rice/文件/2_my_work_zys/zys_work/cuda-container/:/root/files \
-v /usr/local/cuda-11.3:/usr/local/cuda-11.3 \
osrf/ros:noetic-desktop-full \
rqt
那个 -v 就是挂共享目录的,冒号:左边是本机目录,右边是容器里面的目录,会根据路径新创建一个文件夹的,两个 -v 自行选择,记得换成自己电脑的路径
因为我里面C++要用到CUDA,所以也要链接主机CUDA的目录
链接完cuda后在容器里面还要设置路径,不然系统会找不到cuda
进入bashrc
vim ~/.bashrc
然后把下面这段复制进去,记得把cuda改成自己的版本名字,我的是cuda-11.3
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CPUTI/lib64
export CUDA_HOME=/usr/local/cuda/bin
export PATH=$PATH:$LD_LIBRARY_PATH:$CUDA_HOME
上面命令运行后100%会报错的,然后接下来看我的另一篇文章来解决就可以了,看后半部分docker容器中安装ROS1/ROS2(不用配任何环境,10分钟搞定)
我的镜像名是 osrf/ros:noetic-desktop-full 不然会不成功,因为我要用ros,并且只有ros里面有rqt,所以还需要安装一下这个osrf/ros:noetic-desktop-full镜像
这样安装即可
docker pull osrf/ros:noetic-desktop-full