windows编译tensorflow tensorflow单机多卡程序的框架 tensorflow的操作 tensorflow的变量初始化和scope 人体姿态检测 segmentation标注工具 tensorflow模型恢复与inference的模型简化 利用多线程读取数据加快网络训练 tensorflow使用LSTM pytorch examples 利用tensorboard调参 深度学习中的loss函数汇总 纯C++代码实现的faster rcnn tensorflow使用记录 windows下配置caffe_ssd use ubuntu caffe as libs use windows caffe like opencv windows caffe implement caffe model convert to keras model flappyBird DQN Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neural Networks Fast-style-transfer tensorflow安装 tensorflow DQN Fully Convolutional Models for Semantic Segmentation Transposed Convolution, Fractionally Strided Convolution or Deconvolution 基于tensorflow的分布式部署 用python实现mlp bp算法 用tensorflow和tflearn搭建经典网络结构 Data Augmentation Tensorflow examples Training Faster RCNN with Online Hard Example Mining 使用Tensorflow做Prisma图像风格迁移 RNN(循环神经网络)推导 深度学习中的稀疏编码思想 利用caffe与lmdb读写图像数据 分析voc2007检测数据 用python写caffe网络配置 ssd开发 将KITTI的数据格式转换为VOC Pascal的xml格式 Faster RCNN 源码分析 在Caffe中建立Python layer 在Caffe中建立C++ layer 为什么CNN反向传播计算梯度时需要将权重旋转180度 Caffe使用教程(下) Caffe使用教程(上) CNN反向传播 Softmax回归 Caffe Ubuntu下环境配置

Docker使用

2017年05月09日

如何制作专属的docker image

首先拉取一个base docker

可以从官网拉各种image或者用Dockerfile生成一个。这里我直接pull了一个只装了caffe依赖的lib和cuda的image。

docker pull 10.100.208.171:6000/caffe:ubuntu-latest

安装cudnn6

将本地路径挂载到docker的home下然后安装cudnn6,这个命令已经进入了docker image,mount只是为了能让docker读取外面的数据

docker run -it --rm -v /datab/cv_data/cudnn-8.0-linux-x64-v6.0:/home 10.100.208.171:6000/caffe:ubuntu-latest  /bin/bash

docker image中编译caffe

和在本地一样下载所有需要的lib和Python lib,还有caffe项目以及自定义的layers, functions等,正常编译

由于我想制作一个完全的docker images所以我把我的caffe项目装在/opt中(注意不要装到挂载的文件夹下,否则无法装入docker里),因为我发现mount的东西无法写入到docker images里

apt-get install vim
for req in $(cat requirements.txt); do pip install $req; done

注意这里会报一个hdf5.h的错误,因为lib文件的更新需要修改makefile

然后同样的make all -j8, make pycaffe就可以在docker image里编译caffe了,最后安装pycaffe到系统python path

但是注意了这里有个大坑!!!

对于普通的系统环境在/etc/profile中添加

export PYTHONPATH=/opt/caffe/python:$PYTHONPATH

source /etc/profile就能使pycaffe生效

这是docker,一切变得与众不同。在docker中/etc/profile中的变量不是自动就export的,完整的os在启动过程会有启动程序依次读取系统和用户的配置文件,但在容器里就没有这一步了。

查找资料只有两种解决方式

第一种,把变量写入/root/.bashrc这个文件,就会自动读取你的变量(我就采用了把变量写入这个文件)

第二种,在Dockerfile里添加ENV解决

保存制作好的docker image

另开一个终端

docker commit CONTAINER_ID tag #CONTAINER_ID是docker ps里看见的
docker commit 69023d45f5d2 custom-caffe-cuda8-cudnn6

进入这个docker image

docker run -it --rm custom-caffe-cuda8-cudnn6  /bin/bash

推送docker image到服务器上

docker tag myImage myRegistry.com/myImage
docker push myRegistry.com/myImage

示例如上,先tag,必须加域名或者ip地址才能推送过去(不能自定义一个帅气的名字了:()

docker tag custom-caffe-cuda8-cudnn6 10.100.208.171:6000/zoujy-caffe
docker push 10.100.208.171:6000/zoujy-caffe

删除docker image

docker rmi REPOSITORY TAG

保存images和加载一个image tar

docker save 10.100.208.171:6000/zoujy-caffe -o caffe.tar
docker load -i caffe.tar

这里演示了一个如何用docker来制作一个能随时编译修改的caffe的docker image。既然caffe都能做成了那么对于tensorflow,pytorch, keras等就更简单了


blog comments powered by Disqus