搞深度学习的小伙伴一定对Python是又爱又恨,优点比如学习曲线平直,容易上手,各类软件包丰富,生态好,可以让使用者关注在自己要解决的问题上等等,python虽然优点很多,但是缺点也很突出,最让人痛恨的缺点恐怕是它的各类版本带来的生态生碎片化和软件包不兼容问题。前向兼容/后向兼容和软件包的依赖崩溃不知道在多少项目中酿成了人间惨剧。Python狠起来,连自己都不兼容,造成用户开发好的方案无法在新环境下运行,这还仅仅是局限在Python自身范围内,如果算上各类大大小小的软件包兼容/依赖问题,给项目带来的负面影响更是罄竹难书。很多时候,用Python开发方案最大的问题不是解决业务问题本身,而是如何选择一个何时的Python版本,并基于这个版本建立起一个能够运行稳定,所有依赖都完美解决的开发环境。
以上的现实问题是不是就没有办法解决呢? 答案是否定的,这篇文章将会展示如何使用docker建立深度学习开发环境,并进行算法验证。
关于Docker的原理网上资料很多,不细讲,简单说来,Docker是一种用户态虚拟机(区别于VM,virtualbox等虚拟机),开发者将构建好的Pthon环境打包成镜像放到docker hub上供用户下载。用户下载过来后就可以直接使用,无需处理复杂的软件包依赖。下面我们就用这种方式,在docker镜像上搭建一个yolcat语意分割模型的搭建。
Docker和VM,virtualbox等传统虚拟机的差异,VMware, VirtualBox则运行于Hypervisor之上,需要虚拟操作系统,而docker是运行与HOST OS上的用户态应用程序,基于内核的命名空间技术,不虚拟操作系统,所有运行于同一个主机上的容器用的是主机的内核,与你容器用的是什么版本的镜像无关。
在docker环境下lscpu查看CPU信息,和在HOST机上看到的信息完全相同,显示差异是由于docker的lscpu版本不同所致。
下载DOCKER
ubuntu上常规下载安装操作即可安装docker,下载后,查看docker版本:
获取docker镜像
深度学习docker镜像从下面地址下载,它包含了常用框架和软件包依赖。
Docker Hubhttps://hub.docker.com/r/ufoym/deepo
下载命令,我们下载的是CPU版本:
sudo docker pull ufoym/deepo:cpu