本文分为如下几个部分
- 什么是GPU服务器
- 租用阿里云GPU服务器ubuntu系统
- 安装python3.6
- 安装pip
- 安装anaconda3
- 配置jupyter
- 服务器与本地windows文件互传
- 安装GPU版TensorFlow
- 开启多个进程(多个窗口)
- 本地sublime编辑远程文件
- vim配置
什么是GPU服务器
相比于CPU,GPU在进行矩阵运算等高度并行化计算任务上有非常大的速度优势,比如你使用TensorFlow构建卷积神经网络进行图片分类,在CPU上训练模型会非常非常慢,这时我们通常会希望使用GPU进行训练。
使用GPU一般有如下几种选择
1.如果你的电脑带有独立英伟达显卡(查看电脑显卡配置自己查),可以安装GPU版本的tensorflow或者其他深度学习框架,通过一系列配置就可以使用GPU训练模型了。
以windows10下安装python的Tensorflow库为例,参考官网安装CUDA,cuDNN和tensorflow-gpu库,可能还要安装visual studio等,安装过程可能伴随痛苦,报错只能一直百度。
如果自己的电脑显卡配置不是很好,会发现跑模型依然不是很快(但是能比用CPU跑快上几倍);而且电脑会发热出声,看着都心疼。所以我们一般都不会用自己的笔记本电脑来跑模型。
2.如果你有钱的话,可以买一个GPU主机,也就是一个可以用GPU计算的台式电脑,这个最低配的也要好几万,详情可以到淘宝京东上看。或者是学校实验室提供这种主机。
3.第三种就是租用服务器了。这里以阿里云为例进行说明。这种租用的服务器相当于你在自己电脑里操控阿里公司里的一台电脑,你可以在一个窗口中操控远程的电脑,就和在自己电脑上使用一样。
租用阿里云GPU服务器
步骤如下
- 打开下面链接,登录阿里云
https://partner.aliyun.com/shop/1586986852753298?spm=a2cbv.aps.0.0.6989561cVAC8gr
- 点击领取优惠券
按照相关提示注册阿里云账号
- 注册账号之后,打开下面链接:
https://www.aliyun.com/product/ecs/gpu?spm=5176.19720258.J_8058803260.33.435c2c4ainsu2k
去购买GPU服务器
- 规格族选择GPU计算型gn4
- 镜像部分选择自己想要的操作系统,这里选择ubuntu16.04 64位。选择自动安装GPU驱动,CUDA9.0.176,Driver390.46,如下图所示
- 创建成功后可以在“管理控制台”中看到自己的实例(也就是你租用的GPU服务器)。选中实例点击启动,就会出现一个“远程连接”,如下图所示
点击远程连接(必须等到状态是“已启动”之后才可以)就会出来一个新的浏览器窗口,在那里会让你输入账号密码,之前没有设置过的话可以在更多-密码-重置密码进行设置。如下图所示
远程连接后你就可以操作这台主机了(登陆账号是root),不过你可能会发现一个问题,那就是你在自己电脑里复制的东西无法粘贴到远程主机上,这一点非常不方便,还有一些其他不方便的地方,因此我一般不会使用远程连接去使用远程的主机。推荐下载putty,使用putty去连接远程的主机。
putty下载后打开,在Host Name位置填入实例的公网IP地址,也就是上上图中我打马赛克的位置。右边端口默认22即可,点击open
此时会打开一个黑色窗口,在这里让你输入的账号密码和“远程连接”那里一样。账号密码正确的话就可以开始使用这台主机了,如下所示(下面输入了python命令进入了python交互环境,就像windows的命令行一样)
安装python3.6
(也可以按照后面的方式直接安装anaconda,跳过安装python3.6和pip两节)
ubuntu16.04自带了两个版本的python,2.7和3.5,下面我们会删掉2.7安装3.6版本,并将3.6版本设置为默认版本(即输入python
自动启动的是3.6的环境)
依次输入如下命令(在这里复制之后,在putty中点击右键即粘贴)
sudo apt-get install software-properties-common sudo add-apt-repository ppa:jonathonf/python-3.6 sudo apt-get update sudo apt-get install python3.6 cd /usr/bin rm python ln -s python3.6m python
运行结束后可以尝试输入python
看进入的环境是否python3.6,测试结束后输入exit()
退出python环境
安装pip
进行上面操作后会发现无法用pip安装包(可以通过这条命令pip --version
判断是否可以使用),下面是安装过程
wget https://pypi.python.org/packages/6f/10/5398a054e63ce97921913052fde13ebf332a3a4104c50c4d7be9c465930e/setuptools-26.1.1.zip#md5=f81d3cc109b57b715d46d971737336db unzip setuptools-26.1.1.zip cd setuptools-26.1.1 python setup.py install wget --no-check-certificate https://files.pythonhosted.org/packages/c4/44/e6b8056b6c8f2bfd1445cc9990f478930d8e3459e9dbf5b8e2d2922d64d3/pip-9.0.3.tar.gz tar -zxvf pip-9.0.3.tar.gz cd pip-9.0.3 python setup.py install
(注:这里安装的是9.0.3版本的pip,之后使用pip命令时会提示更新,因为更新后会有一些问题所以不用管它就好,觉得自己可以解决这个问题的话也可以尝试更新看看)
安装anaconda3
安装anaconda3会自带一个python,因此这一步和上面安装python3.6有些重叠,只选其一即可,运行如下命令完成安装
mkdir anaconda cd anaconda wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.sh bash Anaconda3-5.2.0-Linux-x86_64.sh
(注:这步中间会需要回答一些yes no之类的问题)
下一步添加环境变量
export PATH=~/anaconda3/bin:$PATH
这样就可以调用python
或python3
进入python3.6环境了,而且pip也是可以正常使用的。
注:可以直接安装anaconda,配置好环境变量后,默认调用的就是anaconda的python(不需要单独安装python3删除python2),也可以使用pip,jupyter也不需要单独安装。
配置jupyter
当前的服务器是没有图形界面的,所以不能用鼠标操作,一切都要用代码。但是jupyter不一样,下面配置之后,我们就可以在本地的浏览器中打开远程的jupyter,并且用鼠标进行操作,操作和在本地使用jupyter没有任何区别。
pip install jupyter # 如果已安装anaconda可省略此步 jupyter notebook --generate-config ipython
在ipython交互环境中依次输入下面两条命令
from notebook.auth import passwd passwd()
它会让你设置一个密码(这个密码自己要记住,之后从本地连接时需要使用),然后生成一串字符密文,将这串字符记下来之后会有用(从putty中复制东西只需要选中那段文本,即执行了复制操作)。然后exit()
退出ipython环境
下面修改jupyter配置文件,对linux下编辑文件的vim命令不熟悉的可以参考菜鸟教程
vi ~/.jupyter/jupyter_notebook_config.py
在这个文件最后加上下面几行,保存退出即可
c.NotebookApp.ip='*' c.NotebookApp.password = u'把上面记下的密文粘贴到这里' c.NotebookApp.open_browser = False c.NotebookApp.port =8899
上面端口(port)设置8899为了不和本地jupyter8888冲突
之后在服务器中输入
jupyter notebook --allow-root
然后在本地(自己的电脑)windows10系统下打开命令行输入
ssh -N -f -L localhost:8899:localhost:8899 root@公网ip
上面命令中的“公网ip”换成你租用的服务器的公网ip地址。(这个窗口一直都不要关,直到你不用jupyter为止)
之后在本地浏览器中输入localhost:8899
,会有一个让你输入密码的页面,输入ipython环境下你自己设置的密码,即可登录远程的jupyter了。(这里不需要像其他博客说的那样关掉putty等其他连接)
你可以在服务器linux命令行中安装jupyter扩展和改变主题,就和本地使用一样。还有一个很好的功能是,点击upload可以直接将本地的文件上传到服务器中使用。
如果想退出jupyter,只需要关闭本地浏览器的jupyter窗口,在linux服务器中ctrl+c终止即可。
我们在使用jupyter时,往往还需要用putty窗口执行其他命令,这就需要上面的指令在后台运行,可以用下面这种方式开启jupyter
nohup jupyter notebook --allow-root &
服务器与本地windows文件互传
想将本地的代码、数据等文件上传到服务器,或者将服务器中的训练结果传回本地,是需要用代码执行的
下面的代码都在本地windows10系统的命令行中执行(“公网ip”都要换成租用的服务器的公网ip地址)
1.将本地C:/Users/
路径下的chuan.txt
文件上传到服务器root
目录下
scp C:/Users/chuan.txt root@公网ip:/root/
2.如果想传到自己在服务器根目录下新建的new文件夹中需要这样
scp C:/Users/chuan.txt root@公网ip:~/new/
3.将服务器中root
目录下的chuan.txt
文件下载到本地C:/Users/
路径下
scp root@公网ip:/root/chuan.txt C:/Users/
4.传递文件夹需要用-r
scp -r root@公网ip:/root/chuan C:/Users/
也可以用客户端WinSCP或FileZilla通过SFTP协议进行文件互传。
安装GPU版TensorFlow
下面安装gpu版本的tensorflow和一些GPU驱动程序库
先安装gpu版本的tensorflow(注意这里要指定版本,否则安装太新的版本可能与CUDA等版本不匹配)
pip install tensorflow-gpu==1.9.0
测试是否可以使用tensorflow,先进入python环境
python
导入tensorflow,如果不报错则安装成功,之后安装的那一堆都不用管了
import tensorflow
如果上一步import
发生了错误,则安装下面命令安装依赖程序。
(可以用这条命令查看CUDA版本cat /usr/local/cuda/version.txt
)
无论你现在是否有CUDA等,或者有什么版本的(CUDA9.2的貌似用不了,需要9.0的),下面命令会删除当前CUDA等,安装可以使用的版本,我们不需要管它安装的是什么,只要依次执行下面命令来安装,可以用就好了(如果你安装了不能用,不要来问我,我也不知道为什么)
sudo apt-get purge cuda sudo apt-get purge libcudnn6 sudo apt-get purge libcudnn6-dev wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.0.176-1_amd64.deb wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libcudnn7_7.0.5.15-1+cuda9.0_amd64.deb wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libcudnn7-dev_7.0.5.15-1+cuda9.0_amd64.deb wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libnccl2_2.1.4-1+cuda9.0_amd64.deb wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libnccl-dev_2.1.4-1+cuda9.0_amd64.deb sudo dpkg -i cuda-repo-ubuntu1604_9.0.176-1_amd64.deb sudo dpkg -i libcudnn7_7.0.5.15-1+cuda9.0_amd64.deb sudo dpkg -i libcudnn7-dev_7.0.5.15-1+cuda9.0_amd64.deb sudo dpkg -i libnccl2_2.1.4-1+cuda9.0_amd64.deb sudo dpkg -i libnccl-dev_2.1.4-1+cuda9.0_amd64.deb sudo apt-get update sudo apt-get install cuda=9.0.176-1 sudo apt-get install libcudnn7-dev sudo apt-get install libnccl-dev export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
参考博客
之后终端输入
python
再导入库
import tensorflow
没有报错就可以用了(本地用CPU的tensorflow代码可以直接拿过来在这里跑,不需要做任何更改,速度会有非常大的提升)
开启多个进程
因为进入服务器只有一个窗口,当我们用这个窗口跑代码时,就没有办法同时用命令编辑一些文件。为了解决这个问题,我们可以使用screen开启多个进程,用一个进程跑代码,然后将这个窗口折叠到后台,创建新的进程来编辑代码。
(下面截图来源于我本地的虚拟机,远程服务器是一样的)
1.安装
用下面这条命令安装screen
sudo apt-get install screen
2.创建进程
我们可以刚进服务器就用下面命令创建一个process(其中process1是该进程名称,可以随意命名)
screen -S process1
这时会开启一个干净的窗口
我们在这个窗口下执行一些操作,然后运行代码,在代码运行的过程中,连续按Ctrl+A、Ctrl+D,就会回到主进程,之前创建的进程中代码会继续执行着,只是我们还可以继续做编辑文件等其他工作。
可以在这里创建第二个进程
screen -S process2
(其实如果不需要更多进程,也可以不用创建新进程,直接编辑文件)
第二个进程的操作和第一个进程相同,如果想要将其折叠到后台运行,也是连续按Ctrl+A、Ctrl+D。
3.查看进程
用下面这条命令查看当前有哪些进程
screen -ls
进入某一进程
可以用下面代码进入之前创建的process1进程
screen -r process1
进入之后会发现之前的代码仍然继续运行着
5.终止进程
比如要将process1进程终止掉,用下面这条命令
screen -X -S process1 quit
如果把之前创建的所有进程全部终止,就和最初没创建进程一样。
6. 断开不结束进程
在不使用screen时,当与服务器断开连接(但没有停止实例,只是关掉了putty窗口,断开了ssh连接),正在跑的程序会被终止。而如果程序在screen的进程中运行,则不会受ssh断开的影响,关掉窗口合上电脑都不会影响程序的正常运行。
此外,tmux也可以实现和screen类似的功能。
本地sublime编辑远程文件
刚接触linux可能对vim编辑文件很不习惯,我们更希望用鼠标来操作,如果能用本地的工具来编辑远程文件就更得心应手了,sublime的sftp插件就可以实现这件事。它的原理是将远程文件下载到本地,修改完之后再推送到远程。
vim配置
其实通过修改vim的配置文件,可以使之支持鼠标操作、代码自动缩进等,可以使在远程编辑更加得心应手。
打开配置文件
vim ~/.vimrc
将下面这些配置信息粘贴进去
"去掉vi的一致性" set nocompatible "显示行号" set number " 隐藏滚动条" set guioptions-=r set guioptions-=L set guioptions-=b "隐藏顶部标签栏" set showtabline=0 "设置字体" set guifont=Monaco:h13 syntax on "开启语法高亮" set background=dark "设置背景色" set nowrap "设置不折行" set fileformat=unix "设置以unix的格式保存文件" set cindent "设置C样式的缩进格式" set tabstop=4 "设置table长度" set shiftwidth=4 "同上" set showmatch "显示匹配的括号" set scrolloff=5 "距离顶部和底部5行" set laststatus=2 "命令行为两行" set fenc=utf-8 "文件编码" set backspace=2 set mouse=a "启用鼠标" set selection=exclusive set selectmode=mouse,key set matchtime=5 set ignorecase "忽略大小写" set incsearch set hlsearch "高亮搜索项" set noexpandtab "不允许扩展table" set whichwrap+=<,>,h,l set autoread set cursorline "突出显示当前行" set cursorcolumn "突出显示当前列"
退出之后打开一个python文件,会发现代码高亮了、写代码时回车可以自动缩进、鼠标可以确定光标位置了,滚轮也有效了,总之会更符合我们日常的使用习惯。
但是原来鼠标选中即复制、右键即粘贴的功能看起来用不了了。实际上只要按住shift再选中就还是复制,按住shift右键是粘贴。
如果对颜色不满意,可以下载其他主题颜色设置进去。下面我以monokai为例
mkdir ~/.vim mkdir ~/.vim/colors cd ~/.vim/colors wget https://raw.githubusercontent.com/sickill/vim-monokai/master/colors/monokai.vim vim ~/.vimrc
加入下面一行
colorscheme monokai
保存退出后,再打开python文件就可以看到效果。
vim配置非常强大,更多功能读者自己探索。