训练网络之初体验(真)

这里的真是因为,虽然之前也有跑过很多次代码,也按照自己的想法修改过代码,但是之前都是基于现成的机器和环境,像这次这样自己搭环境,从零开始,还是第一次,之前也没有写过这方面的笔记,正好代码正在跑,一时半会儿还弄不完,也没有别的事情,就姑且仔细的写写笔记记录一下吧。

本来一直都是要用Teamviewer连接学校的电脑跑代码,但是笔电早早的被封了Ip,无论怎么办都解决不了这个问题,所以今天鼓起勇气找实验室的学长们帮忙开了服务器的账号,话说实验室是真的有钱啊,数了数,有二十几台主机,学长快速几条命令打完后,我就可以直接在电脑上ssh连接跑代码了,找学长要了92G的数据集(真的太可怕了),最后决定用scp的方法直接从硬盘传到服务器下好了,正好到晚上十一点了,就暂时放在这儿了,想着明天应该就能传好了吧。

还是太年轻了。

第二天一早就来看,结果发现只传了一点点,这里就学到了一个新命令:

//查看当前系统磁盘使用空间
df -h
//查看当前目录文件占用空间大小
du -sh *

结果发现是因为空间太小了,没办法装,所以打算还是到自己实验室电脑上跑吧,想着应该可以用ssh连,就不用teamviewer了,但是用apt-get下载openssh的时候出错了:

Package 'openssh-server' has no installation candidate

应该是ubuntu的更新源没有用,所以更改为清华源后,执行update和upgrade(等了超久),最后下载了openSSH,但是还是连不上。。

但是这个时候和学长交流,发现不是实验室的电脑没有空间了,而是文件放的地方放错了(感觉要好好研究一下Linux的文件地址方面的知识了),学长在电脑上创建了一个软连接:

ln -s /HDD/cui/ ./HDD

就自动的在最开始的地方创建了HDD文件,里面的cui文件自动连接到HDD里面了,在这下面就有1T的空间可以使用。。

然后就可以将数据集传过去了,对了这个数据集要用VPN,但是我自己的VPN和学长的VPN(都是自己搭的)在实验室的WIFI下要么连不上,要么断断续续的,数据集始终下不来,最后买了一个星期专业的VPN,才终于下下来了。

Ok,传上去了,由于不想影响修改原来的环境,就下载了Conda,配置了环境,修改了路径,跑起来了,但是怎么看了代码,感觉代码好像跑得很慢啊,这时候才反应过来,忘记装GPU版的TensorFlow了,但是装了相同版本的TensorFlow后,还是报错了,好像是什么没有利用到TensorFlow的资源,反正也不是说没有安装这个库,之后上网查了之后,发现TensorFlow是要根据Cuda和CuDnn版本,下载对应版本的,我检查后发现Cuda是9.0,CuDnn是v7,所以下载了TensorFlow-GPU==1.9.0,但是还是报错了,本来打算继续查,但是这个时候学长过来看了一眼就说我是TensorFlow版本没下对(其实感觉虽然尽量自己的难题自己解决,但是有时候问学长真的能少走很多弯路,节省很多时间),但是我觉得我是根据对应版本下的啊,学长于是用了这个命令:

nvcc -V

结果返回的是7.0,所以学长说,我应该是没有在全局文件./bashrc里面加路径,所以最后我根据网上的内容加了这个,就跑起来了,速度飞快,但是我的那台服务器里面有三个GPU,我用了学长的那个,所以赶紧就停下来了,关键我按的还是ctrl+z,所以赶紧又在后台杀掉进程了,查看进程命令是:

ps -ef
#杀死进程
kill -pid

之后知道了是要显示的在最前面加上CUDA_VISIBLE_DEVICES=ID,选择哪个GPU来跑当然也可以同时用几个,但是这个时候,我发现用nvcc -V还是会报错,所以学长过来一顿操作,首先用which nvcc查看nvcc在哪儿,果然不再正确的地方,之后再正确的地方,使用./nvcc -V,就是9.0了,所以把错误地方的nvcc删掉,再把正确地方的nvcc,cp过去就OK了,暂时解决问题了。

话说GPU真的好快啊,出去跑个步回来就执行很多了,但是看着看着,突然就暂停了,也不知道为什么,结果发现,ssh连接断开了,也不知道是网断了,还是有时限,但是关键的是,这边停了,进程也停了啊,代码又没有从中间继续训练的能力,所以我又重新训练,突然想起来之前搭建Aria的时候,好像有后台执行这一说,所以有以下代码:nohup command >out.file 2>&1 &,执行后,命令的输出都到out.file里面,并返回一个进程数,太方便了,这样就不用保持电脑始终开着了,好像就算你最开始没这么写,也可以先用ctrl+z直接暂停(挂起)程序,再后台运行,之后可以试试,同时,另一个终端界面用watch -n 1 nvidia-smi,每一秒就输出一下GPU情况,太高级了,さいこう!