文章目录
- 使用 docker 制作一个ubuntu16.04 + ROS + pytorch-gpu 镜像的过程
使用 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