本文主要講述整個命令流程,具體講解請看官網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