【环境配置】使用 docker 制作一个ubuntu16.04 + ROS + pytorch-gpu 的镜像
文章目录
- 使用 docker 制作一个ubuntu16.04 + ROS + pytorch-gpu 镜像的过程
- 1. 我的笔记本环境:
- 2. 环境配置过程
- 2.1. 在 ubuntu 16.04 中安装 docker
- 2.2. 在docker 中安装 ubuntu 16.04 含 cuda9.0 和cudnn7(这里说的安装就是指 从dockerhub 上 pull 镜像,生成容器的过程)
- 2.3. 启动镜像
- 2.4. 在容器中安装自己需要的软件
- 2.4.1 安装 anaconda
- 2.4.2 安装 pytorch
- 2.4.3 安装 opencv
- 2.4.4 安装 ros
- 下面记录安装过程中的部分异常,及解决方案:
- 2.4.5 解决不能 import rospkg 的问题
- 2.4.6 docker 中不能使用显卡的原因:启动镜像时需要进行显卡设置。
- 2.4.7 ifconfig (查看IP的工具) 找不到
- 2.4.7 异常:**docker: Error response from daemon: Unknown runtime specified nvidia.**
- 2.5. 通信时,IP的配置方法
- 2.6. 将容器生成镜像,push 镜像到 dockerhub 账户
- 3. 自己制作好的镜像的使用方法(需要在另一台机子上测试):
- 3.1 新机子上安装 docker
- 3.2 从 docker hub 上 pull 之前上传的镜像
- 3.2 启动镜像, 测试容器是否正常
- 3.3 根据 各个ros之间的关系来配置 IP,启动交通标志检测程序。
- 3.3.1 我只实现过本地 ros 和 docker 中 ros 之间的通信,没有条件测试其他情况,所以 你的 ip 配置应该和我不相同。
- 3.3.2 启动 docker 中的交通标志检测程序
- 3.3.3 启动本地 roscore 并发布 /image_raw 话题
- 一些命令备份在这里(临时存储):
- 常用命令
- 2002年05月24日11:54:07
- 2020年6月13日 13:07:06
- 有用请点赞,谢谢!
- 1. 点赞,积分+1
- 2. 评论,积分+1
使用 docker 制作一个ubuntu16.04 + ROS + pytorch-gpu 镜像的过程
1. 我的笔记本环境:
lsb_release -a
: Ubuntu 16.04.6 LTS xenialnvidia-smi
: GeForce GTX 965M
2. 环境配置过程
2.1. 在 ubuntu 16.04 中安装 docker
参考链接(英文官网):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
2.2. 在docker 中安装 ubuntu 16.04 含 cuda9.0 和cudnn7(这里说的安装就是指 从dockerhub 上 pull 镜像,生成容器的过程)
直接从 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
2.3. 启动镜像
$ 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 的容器
2.4. 在容器中安装自己需要的软件
我这主要安装了
- anaconda
- pytorch
- opencv
- ros
2.4.1 安装 anaconda
anaconda 官网下载 安装文件:**.sh 文件
$ bash **.sh # .sh 文件的安装方法
提示:因为在容器中不方便下载,这个安装文件。所以我采用在本地ubuntu上下载,然通过挂载 本地文件到容器的方法,实现在容器中访问本地ubuntu下载的文件。挂载时,需要在 docker run 生成容器的命令中挂载。
2.4.2 安装 pytorch
$ conda install pytorch==1.1.0 torchvision==0.3.0 cudatoolkit=9.0 -c pytorch
安装速度比较慢的话,建议修改为 阿里源,修改前一定要备份
2.4.3 安装 opencv
$ pip instll opencv-python # 建议使用
或
$ conda install -c conda-forge opencv # 不建议 经常不成功
2.4.4 安装 ros
参见链接:https://blog.csdn.net/weixin_42419002/article/details/103157489
安装过程中会出现 lsb_release 不存的问题,谷歌一下就能解决。
下面记录安装过程中的部分异常,及解决方案:
2.4.5 解决不能 import rospkg 的问题
参见链接:https://blog.csdn.net/weixin_42419002/article/details/103157489
2.4.6 docker 中不能使用显卡的原因:启动镜像时需要进行显卡设置。
如果在 启动镜像生成容器的过程中没有 设置 --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
2.4.7 ifconfig (查看IP的工具) 找不到
apt-get install net-tools -y
2.4.7 异常:docker: Error response from daemon: Unknown runtime specified nvidia.
2.5. 通信时,IP的配置方法
ubuntu主机中的docker 中的ros 与 ubuntu主机的通信IP配置,参考: https://blog.csdn.net/Chenming_Hnu/article/details/60469410
由于我目前只需要 docker 中ros 与本地的 ros (两个ros 在同一个电脑中国)进行通信,所以只需要设置
参考链接中的:
2.6. 将容器生成镜像,push 镜像到 dockerhub 账户
参考链接: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
3. 自己制作好的镜像的使用方法(需要在另一台机子上测试):
3.1 新机子上安装 docker
参考链接(英文官网):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
3.2 从 docker hub 上 pull 之前上传的镜像
$ docker login # 输入dockerhub 的账户和密码
$ docker pull docker pull siat123/ubuntu1604-ros-pytorch_trafficsign
3.2 启动镜像, 测试容器是否正常
# 启动镜像,生成容器 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/bashroot@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
>>>
3.3 根据 各个ros之间的关系来配置 IP,启动交通标志检测程序。
3.3.1 我只实现过本地 ros 和 docker 中 ros 之间的通信,没有条件测试其他情况,所以 你的 ip 配置应该和我不相同。
我参考的链接是:https://blog.csdn.net/Chenming_Hnu/article/details/60469410
部分截图如下:
我的相关配置如下,仅供参考,具体方法见上面那个参考链接。
我的 ip 配置(ifconfig
)如下 :
- 笔记本 ip: 172.17.0.1
- 笔记本 docker 中 ubuntu 的 ip:172.17.0.2
所以,
- 将笔记本docker 中的
vim /etc/profile
添加 ip 配置如下:
export ROS_HOSTNAME=172.17.0.2
export ROS_MASTER_URI=http://172.17.0.1:11311
- 将笔记本 docker 中 ubuntu 的
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
3.3.2 启动 docker 中的交通标志检测程序
在启动的容器的命令行中输入如下命令:
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.
3.3.3 启动本地 roscore 并发布 /image_raw 话题
启动本地 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/bashdocker 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/bashcd /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_rawrqt_graph
rqt_image_view# ############3## rosbag cd /home/yzn/code/catkin_ws_20191218
source devel/setup.bashroscorecd /media/yzn/软件110G/video
rosbag play -l TS2.bag camera/image_raw:=image_rawrqt_graph
rqt_image_view## Start traffic sign detectioncd /home/yzn/code/catkin_ws_20191218/src/traffic_sign_2030/src
python2 detect_traffic_sign_2030.py
python2 sub_ts_type.py## ######################### ros notessource devel/setup.bashmkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspacecd ~/catkin_ws
catkin_makesource devel/setup.bashecho $ROS_PACKAGE_PATH cd ~/catkin_ws/src
catkin_create_pkg test_pkg std_msgs rospy roscppcd ~/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
常用命令
2002年05月24日11:54:07
启动镜像生成容器,同时设置 容器可用GPU,容器名称,本地文件挂在到容器的 /media 使用的镜像名称或ID
docker run --gpus all --name=traffic_sign_roslaunch -it -v /media/yzn/工程/share:/media siat123/byd_traffic_sign:roslaunch
2020年6月13日 13:07:06
其他信息:
使用 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
有用请点赞,谢谢!
1. 点赞,积分+1
2. 评论,积分+1
【环境配置】使用 docker 制作一个ubuntu16.04 + ROS + pytorch-gpu 的镜像相关推荐
- 安装教程rtx2080ti_点云深度学习环境配置指南(一)Ubuntu16.04+RTX2080ti
[今日导读]想做点云深度学习?先把环境配置好吧.本期为初学者带来环境配置指南,有需求的同学赶快上手吧.配置为: Ubuntu16.04+RTX2080ti+NVIDIA驱动+cuda10.1+cudn ...
- 深度学习(TensorFlow)环境搭建:(一)Ubuntu16.04+1080Ti显卡驱动
一.配置 系统:Ubuntu16.04.4 LTS GPU:GTX1080Ti 二.总体流程步骤 安装Ubuntu16.04 安装1080Ti显卡驱动 三.安装Ubuntu16.04 3.1.下载16 ...
- 在Ubuntu16.04 + ROS kinetic环境下安装TurtleBot3
简介 ROS社区中丰富的功能包和机器人案例为我们的学习和研究提供了绝好的平台.TurtleBot系列是ROS社区中最流行的高性价比机器人平台,前后一共发布了三代. TurtleBot是ROS中最为重要 ...
- Docker学习之路04:创建定制Nginx镜像
Docker学习之路04:创建定制Nginx镜像 Docker学习路线传送门: Docker学习之路01:Docker的安装 Docker学习之路02:阿里云镜像加速器 Docker学习之路03:Do ...
- Ubuntu16.04 + ROS kinetic + 激光slam-cartographer ROS + 数据仿真 + Turtlebot3仿真
一.Ubuntu16.04 +ROS kinetic的安装及问题解决 https://blog.csdn.net/GGY1102/article/details/107877937 二.Cartogr ...
- 离线状态下配置深度学习服务器-在ubuntu16.04 上安装python,pip以及包
最近需要把一台不能联网的电脑配置成服务器,而且只能插光盘,需要安装ubuntu16.04系统,然后安装python3.7和python包,包括需要安装jupyter 和paddle,pytorch和t ...
- 深度学习(TensorFlow)环境搭建:(二)Ubuntu16.04+1080Ti显卡驱动
前几天把刚拿到了2台GPU机器组装好了,也写了篇硬件配置清单的文章--<深度学习(TensorFlow)环境搭建:(一)硬件选购和主机组装>.这两台也在安装Ubuntu 16.04和108 ...
- 使用 Docker 制作一个盒装部落格
先玩起来 Play with Docker 官方提供的 Playground,进去点击 Start,然后 +ADD NEW INSTANCE 即可开玩. 上来直接 run docker run -it ...
- Ubuntu16.04+ROS Kinetic环境下svo编译运行
准备工作: 安装Sophus(这个库是维护的比较好的一个李群和李代数的库) 注: 其实你在运行其他版本的slam系统的时候大概率已经安装过,不过这里面执行一下,无伤大雅,也不会搞乱你的系统. #cat ...
最新文章
- iOS架构-静态库.a打包之资源文件打包成bundle(4)
- Latex: 设置 threeparttable footnote 行宽度
- DataFactory连接MySQL数据库
- 怎么向后删除?(删除光标后的字符)(按delete键)
- 文本分类入门(三)统计学习方法
- fcn网络结构代码_FCN实现2-模型结构及实现
- aws beanstalk mysql_AWS Elastic Beanstalk
- 当用DJANGO的migrate不成功时。。。。
- w ndows7端口在哪里,win7电脑遇到端口被占用的情况该如何查看并将其关闭
- 单片机断电后静态存储区里面还有数据吗_单片机启动流程和存储架构详解
- 机器学习理论引导 电子版_机器学习理论篇1:机器学习的数学基础(2)
- C语言 · 芯片测试
- 二.激光SLAM框架学习之A-LOAM框架---介绍及其演示
- C++ Primer Plus学习(一)—— 基础知识
- 用vSphere Client去建立虚拟机报MKS的错
- html 给一个无限宽,html – CSS div与其内容一样宽
- cmake practice学习记录
- 清华conda源下不了torch_使用清华镜像源安装Pytorch
- 关于ES6中let 和 const 命令的用法以及注意事项:
- java实行excel cell内换行
热门文章
- 【计算机系统结构】第一章 计算机系统结构基本概念
- SD卡挂载流程浅析链接
- 2020年国内互联网公司的薪酬排名!
- 8090的你该知道的......很长,但看完后,你会成长
- cips2016+学习笔记︱NLP中的消岐方法总结(词典、有监督、半监督)
- win7注册表无法修改计算机名称,win7注册表拒绝访问和修改的原因及解决方法
- dumpbin命令不能使用解决方法
- Kolla Ansible 部署 -T版openstack
- #今日论文推荐# 多边形战士模型,微软提出19亿参数的超大通用模型BEIT-3,刷榜多个CV和多模态任务
- 初中计算机会考不及格,初中会考不及格影响报考高中吗