本文将从购买GPU服务器、远程连接服务器、深度学习环境安装、用jupyter操控服务器等方面逐一讲解购买及使用GPU服务器的步骤。
免费在线jupyter可见在线jupyter平台推荐。
1. 服务器配置与购买
云服务器供应商有很多,本文以阿里云为例,在百度云、腾讯云、谷歌云等其他供应商购买服务器的步骤大同小异。
进入阿里云官网。
阿里云官网
登录(支付宝、淘宝账户均可登录)并先预充一百元。
鼠标移动至右上角头像可见余额
在导航栏中选择“产品”-“云计算基础”-“GPU云服务器”
在云服务器界面选择“GN5(P100)购买”
接下来,我们便跳转到了阿里云服务器购买界面。默认情况下,系统为我们推荐“包年包月”的计费方式。每月上千的GPU租赁费用对大部分用户来说过于昂贵,而且我们只是偶尔会使用GPU计算服务,以月为单位租赁服务器有点浪费。
除了包年包月,我们还可以选择“按量付费”或者“抢占式实例”。按量付费是以小时为单位进行计费,计算完毕后需手动关闭服务器以停止计费。“抢占式实例”也是按小时计费,价格随市场波动,出价高的一批用户获得GPU服务器的使用权。
“抢占式实例”价格相对便宜,但当市场价格高于我们的出价时,我们的实例将会被释放,服务器将会被他人使用。不过使用“自动出价”可以让我们避免上述风险。
按量付费实例停机后不收费,抢占式网络虽然便宜,但必须释放实例实例后才会停止收费。
如果只是想体验一下,计费方式可选择“抢占式实例”。地域选择“华北5(呼和浩特)”会有优惠,价格大约在五到七块每小时(价格会随时间有些许波动)。读者若想以后长期间断使用服务器,一定要选“按量付费”,根据配置不同,价格在八到十三块每小时。(实际费用以秒为单位进行计算)
服务器规格选择“ecs.gn5-c8g1.2xlarge”,该规格有8个vCPU,60G内存,一块P100 GPU,440G存储空间(暂时存储),Intel Xeon E5-2682v4 CPU。配置足以满足绝大部分任务的需求了。
接着,设置镜像。
镜像推荐一:如下图进行配置。CentOS/Ubuntu16.04系统都支持“自动安装GPU驱动”(新手推荐使用Ubuntu16.04,遇到的坑会少一点),可免去之后安装GPU驱动的步骤。(若是使用Tensorflow,仍需要手动安装cuDNN)
Tensorflow-GPU的底层支持一直在变。当前(2019年3月20号)Tensorflow-gpu版本要求CUDA版本要9.0(目前不支持9.1!)且Driver要384.x或更高版本。读者若是几年后看到该文章,请先查询tensorflow-gpu的GPU驱动版本要求。安装驱动版本不符无法运行tensorflow-gpu。
安装GPU驱动一定要符合tensorflow-gpu的驱动要求
镜像推荐二:读者也可以选择使用“镜像市场”中的镜像。如下图中的镜像,已经预装了GPU驱动和tensorflow等框架。纯小白建议选择这个方法,此处就免去了文本第三步环境安装的过程。
存储选择默认设置。本地存储440G空间会随着我们的实例释放后消除。一般我们的代码都放在系统盘,40G的系统盘满足大部分AI比赛或项目的存储需求。若有额外需求,读者可适当增加数据盘。这里保持默认不更改。
不更改存储设置
完成上述配置后,点击“下一步:网络和安全组”。该界面,我们不做任何更改。
值得注意的是“公网带宽”中的带宽大小是指流量留流出的带宽大小,计费0.8元/G也是计算流量留出的费用。我们使用服务器下载文件属于流量流入,与该“公网带宽”选择无关,且服务器下载文件免费。
安全组默认也保持不变。确保22端口打开即可,我们之后会通过ssh的方式连接服务器。
点击“下一步:系统配置”。了解密钥的读者可在“登录凭证”选择“密钥对”的方式。不了解密钥的读者可选“自定义密码”(记住该密码,当我们登录服务器时,登录名为root,密码为此处设置的密码)。
完成后点击“确认订单”。确认界面如下:
“保存为启动模板”可选可不选。保存模板后,当我们再次购买类似服务器时,可以使用模板中的服务器配置。(按量计费时,我们想停止计费,只需关停服务器,不用删除服务器。以后想用服务器,再次启动即可,无需再次配置并购买服务器。)
另外,我们也可以设置自动释放的时间(谨慎操作,到达释放时间后,实例会被释放,数据及IP不会被保留)若读者对自己的使用时间没有把握,不建议设置“使用时限”。
点击同意《云服务器 ECS 服务条款》服务协议。
之后我们即可点击右下角的“创建实例”了。创建实例之后即开始计费,直到我们手动停止服务为止。
另外,当不用服务器的时候,一定记得要停止服务!
若使用按量计费,选择“停止”即可(下图绿色框),想用时选择“启动”即可。若使用抢占式实例,则需要选择“释放设置”了(下图红色框),因为抢占式实例停止服务器后仍旧计费。下次使用时需要重新配置服务器,包括各类环境。
2. 服务器连接
在控制台中我们可以看到我们正在运行的云服务器。记住我们服务器的公网IP地址。
这里笔者使用Xshell来连接远程服务器。打开Xshell,在菜单栏里选择“文件”-“新建”
名称随意设置,“主机”为你购买的服务器的公网IP地址,协议SSH,端口22。
完成上述内容后,点击确定即可。创建成功后,在界面左侧双击我们刚刚创建的“阿里云服务器”以连接服务器。
第一次登陆会有一个SSH安全警告,选择“接收并保存”即可。
之后便是用户登录,默认的用户名为root
登录方式则与之前“登录凭证”相对应。密码登录或者密钥登录。
接着,我们便成功以ssh的方式远程连接了阿里云服务器。
3. 环境安装
刚购买的云服务器只有最简单的一些配置。我们需要在此基础上安装一些深度学习需要的环境。
3.1 安装GPU驱动、CUDA以及cuDNN
安装GPU驱动、CUDA、cuDNN全是坑,不同环境下出现的问题千奇百怪,此处难以一一举出。读者若安装时出现问题请直接百度/google,网上必有解决方法(虽然可能也不靠谱)。
Ubuntu出现的坑较少,此处以Ubuntu为例。
3.1.1 安装GPU驱动
在第一步配置服务器时若选择“自动安装GPU驱动”则可跳过这一步。
在英伟达驱动下载页面设置自己的配置,之后点击“SEARCH”
接着进入信息确认界面,点击“DOWNLOAD”
再之后,在如下界面,右键“AGREE&DOWNLOAD”,复制链接地址。
返回服务器命令行,输入wget 地址
本案例是 wget us.download.nvidia. com/tesla/384.183/NVIDIA-Linux-x86_64-384.183.run
下载完后,执行如下代码以安装驱动
sudo chmod a+x NVIDIA-Linux-x86_64-384.183.run
sudo ./NVIDIA-Linux-x86_64-384.183.run -no-x-check -no-nouveau-check -no-opengl-files
安装过程中会有窗口让你选择yes或者no,问你是否continue的时候选择yes(笔者没有遇到这个选择),其他时候选择no。
若驱动安装成功,输入nvidia-smi即可查看GPU当前状态。
3.1.2 安装CUDA以及cuDNN
这里给出tensorflow官网上推荐的CUDA以及cuDNN安装代码
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
sudo apt install ./cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb
sudo apt update
sudo apt install cuda9.0 cuda-cublas-9-0 cuda-cufft-9-0 cuda-curand-9-0 cuda-cusolver-9-0 cuda-cusparse-9-0 libcudnn7=7.2.1.38-1+cuda9.0 libnccl2=2.2.13-1+cuda9.0 cuda-command-line-tools-9-0
3.1.3 手动安装cuDNN(使用pytorch可跳过)
若3.1.2中成功安装CUDA但未成功安装cuDNN,此时则需要我们进行手动安装cuDNN了。这个步骤略微繁琐,需要用户前往
developer.nvidia .com/rdp/cudnn-download
注册账户后才会有权限下载文件,直接以wget的方式下载会被服务器拒绝。
我们只能用本地电脑访问上述网站,注册账户,然后选择我们需要的cuDNN版本,先下载到本地。(选择for CUDA 9.0版的,下载cuDNN Library for Linux)
接下来,我们需要将本地下好的文件传到远程的服务器上。但在这之前,我们需要先要将二手游戏账号买号平台服务器允许传输文件的端口打开。
在阿里云服务器管理界面,找到我们的服务器,选择“管理”
在管理界面选择“本实例安全组”
打开安全组界面后,在横向菜单栏中选择“安全组列表”,之后选择“配置规则”
选择“快速创建规则”
配置如下图,选择telnet(23)端口,授权对象填“0.0.0.0/0”。完成后,我们就可以从本地向服务器传输文件了。
我们在服务器命令行上输入apt-get install -y lrzsz,安装一个便于我们文件传输的工具。
命令行输入rz,会弹出一个窗口,找到我们之前下载的文件,选择“打开”。
之后便会开始传输文件
当文件传出完成后,我们先把文件重新命名为tgz格式。
mv cudnn-9.0-linux-x64-v7.5.0.56.solitairetheme8 cudnn-9.0-linux-x64-v7.5.0.56.tgz
解压该文件tar -xzvf cudnn-9.0-linux-x64-v7.5.0.56.tgz
把解压出的这几个文件分别放到cudn安装的位置。
值得注意的是,有的服务器cudn是安装在/usr/local/cuda下,笔者的服务器是安装在/usr/local/cuda-9.0下。读者应该先查看一下自己/usr/local/中cuda文件夹名是什么,再进行如下安装。
依次将我们解压好的文件放入cudn的安装目录对于位置。(每行指令最后的“/”一定要有!)
sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64/
最后执行如下代码即可成功安装完cudnn
sudo chmod a+r /usr/local/cuda-9.0/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
输入cat /usr/local/cuda-9.0/include/cudnn.h | grep CUDNN_MAJOR -A 2 可检查安装是否成功(路径中cuda-9.0在某些服务器中应该为cuda)
3.2 安装anaconda(可跳过)
Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。
3.2.1 下载并安装anaconda
输入wget mirrors.tuna.tsinghua. edu. cn/anaconda/archive/Anaconda3-4.4.0-Linux-x86_64.sh以下载anaconda文件(linux64位版)
运行 bash 下载文件名.sh 来安装anaconda,这里是bash Anaconda3-4.4.0-Linux-x86_64.sh
安装过程中一直回车。遇到问yes或no的问题,除了问是否安装vscode输入no,其他都输入yes。
若遇见“bunzip2: command not found”报错,执行yum install -y bzip2之后再执行bash 下载文件名.sh -u (要加-u,-u的意思是重新安装,覆盖之前安装的内容)
3.2.2 添加anaconda环境变量
安装成功后,我们还要将anaconda添加到环境变量中。输入vim .bashrc 以用vim编辑器来编辑.bashrc文件。
注意,vim编辑器不是word文档!想要修改文件,我们要先按下“i”键切换到插入模式。按下i后,左下角会有“INSERT”显示,表示我们现在敲打键盘即可插入文字。
我们在文件开头输入:
#Anaconda
export PATH=/home/用户名/anaconda3/bin:$PATH
其中用户名在本案例中就是root,于是就应该输入:
#Anaconda
export PATH=/home/root/anaconda3/bin:$PATH
按下Esc键,退出插入模式。依次按下”:”, “w”, “q”, 左下角应该显示如下图,之后“回车”,即可保存并关闭文件。
输入source .bashrc 重新激活一下。此时输入which python即可发现当前使用的python是anaconda3中的。(/root/anaconda3/bin/python)
若不行,则需重启服务器,再输入source .bashrc 重新激活。
3.3 修改镜像源(可跳过)
3.3.1 修改conda镜像
conda默认的镜像源在国外,下载文件速度可能比较慢。我们需要将镜像源修改为国内的,下载速度会提高很多。
输入如下命令修改conda的镜像源
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
3.3.2 修改pip镜像源:
(阿里云服务器的默认镜像都已使用阿里云的镜像,读者可跳过本步骤)
输入mkdir .pip 创建.pip文件夹(有可能mkdir: cannot create directory ‘.pip’: File exists,表示已经有该文件了。)
输入cd .pip 移动到.pip文件夹
输入vim pip.conf,创建并修改pip.conf文件
将该文件修改为如下内容(按下i进入插入模式,按下Esc退出插入模式,按下:wq并回车则保持并关闭文件):
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
3.4 anaconda环境管理(可跳过)
anaconda可进行环境管理,可创建多个环境,不同环境内可安装不同的包。默认情况下,我们在base环境中。新建环境可用:
conda create -n 环境名 python=python版本
我们新建一个名字叫tensorflow的环境,这个环境的python版本是3.6则应该为:conda create -n tensorflow python=3.6。安装过程中会问我们是否执行Proceed ([y]/n)?,我们回复y。
安装完新环境后,我们使用conda activate 环境名,即可从base环境切换到新环境。
可见该环境是python3.6的,我们之后安装各类python包,import各类python包都是在该环境下进行。退出该环境可以输入conda deactivate,这样,我们就回到了base环境。
3.5 安装深度学习框架
3.5.1 机器学习函数库
常用的机器学习包有numpy,pandas,matplotlib,sklearn等,其中有的包已经随anaconda一起安装好了,有的则没有(具体情况根据安装的anaconda版本而定)。尚未安装的需手动安装。
使用 pip install 包名 即可。如:pip install pandas
3.5.2 Tensorflow
使用NVIDIA显卡运行Tensorflow-gpu需要除了要装驱动以外,还需要安装cuDNN。(见3.1)
由于我们使用的是gpu版本,输入pip install tensorflow-gpu即可安装gpu版tensorflow。
安装完后,检验一下我们的tensorflow是否安装成功。
输入python,进入python执行界面。在该界面下输入import tensorflow as tf,不报错即代表安装成功。
报FutureWarning不要紧,只要import tensorflow成功即可。
安装gpu版tensorflow出错概率极高,各类问题请参见“3.6 安装tensorflow-gpu出错的各种可能”
3.5.3 PyTorch
在PyTorch的官网上选择自己的服务器配置即可找到对应下载代码。
我们输入 pip install torch 即可安装PyTorch
输入python,进入python执行界面。在该界面下输入import torch ,不报错即代表安装成功。
3.6 安装tensorflow-gpu出错的各种可能
我们之前提到过,tensorflow对环境有比较严格的要求,如python版本只可为2.7、3.3-3.6,CUDA为9等等。
3.6.1 python版本检查
在命令行输入python -V(V要大写)查看python版本,若为版本不在2.7、3.3-3.6之间,请参照3.4 使用conda创建一个3.6python版本的环境,在该环境下安装并使用tensorflow。
3.6.2 驱动以及CUDA版本检查
输入nvidia-smi查看GPU状态,若报错,则要重新安装GPU驱动。见3.1.1
查看CUDA版本:cat /usr/local/cuda/version.txt (cuda目录也可能为cuda-9.0等,可输入cat /usr/local/cuda-9.0/version.txt )若没有,则参见3.1.2
查看cuDNN版本 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2(cuda目录也可能为cuda-9.0,可输入cat /usr/local/cuda-9.0/include/cudnn.h | grep CUDNN_MAJOR -A 2)若没有,则参见3.1.3
若CUDA和cuDNN的版本与tensorflow-gpu要求的版本不符,则需重新安装CUDA和cuDNN。
3.6.3 安装指定tensorflow-gpu版本
输入pip uninstall tensorflow-gpu即可卸载之前安装的tensorflow-gpu
输入 pip install tensorflow-gpu==版本号 如pip install tensorflow-gpu==1.12.0 即可安装1.12.0版本的tensorflow。
4. 用jupyter操控服务器
我们可以通过xshell的隧道方式,让我们以本地浏览jupyter的方式控制远程服务器。
4.1 配置jupyter
首先,在远程服务器上安装jupyter:pip install jupyter
接着,输入jupyter notebook –generate-config –allow-root生成配置文件。
我们输入python,进入python执行界面。输入:
from notebook.auth import passwd
passwd()
之后系统会让我们输入并验证新密码,密码选一个好记的即可。输入完成后,系统会返回给我们一个加密的字符串,复制该字符串。
按下ctrl+z返回命令行,输入vi ~/.jupyter/jupyter_notebook_config.py,以编辑该文件。
按下”i”键进入插入模式,插入如下内容
c.NotebookApp.ip='*'
c.NotebookApp.password = u'之前的那串sha1字符串'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 # 任意端口均可(只要不占用22,80等常用端口)
按下‘Esc’退出插入模式,输入:wq回车以保持并关闭文件。
此时,输入jupyter notebook –allow-root 服务器就在运行jupyter了,不过想要本地访问,我们还需要让阿里云打开8888端口
4.2 开通服务器端口
与3.1.3开通端口类似。在修改安全组规则界面(具体详情见3.1.3),我们选择“添加安全组规则”
添加如下规则即可
此时,访问我们服务器ip:8888 即可进入jupyter界面。密码输入我们在from notebook.auth import passwd; passwd() 时输入的密码。
密码输入完成后,即可用jupyter的方式访问到我们的服务器了。
4.3 隧道连接
在Xshell界面左侧的会话管理器,选择属性
点击“隧道”-“添加”
输入如下信息,侦听端口任意,这里为5000;目标主机可以不用设置,目标端口是之前c.NotebookApp.port =8888设置的端口号。
完成后点击确定。断开与服务器的连接并重连。
此时运行jupyter后。我们可以以访问本地5000端口的形式访问远程服务器了。
附录:使用密钥对
在配置阿里云服务器时,在登陆凭证界面选择“新建密钥对”。
我们创建一个密钥,并点击确定。此时我们会下载一个.pem文件
下载的.pem文件为密钥(密钥请勿泄露,公钥随意,其他人知道你的公钥也无法伪造成你登录服务器)。
以XShell为例,我们在菜单栏选择“工具”-“用户密钥管理者”
在打开的“用户密钥”窗口,我们选择导入,导入之前的.pem文件
导入成功后如下图。
密钥相对于直接密码登录来说会安全很多。
回到登陆凭证界面,选择我们之前创建的密钥对即可。