赞
踩
神经网络训练需要强大的GPU支持,自己搭建成本太高,并且有时候出差等原因,无法将庞大的机箱搬走。因此,就产生了将深度学习网络训练的任务搬到云端的想法。由于初次使用,遇到不少大坑,花了两天时间才完整的实现。
要实现的功能:
- 安装anaconda管理库
- 远程访问jupyter notebook
- 将本地文件和服务器端文件互传
- 安装tensorflow的GPU版本
- 服务器不用的时候释放,下次直接再用,节省费用
注意:本文主要解决常见的坑。
1、anaconda 安装慢,阿里云的GPU服务器很贵的,时间就是金钱在这里体现的淋漓尽致。
2、jupyter notebook无法远程访问,或者直接报错sock无法连接错误
3、从github上下载文件慢的要命,且有文件大小限制(100M)
4、服务器端查看一切正常,远程就是无法访问问题
针对以上种种问题,我综合了网上各位大神的文章,汇总到一起,实现从零开始的目标。减少环境搭建时间,把时间花在机器学习本身上。
本文服务器端采用的是阿里云ubantu 16.04版本,我的电脑也是。
阿里云服务器的购买过程简化一点:选择地域》选择实例:异构计算,GPU计算》镜像:镜像市场,搜索深度学习ubantu版本(已经安装好了显卡驱动和cuda8.0)》其他的按需配置》设置密码
几点要注意的地方:
1、一般选择按量付费,包月包年太贵。土豪随意啊。我会在后面说怎么很便宜的把自己的数据和配置保存下来。用的时候再复制出来。
2、镜像的选择问题,一定在镜像市场里找到已经安装好驱动和cuda8.0的,不然我相信你会哭的。我觉得阿里云做技术很马虎啊,你不装驱动,让我自己装,有故意收黑钱的嫌疑。
3、安全组配置,我会后面着重说明,现在选择默认就可以了。
在本地电脑打开终端,输入:
ssh root@47.93.*.*#输入自己的公网IP
然后会打印出:
- The authenticity of host '47.93.*.* (47.93.*.*)' can't be established.
- ECDSA key fingerprint is SHA256:r60avP7Lyz01MRTFN9mbekDAcwZWv8tFUmMlo6dr/m0.
- Are you sure you want to continue connecting (yes/no)?
yes
首次登录会提醒你,系统自动创建密匙
Warning: Permanently added '47.93.*.*' (ECDSA) to the list of known hosts.
输入你购买服务器时,输入的密码。如果购买时没有输入密码,此时会让你设置。PS:给没用过Linux系统的提醒一下,输入密码不会显示,完成后回车即可。
- root@47.93.*.*'s password:
这是你就可以看到成功登录的页面
- Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64)
-
- * Documentation: https://help.ubuntu.com
- * Management: https://landscape.canonical.com
- * Support: https://ubuntu.com/advantage
- Welcome to Alibaba Cloud Elastic Compute Service !
刚登录进去,主机名是一串非常长的随机编码,很难记住,我建议更改掉。
我采用的vim编辑器,系统默认安装的。如果第一次用,肯定很难熟悉,建议先百度一下vim的基本用法。PS:有点罗嗦,但是第一次,肯定很茫然。习惯了之后效率确实很高。
删除,起个自己熟悉的名字。
vim /etc/hostname#ubantu的在此目录下,其他系统按需更改
更改完成后,重启才会起作用。暂时不要重启。继续
vim /etc/hosts
把刚才自己修改的名字加入
- 127.0.0.1 localhost
- 127.0.0.1 bamboo_aliyun #新增
-
- # The following lines are desirable for IPv6 capable hosts
- ::1 localhost ip6-localhost ip6-loopback
- ff02::1 ip6-allnodes
- ff02::2 ip6-allrouters
如果不设置此项,每次用sudo会一直提醒。
sudo: unable to resolve host iZ2ze3v1xxtg5z3w2nb8oaZ
查看一下是否已经安装好了驱动和相关的包。
- root@GPU_aliyun:~# ls
- deep_learning nvidia NVIDIA_CUDA-8.0_Samples
-
- exit#推出SSH登录
现在阿里云控制台重启一下服务器。
重新用root登录服务器,与上同,不再贴代码。进入后发现主机的名称已经变成你设置的了。
notes:此地方有大坑,要注意。创建新用户有两个命令。一个是useradd和adduser。我建议用adduser,按照提示一直操作,就会自动完成。如果采用useradd如果不加参数的话,会创建一个三无产品。
1、无Home Directory
2、无密码
3、无系统Shell
1、adduser用户创建过程(两者任选其一)
sudo adduser bamboo
自动创建过程:
- root@GPU_aliyun:~# sudo adduser bamboo
- Adding user `bamboo' ...
- Adding new group `bamboo' (1000) ...
- Adding new user `bamboo' (1000) with group `bamboo' ...
- Creating home directory `/home/bamboo' ...
- Copying files from `/etc/skel' ...
- Enter new UNIX password:
- Retype new UNIX password:
- passwd: password updated successfully
- Changing the user information for bamboo
- Enter the new value, or press ENTER for the default
- Full Name []: bamboo
- Room Number []:
- Work Phone []:
- Home Phone []:
- Other []:
- Is the information correct? [Y/n] y
使用新帐号登录系统:
bamboo@bamboo-WorkBook:~$ ssh bamboo@39.106.143.143
在root帐号下,设置sudo权限
- sudo vim /etc/sudoers
-
- # User privilege specification
- root ALL=(ALL:ALL) ALL
- bamboo ALL=(ALL:ALL) ALL
否则,会使用后面chmod命令会报以下错误:
bamboo is not in the sudoers file. This incident will be reported.
设置文件夹权限(一定要设置,如果不设置后面安装程序会有问题)
bamboo@GPU_aliyun:~$ sudo chmod -R 777 /home/bamboo/
至此已经新帐号添加完成
2、useradd用户创建过程
创建用户,并把用加入root 和bamboo组
sudo useradd -g root bamboo
由于是三无产品,你需设置一下登录密码
sudo passwd bamboo
由于无shell,用新用户进入后,不显示路径,TAB键也不起作用,因此,我们需要添加shell
usermod -s /bin/bash bamboo
设置sudo权限
- vim /etc/sudoers
-
- # User privilege specification
- root ALL=(ALL:ALL) ALL
- bamboo ALL=(ALL:ALL) ALL
除了上述命令行的解决方式外,你也可以手动编辑passwd文件添加shell
vim /etc/passwd
重新用新用户登录系统
ssh bamboo@47.93.*.*#输入自己的公网IP
将用户目录的权限修改为,所有人可以读写执行。
sudo chmod -R 777 /home/bamboo/
如果不修改权限的话,在安装Anaconda时,会报出一下错误:
PermissionError(13, ‘Permission denied’)
PS:权限管理我还没完全搞清楚,我认为肯定有更加简洁的方法,但此方法确实能工作。如果对用户权限管理比较清楚的大神请留言更有效的方法。还有我之前在阿里云上配置其他服务器程序的时候发现root帐号内容,远程是无法访问的(估计是为了安全性考虑)。所以就直接新建帐号,大家可以试一下,给我留言,我更新一下博客
因为阿里云为了安全起见,默认只开放了22、80等少数端口。而jupyter notebook默认采用8888端口,因此在安全组配置中,需要将此端口开放。
如果一切都正常,就是无法远程访问,有90%的可能性就是安全组规则配置的问题。
设置过程:云服务器管理控制台》云服务器ECS》网络和安全》安全组》配置规则》添加安全组规则
由于Anaconda默认的源在国外,下载速度极其缓慢。我采用清华的源。
直接用wget 下载
sudo wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.0.1-Linux-x86_64.sh
执行安装过程:
sudo bash Anaconda3-5.0.1-Linux-x86_64.sh
提示你,是否阅读协议,回车接受
- In order to continue the installation process, please review the license
- agreement.
- Please, press ENTER to continue
是否接受协议,yes
Do you accept the license terms? [yes|no]
安装位置确认,回车
- Anaconda3 will now be installed into this location:
- /home/bamboo/anaconda3
-
- - Press ENTER to confirm the location
- - Press CTRL-C to abort the installation
- - Or specify a different location below
确定安装位置之后,需要等待安装一些默认的包,会让你选择一次bashrc.这时候一定要写yes
- Do you wish the installer to prepend the Anaconda3 install location
- to PATH in your /home/bamboo/.bashrc ? [yes|no]
- [no] >>> yes
提示你如果要让bashrc起作用,要打开一个新的终端。但测试不起作用。
For this change to become active, you have to open a new terminal.
于是,我就直接配置环境变量
sudo vim /etc/environment
把自己的安装目录添加到后面
:/home/bamboo/anaconda3/bin
立即激活环境变量
source /etc/environment
测试是否安装成功
conda --version
如果安装成功,会显示出当前conda的版本
conda 4.3.30
更新conda install的源
- # 添加Anaconda的TUNA镜像
- conda config --add channels 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/'
-
- # 设置搜索时显示通道地址
- conda config --set show_channel_urls yes
更新一下conda
conda update conda
创建jupyter notebook运行环境,可以方便管理各类库
conda create -n jupyter_notebook python=3
激活环境
source activate jupyter_notebook
安装深度学习所需要的所有库
conda install numpy#测试是否能安装,后面也可按需安装
如果要退出环境的话,执行:
source deactivate#暂时不执行
在conda环境安装jupyter notebook,会自动安装相关依赖的包,并且独立。因此,我采用jupyter notebook 安装。每次在conda环境中使用,防止发生一些莫名奇妙的错误。
由于在本地使用和远程使用有着本质上的区别。因此,配置上也有很大的不同。由于之前我一直在本地使用,觉得应该不用配置什么东西,结果白白浪费了大量的时间和钱。本文会先主要说明远程访问的配置过程。
安装jupyter notebook
conda install jupyter notebook
测试
jupyter notebook --ip=127.0.0.1
终端输出正常即可
默认jupyter notebook 是不需要配置文件的。因此,需要用以下命令生成该文件。
主要配置一下内容:
- 设置远程访问密码
- 设置可访问ip,全局访问
- 禁用服务器端启动浏览器
jupyter notebook --generate-config
生成文件后,文件在该目录下
Writing default config to: /home/bamboo/.jupyter/jupyter_notebook_config.py
打开jupyter_notebook_config.py文件
vim /home/bamboo/.jupyter/jupyter_notebook_config.py
设置可以访问服务器的ip
c.NotebookApp.ip = '*'
notes:很多教程把该ip设置为127.0.0.1,这样你只能在本地访问,远程是无法访问的。这是大坑中很大的一个。
打开ipython
ipython
调用passwd()函数生成密匙,把密匙复制下来,后面会有用
- In [1]: from notebook.auth import passwd
- In [2]: passwd()
- Enter password:
- Verify password:
- Out[2]: 'sha1:8361f5f08937:081cdf40730cb5548e2c213ddd36813a5313192f'
加入上面生成的密匙
- c.NotebookApp.ip = '*'
- c.NotebookApp.password = 'sha1:8361f5f08937:081cdf40730cb5548e2c213ddd36813a5313192f'
设置不在服务器端自动打开浏览器
- c.NotebookApp.ip = '*'
- c.NotebookApp.password = 'sha1:8361f5f08937:081cdf40730cb5548e2c213ddd36813a5313192f'
- c.NotebookApp.open_browser = False
到目前位置所有远程的配置的所有工作已经全部完成。赶快启动一下jupyter notebook是不是可以访问。
jupyter notebook
终端开始输出:
远程访问测试
47.93.*.*:8888
登录界面
进入后,跟本地操作一样的
测试正常后,将CTRL+C停止
很多时候,我们是在本地先写好jupyter notebook文件,只需要在云服务器上训练一下。因此,文件的传递是非常重要的功能。scp是采用ssh传递文件的一种方式,比较简单易行。
上传过程:
- scp -r /home/bamboo/文件路径/文件名/ bamboo@47.93.*.*:/home/bamboo/
- #scp -r表示传递文件内所有文件
- #scp 直接传递单个文件
我提前把下载过程贴出来,正常是训练完成后,下载文件。
下载过程:
scp -r bamboo@47.93.*.*:/home/bamboo/文件路径/ /home/bamboo/文件路径/文件名/
非常好理解,都是从前向后传
安装自己需要的tensorflow-gpu版本
conda install tensorflow-gpu=1.1
重新启动jupyter notebook
jupyter notebook
可以正常打开,并且找到自己的文件了。
查看一下gpu是否正常
运行程序,速度确实快了很多啊,大概算了一下,是我的笔记本cpu版的48倍,确实挺靠谱。
在后台,看了一下GPU版本
训练已经完成,tensorflow保存的参数复制下来:
scp -r bamboo@47.93.*.*:/home/bamboo/文件路径/ /home/bamboo/文件路径/文件名/
自定义镜像费用比较低,大概是0.2元/G/月。相对于租赁服务器的费用很低了。
制作过程:选择实例》管理》实例详情》更多》创建自定义镜像
最重要的说明:自定义镜像创建完成后,一定要将实例释放掉。否则,阿里云会一直计费的。会一直计费的。会一直计费的。重要的事说三遍
有了自定义镜像,你再次使用阿里云的服务器就变得简单了很多。不需要之前冗长的配置过程了。在购买的时候,选择同之前相同的配置。镜像选择自定义镜像。
登录进入了,发现之前的配置依然存在。
- root@iZ2ze1289s0kuqzkxpxpazZ:/home/bamboo# ls
- anaconda3 Anaconda3-5.0.1-Linux-x86_64.sh tv-script-generation
用之前设置的普通用户登录:
- bamboo@iZ2ze1289s0kuqzkxpxpazZ:~$ ls
- anaconda3 Anaconda3-5.0.1-Linux-x86_64.sh tv-script-generation
- bamboo@iZ2ze1289s0kuqzkxpxpazZ:~$ conda --version#测试conda
输出正常:
conda 4.3.30
用scp上传下载文件,开始你的新的任务就可以了。
jupyter notebook#启动正常,按上述方式继续访问。
本文采用阿里云GPU计算服务器 + conda +tensorflow-gpu+ jupyter notebook 架构,实现远程训练神经网络的功能。很多研究深度学习和机器学习的博友,并不是很专业的运维人员,因此,在环境配置上花费大量时间是无意义的。因此,就诞生这篇博文,我也是个运维小白,也很多不完善的地方。大家多留言,我尽量完善该博文,作为一个参考资料。
bamboo书于西安
更新记录:
2017年11月23日 完成初稿,自定义镜像创建实例未完成
2017年11月26日 自定义镜像创建实例完成
git是个很有用的工具,计划把git在服务器端的配置也加上
参考:
conda官网教程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。