目 录CONTENT

文章目录

ubuntu桌面docker镜像gpu加速方案

GrantLi
2022-11-21 / 0 评论 / 4 点赞 / 1158 阅读 / 7486 字 / 正在检测是否收录...

环境配置

安装docker

sudo curl -sSL https://get.docker.com | sh

安装nvidia驱动

curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
sudo apt-key add -

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list

sudo apt-get update
sudo apt-get install nvidia-container-runtime

拉取镜像

sudo docker pull grantli625/ubuntu20-desktop-gpu:ubuntu-20.04

使用教程

创建容器

# 宿主机需要运行xhost允许所有用户访问X11服务(运行一次即可),宿主机环境变量$DISPLAY必须为0
xhost +

# 支持ssh和 3D GUI
sudo docker run -d --restart=on-failure \
    --name grantli \
    --cap-add=SYS_PTRACE \
    --gpus all  \
    --shm-size=1024m \
    -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
    -p 10022:22  \
    -p 14000:4000  \
    grantli625/ubuntu20-desktop-gpu:ubuntu-20.04

需要开启多个Docker容器,需要修改grantli10022:2214000:4000,其中-p左边是宿主机的端口,右边是docker容器的端口,一般改左边端口即可。

远程软件

NoMachine 下载地址,或者运行下面命令直接下载安装:

wget https://download.nomachine.com/download/8.1/Linux/nomachine_8.1.2_1_amd64.deb
sudo dpkg -i nomachine_8.1.2_1_amd64.deb

连接端口为 172.17.0.2:14000,用户名和密码均为ubuntu

启动GPU加速

打开.bashrc,把文件中的#export __GLX_VENDOR_LIBRARY_NAME=nvidia注释取消,如下:

export __GLX_VENDOR_LIBRARY_NAME=nvidia

然后刷新环境:

source .bashrc

Demo1:建图导航

1. 建图
# 启动gazebo
roslaunch turtlebot3_gazebo turtlebot3_world.launch

# 启动SLAM
roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping

# 键盘控制TurtleBot3
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

# 保存地图
rosrun map_server map_saver -f ~/map

测试Demo1教程链接

2. 导航
# 运行仿真模型
roslaunch turtlebot3_gazebo turtlebot3_world.launch

# 导航
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml

Demo2:机械臂运动规划

# 启动UR5机械臂模型
roslaunch ur_gazebo ur5.launch

# 启动moveit
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true

# 启动rviz
roslaunch ur5_moveit_config moveit_rviz.launch config:=true

测试Demo2教程链接

打包镜像

# 查看镜像
sudo docker images

# 查看已启动的容器
sudo docker ps

# 进入这个容器
sudo docker exec -it test_ubuntu bash

# 更新一下镜像源
set -ex \ && sed -i 's@security.debian.org@mirrors.aliyun.com@' /etc/apt/sources.list
set -ex \ && sed -i 's@deb.debian.org@mirrors.aliyun.com@' /etc/apt/sources.list
sudo apt-get update

#退出容器
exit

# 打包更新镜像(test_ubuntu为查询到的容器名称,根据实际的更改)
sudo docker commit test_ubuntu grantli625/ubuntu20-desktop-gpu:ubuntu-20.04

# 查看镜像
sudo docker images

# 登陆docker(grantli625为docker用户名)
sudo docker login -u grantli625

# 上传镜像
sudo docker push grantli625/ubuntu20-desktop-gpu:ubuntu-20.04

GPU加速应用

3D硬件渲染加速

  1. vglrun路径为/usr/NX/scripts/vgl/vglrun,root下需使用全路径,或者加入PATH环境变量
# 测试VirtualGL
vglrun glxinfo | grep -i "opengl"

显示包含VirtualGL则表示正确 host主机上的DISPLAY必须为:0

  1. 运行3D软件时,需要加上vglrun命令前缀,如:
vglrun gazebo

Note:不使用vglrun也能运行3D程序,将采用软件OpenGL模拟,占用大量CPU.

CUDA使用说明

需要在.bashrc文件中加入以下语句更新环境变量

export CUDA_HOME=/usr/local/cuda
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

Docker用法

容器操作

# 列出所有容器ID
sudo docker ps -aq

# 查看所有运行或者不运行容器
sudo docker ps -a

# 停止所有的container(容器)
sudo docker stop $(sudo docker ps -aq) 

# 删除所有停止的容器
sudo docker container prune

# 删除所有container(容器)
sudo docker rm $(sudo docker ps -aq) 

# 停止、启动、杀死、重启一个容器
sudo docker stop Name或者ID  
sudo docker start Name或者ID  
sudo docker kill Name或者ID  
sudo docker restart name或者ID

# docker进入容器,查看配置文件
sudo docker exec :在运行的容器中执行命令
        -d :分离模式: 在后台运行
        -i :即使没有附加也保持STDIN(标准输入) 打开,以交互模式运行容器,通常与 -t 同时使用;
        -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
sudo docker exec -it  f94d2c317477 /bin/bash

# 修改配置、退出容器
1、如果要正常退出不关闭容器,请按Ctrl+P+Q进行退出容器
2、如果使用exit退出,那么在退出之后会关闭容器,可以使用下面的流程进行恢复
使用sudo docker restart命令重启容器
使用sudo docker attach命令进入容器

镜像操作

# 镜像查询
sudo docker images

# 删除images(镜像)
sudo docker rmi <image id>

# 删除所有images(镜像)
sudo docker rmi $(sudo docker images -q)
# 强制删除全部镜像
sudo docker rmi -f $(sudo docker images -q)

# 所有删除不使用的镜像
sudo docker image prune --force --all
4

评论区