简单几步,轻松完成 GPU 云服务器开发环境搭建

原文:https://mp.weixin.qq.com/s/IIZQqIjGQEUSN0oGDewViA

在深度学习和图形处理等领域,GPU相较于CPU有着数十倍到上百倍的算力,能够为企业提供更高的计算效率及更低廉的IT成本,但同时也有不少研究与开发人员对GPU云服务器有着不少困惑。

以深度学习为例,如何选购腾讯云GPU云服务器并优雅地安装驱动等底层开发工具库,以及如何实现远程开发和调试Python代码呢?

我们将从实践出发,提出基于腾讯云GPU实例的最佳实践,基于腾讯云GPU服务器打造远程Python/PyTorch开发环境。其实,开发者们完全可以在“本地开发一致的体验”和“服务器端更高质量资源”这二者之间,做到最佳的结合,享受计算加速以及专注开发过程的双重乐趣。那么,我们开始吧~

1、GPU云服务器准备

我们选择腾讯云目前的主流机型GPU计算机型GN7,其中搭载一颗Tesla T4 GPU。本教程采用的具体规格为GN7.5XLARGE80。这款机型有着不错的综合性能,20核心+80G内存,比较适合常规的深度神经网络训练等各种应用场景。而且,它还是全球市面上同级别GPU机型中(T4)性价比最高的产品。

注:按量计费的机型做实验更灵活哦~

本教程中的实例机型:GN7(推荐)、GN10X等GPU机型均可以。

推荐选择的系统镜像:Ubuntu 18.04 (注意无需勾选“后台自动安装GPU驱动”)

其他信息:北京五区,1M公网带宽,系统盘大小100G。根据实际情况选择即可。

创建实例完成后,控制台面板可以查看实例信息:

开机登录后,我们可以简单通过lspci命令验证GPU,以及通过lsmod验证已有驱动nouveau模块,当然,我们后面将换掉它。

2、驱动&CUDA工具包安装及验证

官网网络Deb包安装

前往NVIDIA官网下载最新的CUDA Toolkit 10.2(当前最新的稳定版本):

https://developer.nvidia.com/cuda-downloads

根据我们的环境选择安装下载方式,这里我们选择网络安装deb包的方式,如图:

然后按照下面的提示依次执行命令即可:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pinsudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pubsudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"sudo apt-get updatesudo apt-get -y install cuda

可以看到其实就是在系统中安装了NVIDIA的官方apt仓库源,并执行了apt install cuda,很方便。只有最后一步的安装过程稍微耗时一些,需要5分钟左右。这步有可能因网络原因中断,无需担心,一般重试1~2次即可。

注意:此处需要重启服务器。

那么究竟安装了什么,以及如何验证安装成功呢?

验证GPU驱动安装 —— 设备信息查看

NVIDIA GPU驱动是支持CUDA编程的内核模块。通过上述方法安装的驱动是以动态内核模块(DKMS)的形式安装的,这种内核模块不在内核source tree中,但是可以在每次内核更新升级时自动地进行重新编译,生成新的initramfs,并后续随着系统启动动态加载。总之就是,驱动只需安装一次,非常方便。

重启后登录,我们来验证驱动模块已动态加载。

可见nouveau等社区驱动已经不会被加载,而是加载了NVIDIA的官方驱动。驱动对应的四个内核模块在这个目录下:

/lib/modules/4.15.0-88-generic/updates/dkms/

nvidia-smi命令查看GPU设备状态,如驱动版本(440.64.00)、CUDA版本(10.2)、型号(Tesla T4)、显存(15109MiB)以及温度功耗等各种信息,如图:

 

验证CUDA Toolkit安装 —— 示例代码编译

CUDA Toolkit,即开发工具包,其中包括构建命令、头文件、动态库、文档、代码示例等等,安装在/usr/local/cuda目录。

注意:使用CUDA Toolkit,必须要设置系统的PATH,以找到nvcc等命令。

全局PATH可以很多地方设置,以/etc/profile.d修改为例 :

echo 'export PATH=/usr/local/cuda/bin:$PATH' | sudo tee /etc/profile.d/cuda.shsource /etc/profile

官方代码示例编译运行

cp -r /usr/local/cuda/samples/ cuda_samplescd cuda_samplesmake -j16 -k

官方示例170个左右,注意不是都能编译(所以加了-k 选项),编译完大致也就小几分钟而已。

然后我们可以运行示例啦,简单的如deviceQuery、bandwidthTest、simpleCUBLAS、simpleCUFFT等等。

以上为运行bandwidthTest的结果,可以看到,主显存之间带宽一般可高达12~14GB/秒。

3、CUDNN安装及验证

类似地,从官网下载安装,目前最新版本是 7.6.5(对应的CUDA Toolkit 10.2版本)。下载地址:

https://developer.nvidia.com/rdp/cudnn-download

这里不同于下载CUDA Toolkit,多了个登录步骤以及协议的勾选项。

Ubuntu 18.04下,需要三个下载包,分别是运行时库、开发库以及代码示例。

本地下载后,上传(scp/rsync)到GPU服务器上执行dpkg安装即可。

sudo dpkg -i libcudnn7*.deb

验证CUDNN安装 —— 示例编译运行

cudnn代码示例在/usr/src/cudnn_samples_v7下,包含conv_sample 、mnistCUDNN 、multiHeadAttention、RNN四个。

cp -r /usr/src/cudnn_samples_v7 .cd cudnn_samples_v7/RNNmake

如RNN示例执行:

如此高的Gflops,有没有一点点心动的感觉呢~

4、PyCharm远程开发

接下来,我们开始远程开发环境搭建

本地环境:Ubuntu 18.04 笔记本,PyCharm(2019.3.4, Linux版本)

注意,本地不需要以下工具:PyTorch/JupyterLab甚至Python3解释器。

创建指定远端解释器的项目

我们从0开始,创建一个新项目

选择创建解释器,即点击那个“三个点”的按钮

选择SSH解释器,设置登录服务器IP和用户名

输入服务器密码

接下来,PyCharm会验证服务器登录,(第一次设置还会有添加footprint的提示),然后就可以添加解释器了

注意:明确用Python3!

回到项目界面,可以看到远端解释器已经自动选择上了,这里我们输入远端项目的路径,就是想把项目放在云服务器的那个目录,这里我们指定在以下目录中:

/home/ubuntu/code/remote_demo_1

注:PyCharm会通过SFTP协议同步本地和远端的目录内容。

 

代码执行验证

下面我们创建一个main.py文件,看看会发生什么?

编辑完成后,PyCharm会自动同步本地文件(main.py)到服务器端目录。我们可以通过右侧的RemoteHost查看服务器端的文件,右下角也会显示当前项目的解释器是远端的Python解释器。

执行这个main.py文件,(绿色Run按钮或Ctrl+Shift+F10),可以看到执行结果,结果正确打印了服务器的信息。

简单开发示例到此结束。两个小tips:

Tips 1:如何用PyCharm里集成的终端连接远端服务器?

默认Terminal里仍然是本地(Local)的,可以通过菜单栏 -> Tools -> Start SSH session…启动直接指定远端服务器Terminal;也可以在设置里通过Tools -> SSH Terminal设置默认的终端。达到类似的效果

Tips 2:代码同步通过PyCharm比较容易,如何传数据等大一些的文件呢?

推荐使用rsync命令,增量上传非常方便。

rsync -avtP ~/data ubuntu@your-server-ip:~/# 可将用户主目录下的data目录上传至云服务器下的ubuntu用户的主目录下

5、PyCharm远程调试

我们再创建第二个远端执行的项目,体验下远程调试的过程。

由于我们之前已经创建过远端解释器了,这次在创建项目时只需指定选择已有的解释器就可以。同样地,设置远端项目目录路径。

这次我们简单编辑一个示例代码hanoi.py,不过不同于直接执行,我们试玩下用PyCharm单步调试。左键点击函数左侧即设置断点,然后点击Debug图标(或Shifit+F9)启动调试,F7单步执行。效果如图所示:

左侧显示的函数的调用栈帧信息,右侧函数命名变量的当前值显示。另外,上图中还设置了观察变量(step),可以方便查看其实时变化。

到这里相信你已可以看出,PyCharm远程项目调试和本地调试几乎没有任何区别。

6、PyTorch安装示例

PyTorch简介及服务器端安装

首先需要在GPU服务器实例(注意不是本地)上安装PyTorch,目前官方最新的是1.4版本。这里选择官方的pip安装方式:

sudo apt install python3-pipsudo pip3 install numpy torch torchvision

验证安装可用以下命令,将打印PyTorch版本:1.4.0。

python3 -c "import torch; print(torch.__version__)"

通过本地PyCharm创建PyTorch示例

到了第三个示例,相信你已经很熟悉套路了,还是选择已有的远端解释器、定义远端项目目录等常规操作。

接下来简单地验证一下PyTorch模块的使用:创建一个随机数张量,以及验证CUDA的启用。

可以看到,基于PyCharm的Remote Interpreter,远程开发调试基于PyTorch的网络模型也如同本地一样的畅快。

7、Jupyter Notebook安装示例

Jupyter简介及服务器端安装

首先,服务器端安装Jupyter

sudo pip3 install jupyterlab

启动Jupyter服务

# 设置jupyter web的密码jupyter-notebook password# 创建jupyter工作目录mkdir ~/jupyter_workspace# 启动jupyter (两次ctrl+c停止服务)jupyter-notebook --no-browser --ip=0.0.0.0 --port=8887 ~/jupyter_workspace

启动jupyter时,记得一定加上参数--no-browser来禁用自动打开浏览器,以及参数--ip=0.0.0.0使得服务可以对外。

注意,为了让公网可以访问,需要服务器实例设置相应的安全组规则,本例中即入站规则的加入TCP:8887。

本地访问云服务器的Jupyter服务

打开本地浏览器访问http://服务器的公网IP:端口访问,会跳转到登录页,如图:

输入之前设的密码,就是熟悉的Jupyter Notebooke管理页面了,创建ipynb文件尽情玩耍吧~

8、Jupyter Notebook结合PyCharm使用

有小伙伴询问:“还要开浏览器好麻烦,能不能在PyCharm里直接玩Jupyter Notebook?” 完全可以!但服务器端的jupyterlab安装还是必须的,参考上一节。

在PyCharm的设置(settings)里添加jupyter服务地址:

虽然这里貌似无需输入登录密码。但当我们创建完notebook,第一次Shift+Enter执行时,就会提示输密码了。

然后就是熟悉的味道了:

在PyCharm里创建Jupyter Notebook更方便,因为这样ipynb文件可以在PyCharm项目下统一管理,还是很推荐的。

9、结语

你已经可以仅凭本地的PyCharm,完成基于腾讯云GPU服务器的远程Python开发调试了,是不是感觉很酷?云服务器貌似在“天边远端”看不见摸不着,然而确是当下及未来最高效可靠、最方便灵活、最经济实惠的计算资源管理和使用方式,让我们一起拥抱这个令人兴奋的变革,一路感受云端的精彩吧。