lsb_release -a
: Ubuntu 16.04.6 LTS xenialnvidia-smi
: GeForce GTX 965M参考链接(英文官网):https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04
或
参考链接(中文翻译):https://www.runoob.com/docker/ubuntu-docker-install.html
直接从 dockerhub 官网上找到自己需要的版本 pull 下来;
dockerhub 官网链接:https://hub.docker.com/r/nvidia/cuda/tags?page=2&name=cudnn7
我这里使用的是 pull 下来的镜像 包含 ubuntu16.04 和 显卡驱动(cuda9.0+cudnn7)的版本, 具体该 pull 的 cuda 的什么版本是由自己的显卡决定的,英伟达官网可以查到不同显卡最高支持的cuda的版本 。
$ docker pull nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04
$ docker run -it [IMAGE ID 或者 REPOSITORY ] /bin/bash
# 具体使用如下:(挂载方法是 “-v 本地目录:docker文件目录” 镜像名是 nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04)
$ docker run -it -v /home/yzn/Downloads/share:/media nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04 /bin/bash
以命令行模式进入该容器,然后就可以在这个容器里面安装自己需要的软件了
ctrl + D 可以退出容器, 容器停止工作
再次进入容器 ,需要先 start 容器,再进入容器:
$ docker start [容器的ID] # 启动 stop 的容器
$ docker exec -it [容器的ID] /bin/bash # 进入 start 的容器
我这主要安装了
anaconda 官网下载 安装文件:**.sh 文件
$ bash **.sh # .sh 文件的安装方法
提示:因为在容器中不方便下载,这个安装文件。所以我采用在本地ubuntu上下载,然通过挂载 本地文件到容器的方法,实现在容器中访问本地ubuntu下载的文件。挂载时,需要在 docker run 生成容器的命令中挂载。
$ conda install pytorch==1.1.0 torchvision==0.3.0 cudatoolkit=9.0 -c pytorch
安装速度比较慢的话,建议修改为 阿里源,修改前一定要备份
$ pip instll opencv-python # 建议使用
或
$ conda install -c conda-forge opencv # 不建议 经常不成功
参见链接:https://blog.csdn.net/weixin_42419002/article/details/103157489
安装过程中会出现 lsb_release 不存的问题,谷歌一下就能解决。
参见链接:https://blog.csdn.net/weixin_42419002/article/details/103157489
如果在 启动镜像生成容器的过程中没有 设置 --runtime=nvidia
或者 --gpus all
的话,docker 中是无法使用 cuda/显卡 的。
测试在容器中是否能使用显卡的方法:
方法一: torch.cuda.is_available()
root@2c4635c3c3cd:/# python
Python 2.7.16 |Anaconda, Inc.| (default, Sep 24 2019, 21:51:30)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
True # 这里如果显示 False 的话,就表示在docker 中不能使用显卡
方法二:容器中没有自带 nvidia-smi
, 需要谷歌解决问题。
$ nvidia-smi # 查看显卡信息
设置 容器可调用本地显卡的两个命令:
docker run 后添加:
--runtime=nvidia
这个没有试成功:
添加后错误提示:docker: Error response from daemon: Unknown runtime specified nvidia.See ‘docker run --help’.
错误原因:
或
--gpus all
成功了, 这个问题弄了好久,具体是怎么解决的,忘记了…………
参考链接:https://github.com/NVIDIA/nvidia-docker/issues/838
参考链接:https://discuss.pytorch.org/t/docker-torch-cuda-is-available-returns-false/47282/2
参考链接:https://stackoverflow.com/questions/50462153/nvidia-docker-run-vs-docker-run-runtime-nvidia
参考链接:https://github.com/NVIDIA/nvidia-docker/issues/1018
apt-get install net-tools -y
ubuntu主机中的docker 中的ros 与 ubuntu主机的通信IP配置,参考: https://blog.csdn.net/Chenming_Hnu/article/details/60469410
由于我目前只需要 docker 中ros 与本地的 ros (两个ros 在同一个电脑中国)进行通信,所以只需要设置
参考链接中的:
参考链接:https://www.okcode.net/article/41799
push 结果如下:
root@yzn-cn15s:/home/yzn# docker push siat123/ubuntu1604-ros-pytorch_trafficsign
The push refers to repository [docker.io/siat123/ubuntu1604-ros-pytorch_trafficsign]
28dd93accea0: Pushed
93775b877d1e: Pushed
6e1d0db5981d: Pushed
647e685c5838: Pushed
6b34d15ed20b: Pushed
84e7743c151b: Pushed
17a831445aa8: Pushed
827bbdc23ac2: Pushed
b7ee80f86be3: Pushed
aa7f8c8d5f39: Pushed
48817fbd6c92: Pushed
1b039d138968: Pushed
7082d7d696f8: Pushed
latest: digest: sha256:dfc7470d9ddf5aa43d318852ec564e50ed7023bbe380a704c9e842a0cf5b188b size: 3055
参考链接(英文官网):https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04
或
参考链接(中文翻译):https://www.runoob.com/docker/ubuntu-docker-install.html
$ docker login # 输入dockerhub 的账户和密码
$ docker pull docker pull siat123/ubuntu1604-ros-pytorch_trafficsign
# 启动镜像,生成容器 trafficsign_docker,进入容器的命令行界面
docker run --gpus all --name=trafficsign_docker -it siat123/ubuntu1604-ros-pytorch_trafficsign /bin/bash
输入以下命令,测试容器是否正常,如果能使用显卡,则说明正常。
(base) yzn@yzn-cn15s:~$ docker run --gpus all --name=trafficsign_docker -it siat123/ubuntu1604-ros-pytorch_trafficsign /bin/bash
root@38bd9764b735:/# python
Python 2.7.16 |Anaconda, Inc.| (default, Sep 24 2019, 21:51:30)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> import rospkg
>>> import torch
>>> torch.cuda.is_available()
True
>>>
我参考的链接是:https://blog.csdn.net/Chenming_Hnu/article/details/60469410
部分截图如下:
我的相关配置如下,仅供参考,具体方法见上面那个参考链接。
我的 ip 配置(ifconfig
)如下 :
所以,
vim /etc/profile
添加 ip 配置如下:export ROS_HOSTNAME=172.17.0.2
export ROS_MASTER_URI=http://172.17.0.1:11311
vim ~/.bashrc
添加 ip 配置如下:export ROS_HOSTNAME=172.17.0.2
export ROS_MASTER_URI=http://172.17.0.1:11311
vim ~/.bashrc
添加 ip 配置如下:export ROS_HOSTNAME=172.17.0.1
export ROS_MASTER_URI=http://172.17.0.1:11311
在启动的容器的命令行中输入如下命令:
cd /home/catkin_ws_20191218/
source devel/setup.bash
cd /home/catkin_ws_20191218/src/traffic_sign_2030/src
python2 detect_traffic_sign_2030.py
上述命令在我的电脑上运行结果如下:
root@38bd9764b735:/# cd /home/catkin_ws_20191218/
root@38bd9764b735:/home/catkin_ws_20191218# source devel/setup.bash
root@38bd9764b735:/home/catkin_ws_20191218# cd /home/catkin_ws_20191218/src/traffic_sign_2030/src
root@38bd9764b735:/home/catkin_ws_20191218/src/traffic_sign_2030/src# python2 detect_traffic_sign_2030.py
waiting topic : image_raw
Unable to register with master node [http://172.17.0.1:11311]: master may not be running yet. Will keep trying.
启动本地 roscore 发布话题 /image_raw 给 docker 中的 ros, docker 中的 ros 就会接受图片,并发布检测结果 /traffic_sign_type ,数据是字符串类型,用下划线"_"表示未检测到交通标志,字符 20 30 表示检测到的交通标志。
在本地计算机中显示 ros 信息,/traffic_sign_type 话题正常,则说明程序正常。
(py37_cl) yzn@yzn-cn15s:~$ rostopic list
/clock
/image_raw # 图片数据
/image_show_ts_result
/rosout
/rosout_agg
/traffic_sign_type # 交通标志检测结果,字符串
(py37_cl) yzn@yzn-cn15s:~$ rostopic echo /traffic_sign_type
data: "_"
---
data: "_"
---
data: "_"
---
# 启动镜像
docker run --runtime=nvidia --name=trafficsign -it ubuntu1604-ros-pytorch/trafficsign /bin/bash
退出容器之后,再次运行需要使用下面两个命令:
# start 容器
docker start trafficsign_docker
# 进入容器
docker exec -it trafficsign_docker /bin/bash
docker run --gpus all --name=trafficsign -it ubuntu1604-ros-pytorch/trafficsign /bin/bash
docker run -it -p 80:80 -v /home/yzn/Downloads/share:/media nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04 /bin/bash
docker run --runtime=nvidia --name=trafficsign -it ubuntu1604-ros-pytorch/trafficsign /bin/bash
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi --name=trafficsign -it ubuntu1604-ros-pytorch/trafficsign /bin/bash
docker run --name=trafficsign3 -it ubuntu1604-ros-pytorch/trafficsign /bin/bash
cd /home/catkin_ws_20191218/src#
source devel/setup.bash
cd /home/catkin_ws_20191218/src/traffic_sign_2030/src
python2 detect_traffic_sign_2030.py
$$$$
docker exec -it 243c32535da7 /bin/bash
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location='cpu' to map your storages to the CPU.
# 本地ros环境激活:
conda activate ros_py27
source /home/yzn/code/catkin_ws_20191218/devel/setup.bash
# bag play 播放数据 发布话题
cd /media/yzn/软件110G/video
rosbag play -l TS2.bag camera/image_raw:=image_raw
rqt_graph
rqt_image_view
# ############3
## rosbag
cd /home/yzn/code/catkin_ws_20191218
source devel/setup.bash
roscore
cd /media/yzn/软件110G/video
rosbag play -l TS2.bag camera/image_raw:=image_raw
rqt_graph
rqt_image_view
## Start traffic sign detection
cd /home/yzn/code/catkin_ws_20191218/src/traffic_sign_2030/src
python2 detect_traffic_sign_2030.py
python2 sub_ts_type.py
## #######################
## ros notes
source devel/setup.bash
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws
catkin_make
source devel/setup.bash
echo $ROS_PACKAGE_PATH
cd ~/catkin_ws/src
catkin_create_pkg test_pkg std_msgs rospy roscpp
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash
# #### ####################
cd ~/catkin_ws/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
#### create pkg
cd /home/yzn/code/catkin_ws_20191218/src
catkin_create_pkg traffic_light roscpp rospy std_msgs
catkin_create_pkg traffic_sign_2030 roscpp rospy std_msgs
启动镜像生成容器,同时设置 容器可用GPU,容器名称,本地文件挂在到容器的 /media 使用的镜像名称或ID
docker run --gpus all --name=traffic_sign_roslaunch -it -v /media/yzn/工程/share:/media siat123/byd_traffic_sign:roslaunch
其他信息:
使用 VNC Viewer 创建
docker run --runtime=nvidia
--user 0
--name=yzn_pytorch_cl
-d
-e VNC_RESOLUTION=1920x1000
-p 6907:5901
--shm-size 200G
-v /home/BackUp/docker-file/common:/media/common
-v /home/BackUp/docker-file/yzn:/media/yzn
siat123/yzn_pycharm:latest
echo "vncserver port is 172.20.7.168:6907"
echo "password is vncpassword"
服务器上的挂载路径:
sudo mount /dev/sdc1 /home/BackUp
sudo mount /dev/sdd1 /home/BackUp/docker-file