本文档将介绍如何基于Ubuntu16.0环境下配置Mask r-cnn所需环境。
这里之所以不采用windows系统,原因之一是windows的配环境方法之前已经发文档详细说明,另一个原因是自己的电脑配置无法直接运行该程序,尤其是model_train()函数(GPU显存不够),所以如果GPU的显存不到4G的电脑还是用别的GPU去跑比较合适。
这里笔者租用了deepshare.net的gpu远程服务器使用。以下介绍基于Linux的环境配置基本方法:
我在介绍的过程中,由于自己的电脑主机端是远程控制租用的gpu服务器端的,所以后面就姑且称两者为主机端和服务器端。主机端就是自己的电脑(Windows系统),服务器就是租的电脑(Linux系统)。
考虑到git clone下载速度一般非常慢,而且还很可能失败,而且部分代码、配置文档、以及初始化数据文件(.h5)在git上并不齐全,所以我们采用云同步的方式把代码直接传输到linux上,这是因为我们用服务器运行后会保存模型数据等重要的数据,只要我们保持云同步开启,那么数据就会自动传输回我们的电脑。这样也不用担心数据的丢失。
我的工程项目包等资源会分享在百度网盘中,下面给出链接。
链接:https://pan.baidu.com/s/1xEHVfGVvjC30W9NnUL4o-Q
提取码:6qjm
复制这段内容后打开百度网盘手机App,操作更方便哦
这里需用到两个软件,一个是nextcloud云盘,用于代码的云同步;还有Xftp6软件,这是为了更方便地浏览和传输服务器的文件。
两者都可以去百度一下下载最新版,我这里也给出我网盘上的安装包,可以直接下载,但不是最新版哦,不过也能用了。
这里我就以我自己在https://gpu.deepshare.net/上面租用的gpu为例,介绍一下注册使用的方法。
首先创建一个钱包。会给你比如钱包地址、Keystore文件、私钥之类的信息,我们在主机上找一个地方存好就行。
然后绑定邮箱。接下来充值,会把金额等值地转换为这个网站上的专用货币dbc,后面就用这个dbc去买机器的小时数就可以了。
选择一个你想用的gpu,先租用cpu安装环境,开始跑程序时改用gpu。
选择付费方式->GPU镜像选自定义->自己按需求指定使用时长(如果不想用了剩余的时间会转化为dbc退还给你的)->提交订单-> 等待验证机器 -> 付费 -> 邮箱收到密码和注意事项,开始租用。
下面是一个邮箱收到的信息截图,为了后面叙述的方便,我大概介绍一下信息的含义。
ssh登录信息:在命令行输入一行开头为“ssh”的命令,登录远程服务器。
一般ssh命令为:ssh -p 端口号 root@服务器ip地址,例如
ssh -p 123 root @192.168.3.3
ssh初始密码:一开始登录ssh的密码,输入的时候屏幕是不会有*显示的。直接输进去就可以了。
jupyter登录 url:这个远程服务器端是自动登录jupyter的。由于同一个时间可能有好几个人在用服务器,所以登录直接输这个网址就可以。
jupyter密码:登录密码。可以改。
邮箱的信息后面还会给出nextcloud的ip地址、用户名和密码。在后面会用到。
配置环境主要分三大部分:
1、同步传输数据:将本地的Mask r-cnn环境通过nextcloud云盘与远程服务器同步。
2、配置jupyter:这里因为默认的jupyter上面是什么都没有的,我们要改变工作路径到云盘,这样就可以直接服务器上打开我们的程序了
3、新建conda工作环境,并配置:为了运行程序,我们必须按照要求安装tensorflow等包。
安装nextcloud云盘,安装完毕打开,先登录:
找到自己邮箱里面的私人网盘信息:
点击登录以后要先输入服务器地址,就是上面这个图片的私人网盘url地址。
然后会跳出一个授权页面,点击登录->输入网盘的用户名和密码->授权。
出现下面的界面说明授权成功。
回到客户端。在下面的页面点击"跳过文件夹设置"。
在下面的页面点击"添加同步文件夹"。
然后选择自己的工程包所在位置,选好了点击next。
选择远程目标文件夹。我是选择新建一个文件夹,像下面这样:
建立好了点击next->添加同步链接。就自动开始同步了。挂到后台运行即可。根据网络的不同同步速度也不同。
接下来开始做下面的步骤。
配置Jupyter我们首先需要Xftp6软件。安装该软件并打开。
点击新建文件传输按钮,如下图所示:
会弹出一个会话小窗口。点击新建会话。
在属性栏进行填充。名称随便取。主机:ssh登录上面的ip地址。协议:SFTP。端口号:ssh登录上面的端口号。
用户名:root。密码:ssh登录密码。填写完毕,点击"连接"。
接下来点击接受主机密钥。如果填写正确就能看到服务器端的文件目录了。
点击工具->选项->勾选"显示隐藏的文件"->确定。
进入服务器端的.jupyter文件夹,找到jupyter_notebook_config.py文件。右键传输到主机。
接下来用主机的记事本(或者其他IDE也可以)打开这个配置文件。
修改以下几行(可以利用查找功能快速定位):
将监听的IP修改为’0.0.0.0’。去掉前面的#号注释。
将笔记本的目录修改为’/var/www/nextcloud/data/dbc2017/files/’。这是云盘的默认目录。
接下来文件->保存。关闭,并在Xftp软件中传输回原来服务器端的位置,覆盖原文件。
然后这里为了方便起见。我们直接去租用的网站,重启机器。因为重启后jupyter是默认打开的。这样就能直接运用刚刚的配置了。重启时可能需要邮件验证码,输入即可。
重启后,我们一定要测试一下是否完成配置。用邮箱中给的jupyter地址和密码登录,如果左边显示有云盘中的文件(可能有乱码,没关系),说明jupyter已经设置成功。
接下来就到了最重要的部分,配置系统的工作环境。这里我们使用命令行进行操作。
第一步,用ssh进入远程服务器。
命令行输入:
ssh -p 端口号 root@服务器ip地址
...
yes
...
输入root密码(这里输入是不会有显示的,输入完回车就可以了)
进入以后,因为anaconda是装好的,所以直接创建环境。
先创建环境:这里环境名我们使用py36,python使用3.6版本。
conda create -n py36 python==3.6
等待一会以后会询问是否执行。选择y。
然后就会自动开始下载了。注意这里可能会因为网络原因下载速度很慢。甚至失败。
如果失败了就重新写一遍刚才的命令,这样会把之前没有装好的内容重新下载。
使用conda安装都是这样的步骤,后文就不再赘述了。
接下来我们进入这个环境:
conda activate py36
进入以后左边会显示(py36)说明已经进入环境。
接下来我们安装ipykernel:
conda install ipykernel
一样的步骤。等待完成。接下来,我们把py36放进jupyter的kernel环境中。
python -m ipykernel install --user --name 环境名称 --display-name "你希望看见的环境名"
上面是这句的语法,你可以这样使用:
python -m ipykernel install --user --name py36 --display-name "py36"
这里请注意:
有的机器可以畅通无阻的进行,而有的机器会无法执行这条语句,报错:
如果报这个错误的话,请调整prompt-toolkit的版本:
pip install prompt-toolkit==2.0.10
然后重新执行加入ipykernel的命令。应该就能成功了。
此时我们关掉原来的jupyter并重新访问。能看到py36的存在。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a0Dra9Wr-1584605487277)(0-24.png)]
现在我们继续安装依赖包。
cd /
cd /var/www/nextcloud/data/dbc2017/files/Mask-Rcnn/
首先退回根目录。再进入云盘里面我们之前同步的文件夹(我创建的是Mask-Rcnn,如果你创建的不是这个文件名请自行修改代码)
pip install -r requirements.txt
安装依赖包中的内容。等待安装完毕。
之前说过,keras不能使用原来的版本,所以我们手动安装2.0.8版本:
pip install keras==2.0.8
而tensorflow由于还需要使用CUDA和cudnn的插件,而且我们没有图形化界面,安装非常麻烦,所以我们这里采用更为简便的conda指令。直接交给conda去完成:
conda install tensorflow-gpu==1.3.0
这里好几个包由于比较大,网络不好很容易安装失败。如果失败了重新输入该命令,多尝试几次。我也建议上午安装,那个时候网络比较通畅。
最后测试一下tensorflow的安装是否完成:
键入python,输入import tensorflow。如果没有报没有这个包的错误(warning忽略),那说明安装成功。
这样我们的环境就完全配置好啦!
这时我们可以把我们租用的cpu更换成gpu开始跑程序了。登录jupyter对kernel环境进行切换。只要点击这里就可以切换环境了。