参考:http://blog.csdn.net/chenming_hnu/article/details/70184543
只要涉及到样本的训练的相关内容,就要考虑数据的存储、共享等。
(1) docker引入了数据卷(volume)机制,volume是存在于一个或多个容器中的特定文件或文件夹,这个目录以独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久化提供了如下便利:
(2)创建数据卷共享容器
sudo docker run -it -v vol_tfcv5:/data --name=tfcv5 tensorflow:tensorflowCV /bin/bash
对以上命令的解释:
docker run
表示新建容器时 加上-v
命令为创建数据卷,也可以先用 $ docker create --name vol_simple
创建数据卷,再用run命令。-it
也可以写成 -i -t
, 表示申请一个伪终端tty控制台与容器进行数据交互;vol_tfcv5:/data
创建一个指定名字的volume数据卷为vol_tfcv5
,并挂载到容器的/data
目录下;--name=tfcv5
容器的名称;tensorflow:tensorflowCV
构建容器的源镜像名称;/bin/bash
使用/bin/bash来执行解释脚本实际上:Docker 在创建volume的时候会在宿主机/var/lib/docker/volumes
中创建一个以volume ID为名的目录,并将volume中的内容存储在名为_data
的目录下。
使用docker volume inspect
命令可以获得该volume包括其在宿主机中该文件夹的位置等信息。
$ sudo docker volume inspect vol_tfcv5
[sudo] password for mingchen:
[
{
"Name": "vol_tfcv5",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/vol_tfcv5/_data",
"Labels": null,
"Scope": "local"
}
]
在容器内查看/data目录下的数据:
root@1451fcc1ad4f:/# ls
bin data etc lib media notebooks proc run sbin sys usr
boot dev home lib64 mnt opt root run_jupyter.sh srv tmp
root@1451fcc1ad4f:/# ls data
root@1451fcc1ad4f:/#
发现为空,下面我们就向主机上的共享目录中拷入数据。
(3)向共享目录/var/lib/docker/volumes/vol_tfcv5/_data
中拷入数据
我的图片及代码数据都在/home/mingchen/Desktop/tf_pic_auto/
, “*“表示此目录下的所有文件。
$ sudo cp -r /home/mingchen/Desktop/tf_pic_auto/* /var/lib/docker/volumes/vol_tfcv5/_data
切换到容器窗口,再查看:
root@1451fcc1ad4f:/# ls data
src
root@1451fcc1ad4f:/# cd data
root@1451fcc1ad4f:/data# ls src
bin_con_pic.py cnn_iden_pic.pyc pic_con_bin.py test_gray.bin
bin_con_pic.pyc digit_num pic_con_bin.pyc tfcnn_idenpic_main.py
cnn_iden_pic.py model readme write_num
可以发现容器的/data目录以及与主机的/var/lib/docker/volumes/vol_tfcv5/_data
数据已经同步了,能够在容器内访问。而且,经过实验,当在容器内对数据进行更改的时候,比如对代码修改,宿主机中/var/lib/docker/volumes/vol_tfcv5/_data
的数据也会进行同步修改。
(1)在容器的终端运行主程序
root@b77dc7af73ae:/data/src# python tfcnn_idenpic_main.py
发现有有报错:
root@b77dc7af73ae:/data/src# python tfcnn_idenpic_main.py
libdc1394 error: Failed to initialize libdc1394
/usr/local/lib/python2.7/dist-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
Traceback (most recent call last):
File "tfcnn_idenpic_main.py", line 12, in <module>
import bin_con_pic #将二进制文件转为图片模块
File "/data/src/bin_con_pic.py", line 12, in <module>
from matplotlib import pyplot as plt
File "/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 114, in <module>
_backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup
globals(),locals(),[backend_name],0)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 6, in <module>
from matplotlib.externals.six.moves import tkinter as Tk
File "/usr/local/lib/python2.7/dist-packages/matplotlib/externals/six.py", line 199, in load_module
mod = mod._resolve()
File "/usr/local/lib/python2.7/dist-packages/matplotlib/externals/six.py", line 113, in _resolve
return _import_module(self.mod)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/externals/six.py", line 80, in _import_module
__import__(name)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 42, in <module>
raise ImportError, str(msg) + ', please install the python-tk package'
ImportError: No module named _tkinter, please install the python-tk package
(2)看到最后一条,应该是缺少一个依赖包:(根据主程序中的import packages的情况,报错需要安装哪个就安装哪个)
root@b77dc7af73ae:/data/src# sudo apt-get install python-tk
安装完毕。
(3)再次运行:
root@b77dc7af73ae:/data/src# python tfcnn_idenpic_main.py
libdc1394 error: Failed to initialize libdc1394
The test_gray.bin file is OK!
WARNING:tensorflow:From /data/src/cnn_iden_pic.py:109 in run_training.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use `tf.global_variables_initializer` instead.
CNN identified the number:9
--------------------------------------------------
The process time: 0:00:02.530348
虽然成功运行,但依然有Failed报错信息,google一下,找到解决方案的网站;http://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394
第一条回答即是:sudo ln /dev/null /dev/raw1394
。
root@b77dc7af73ae:/data/src# sudo ln /dev/null /dev/raw1394
root@b77dc7af73ae:/data/src# python tfcnn_idenpic_main.py
The test_gray.bin file is OK!
WARNING:tensorflow:From /data/src/cnn_iden_pic.py:109 in run_training.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use `tf.global_variables_initializer` instead.
CNN identified the number:9
--------------------------------------------------
The process time: 0:00:01.705953
虽然warning,但影响不大。
实验多次:
root@b77dc7af73ae:/data/src# python tfcnn_idenpic_main.py
The test_gray.bin file is OK!
WARNING:tensorflow:From /data/src/cnn_iden_pic.py:109 in run_training.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use `tf.global_variables_initializer` instead.
CNN identified the number:9
--------------------------------------------------
The process time: 0:00:00.882266
root@b77dc7af73ae:/data/src# python tfcnn_idenpic_main.py
The test_gray.bin file is OK!
WARNING:tensorflow:From /data/src/cnn_iden_pic.py:109 in run_training.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use `tf.global_variables_initializer` instead.
CNN identified the number:9
--------------------------------------------------
The process time: 0:00:00.898039
root@b77dc7af73ae:/data/src#
运行时间基本在0.9秒左右。
(4)用宿主机上的Pycharm开发工具处理同样的数据,运行同样的代码,结果如下:
/usr/bin/python2.7 /home/mingchen/PycharmProjects/tf_pic_auto/src/tfcnn_idenpic_main.py
The test_gray.bin file is OK!
WARNING:tensorflow:From /home/mingchen/PycharmProjects/tf_pic_auto/src/cnn_iden_pic.py:109 in run_training.: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use `tf.global_variables_initializer` instead.
CNN identified the number:0
--------------------------------------------------
The process time: 0:00:00.845535
Process finished with exit code 0
截图:
(5)对比发现,其实时间差不多,但是当数据量较多,多个客户端需要处理相似任务的时候,我们可以“一键生成“很多个容器处理,利用容器技术能够给予为未来的任务处理提供更多可行、有效的解决方案。