在Docker容器中搭建MXNet/Gluon开发环境

在这篇文章中没有直接使用MXNet官方提供的docker image,而是从一个干净的nvidia/cuda镜像开始,一步一步部署mxnet需要的相关软件环境,这样做是为了更加细致的了解mxnet的运行环境,方便后续我们更加灵活的去修改相关的配置。
1. 通过docker创建干净的系统环境
docker run -itd --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=2,3 --name=mxnet-cu90 -p 9999:8888 -p 1234:22 -v /docker_share/:/root/share nvidia/cuda:9.0-cudnn7-devel bash
docker exec -it mxnet-cu90 bash
这里镜像使用了nvida最新的cuda9.0的镜像,使用--runtime=nvidia是为了使用nvidia-docker在容器中使用GPU资源, 环境变量NVIDIA_VISIBLE_DEVICES用来控制在容器中可见的GPU的id,这里选择2和3,是因为我的机器上一共有4块GPU卡,容器中只使用后两块。-v选项是为了方便主机与容器之间进行数据交换而挂载的一块空间,使用-p选择进行主机与容器之间的端口映射,这里分别映身了容器中的22号端口是为了使用ssh进行远程访问,以及8888端口是jupyter-notebook默认使用的端口号。
2. 替换阿里云的源
容器中默认的软件包的更新源都是国外的,在国外使用起来速度较慢,这里更新为阿里云的即可。也可以直接在/etc/apt/sources.list文件中将http://archive.ubuntu.com/ubuntu/直接替换为http://cn.archive.ubuntu.com/ubuntu/。
apt-get update
apt-get install -y vim
mv /etc/apt/sources.list /etc/apt/sources.list.bark #备份
vim /etc/apt/sources.list #修改
apt-get update #更新
阿里云的源:
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
3. 安装必要的软件工具
sudo apt-get update && sudo apt-get install -y build-essential git libgfortran3
apt-get install -y vim git openssh-server # 安装 vim git ssh远程登录
apt-get install -y bash-completion man # 安装命令行的自动提示的功能,以及帮助手册的查看工具
adduser username #创建新用户
adduser username sudo #把用户加入到sudo权限
service ssh start # 启动ssh服务
exit #退出容器
docker exec mxnet-cu90 /usr/sbin/sshd # 在host上开启容器的sshd服务
这样我们后续就可以通过ssh -p 1234 username@172.17.2.50访问容器了。
4. 安装Miniconda
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh #下载
sh Miniconda3-latest-Linux-x86_64.sh #安装
conda config --prepend channels http://mirrors.ustc.edu.cn/anaconda/pkgs/free/ # 配置国内科大的源
进一步阅读:
5. 替换pip的源
mkdir ~/.pip
vim ~/.pip/pip.conf
粘贴如下内容,添加阿里云的源
[global]
trusted-host=mirrors.aliyun.com
index-url=https://mirrors.aliyun.com/pypi/simple/
6. MXNet/Gluon开发环境的配置
使用conda提供的虚拟环境机制在容器里创建一个虚拟环境配置文件environment.yml,文件内容如下:
name: mxnet
dependencies:
- python=3
- jupyter
- matplotlib
- pandas
- pip:
- requests
- mxnet-cu90>=1.0.1b20180125
然后通过下面的命令,创建虚拟环境mxnet并激活使用。
conda env create -f environment.yml # 安装运行mxnet所需要的Python包
source activate mxnet # 激活虚拟环境,Windows下不需要 source
使用notedown
source activate mxnet # 激活mxnet环境
pip install https://github.com/mli/notedown/tarball/master # 安装插件
jupyter notebook --generate-config # 生成jupyter notebook的配置文件
echo "c.NotebookApp.contents_manager_class = 'notedown.NotedownContentsManager' " >> ~/.jupyter/jupyter_notebook_config.py # 在配置文件最后增加一行
安装notebook每个cell的计时程序
source activate mxnet # 激活gluon环境
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
jupyter nbextension enable execute_time/ExecuteTime
7. 开发环境验证
import mxnet as mx
import mxnet.ndarray as nd
a = nd.ones((2,3), ctx=mx.gpu())
a.asnumpy()
如果整个环境安装正确,则运行上面的代码,不会报错,且有如下的输出:
array([[ 1., 1., 1.],
[ 1., 1., 1.]], dtype=float32)
8. 通过源码安装
在步骤6中,我们演示了如何使用虚拟环境工具conda以及python的包管理工具pip来安装mxnet最新的GPU版本,我们可以得到一个mxnet的python开发环境。我们也可以从源码开始,编译安装。
安装MXNet的依赖库
apt-get install -y libopenblas-dev liblapack-dev libopencv-dev
下载mxnet源码并编译
$ git clone --recursive https://github.com/apache/incubator-mxnet
$ cd incubator-mxnet
$ make -j $(nproc) USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1
编译python接口
sudo apt-get install -y python-dev python-setuptools python-pip libgfortran3 # 安装python相关的环境
cd python
pip install --upgrade pip
pip install -e . #通过目录下的requirement.txt来管理pip安装的包
sudo apt-get install graphviz #安装graphviz用来计算图的显示
pip install graphviz
在Docker容器中搭建MXNet/Gluon开发环境的更多相关文章
- docker容器中搭建kafka集群环境
Kafka集群管理.状态保存是通过zookeeper实现,所以先要搭建zookeeper集群 zookeeper集群搭建 一.软件环境: zookeeper集群需要超过半数的的node存活才能对外服务 ...
- windows和linux中搭建python集成开发环境IDE——如何设置多个python环境
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- 【转】windows和linux中搭建python集成开发环境IDE
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- 如何在Eclipse中搭建MyBatis基本开发环境?(使用Eclipse创建Maven项目)
实现要求: 在Eclipse中搭建MyBatis基本开发环境. 实现步骤: 1.使用Eclipse创建Maven项目.File >> New >> Maven Project ...
- 在 Ubuntu16.04 中搭建 Spark 单机开发环境 (JDK + Scala + Spark)
1.准备 本文主要讲述如何在Ubuntu 16.04 中搭建 Spark 2.11 单机开发环境,主要分为 3 部分:JDK 安装,Scala 安装和 Spark 安装. JDK 1.8:jdk-8u ...
- ubuntu中搭建基本的开发环境
1.搭建基本开发环境: sudo apt-get install build-essential 2.安装语法.词法分析器 sudo apt-get install bison flex 3.安装C函 ...
- Docker 容器中搭建 nexus npm私库
1,版本 dockers :1.13.1 :nexus 3 2,安装 docker pull liumiaocn/nexus 3,启动 项目 详细 Nexus UI 8081 private re ...
- 在Windows下的virtualenv中搭建Flask+MySQLDb开发环境
virtualenv和Flask的安装前面已经介绍过了,这里主要讲如何在venv中安装MySQL 安装MySQLdb 下载MySQL-python-1.2.3.win32-py2.7.exe并安装. ...
- 在MyEclipse中搭建Spring MVC开发环境
环境版本 IDE:MyEclipse 8.5 Spring:spring 3.2.8 JDK:1.6 1.打开MyEclipse-->File-->New-->Web Project ...
随机推荐
- mongodb cxx driver学习
mongodb 增删改查 insert 向集合中增加一个文档 remove 删除文档 update 更新(修改)某些文档 文档替换 文档修改器,只修改文档某个部分 find 返回集合中所有文档 fin ...
- java搭建SSM的Web开发框架-整合这3者用到的配置文件
1./WEB-INF/web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmln ...
- MUI 添加自定义图标(注意点)
参考: https://blog.csdn.net/qq_39759115/article/details/79436606 注意: 1. 将这个原来的逗号改成分号 2. 这些图标的名字都可以改名字
- Swoole addProcess的使用
addProcess函数 是添加一个用户自定义的工作进程.这个有什么用呢?服务在启动后,可以用于监控.上报或者其他特殊的任务. 注意这个添加的进程是被manager进程管理的.如果这个添加的用户进程经 ...
- Python 的 14 张思维导图汇总
本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库,后续会发布相应专题的文章). 首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列表,元组,字典 ...
- Mad Libs游戏,华氏与摄氏转换
华氏温度 与 摄氏温度的相互转换 公式:摄氏 ℃=5/9(°F-32) 华氏°F= ℃×9/5+32 # -*- coding: UTF-8 -*- num=input('输入摄氏温度:') num ...
- [树上倍增+二分答案][NOIP2012]运输计划
题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 公元 2044 年,人类进入了宇宙纪元 L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条航道建立在两个星球之间,这 n-1n− ...
- C#获取文件夹下面的所有文件名
String path = @"X:\xxx\xxx"; //第一种方法 var files = Directory.GetFiles(path, "*.txt&qu ...
- xtrabackup命令用法实战(转)
xtrabackup命令用法实战 转载出自 https://blog.csdn.net/wfs1994/article/details/80399408 完全备份 1.创建备份 [root@linux ...
- 最简单的struts应用
博客园 1.搭建一个简单的Struts2应用 具体为一下几个步骤: 1.引入Struts 2工程所需运行库文件. 2.创建并配置web.xml文件 3.创建一个Action类 4.创建并配置strut ...