2024年9月20日

前段时间自己在研究机器学习对硬件安全电路的建模攻击。随着训练集的不断增加,实验室提供的那台Think Station愈发难担大任,训练 10M 的数据模型要好几天的时间。而购买专用的训练卡或服务器对于自己这种偶尔才用几次的人又有点浪费,所以决定尝试一下大厂提供的GPU加速型云服务器。如果感觉OK,就和老板商量一下,以后在云服务器上训练。

本来以为刚注册都会有免费试用,想着薅一下羊毛,后面发现很多云服务器供应商并不提供免费的GPU加速型云服务器试用。自己之所以选择华为云服务器,因为在注册账号的第二天就有专人联系我,而且帮我申请了一张450美金的代金券,而且后面有什么问题,都是直接微信联系他去解决,非常方便,这一点还是要给华为云点赞。下面步入正题:

自己购买的是GPU加速型-计算加速P系列p2v型弹性云服务器。注意购买GPU弹性云服务器时需要选择上海二节点,节点可能没有p2v资源。如果自己的账户中没显示上海二节点,可通过提交工单的方式开通:

控制台-工单-新建工单-配额类-配额申请-新建工单;选择任意区域,并在问题描述中填写“申请开通上海二节点资源”。也可以直接联系客服快速申请开通。

初次尝试,选择了最低配置,即只有一张NVIDIA V100 加速卡,具体配置如下图。系统镜像刚开始选择的CentOS, 后来TensorFlow一直安装不成功,最后又换成了Ubuntu 16.04。

华为提供的系统镜像中只安装了CUDA 9.2和Python 2.7,Cudnn和TensorFlow需要自己安装。由于CUDA和Python版本比较落后,且不同版本的TensorFlow对Python、CUDA的版本匹配均不相同(具体见下图),导致刚开始踩了各种坑:

通过pip方式安装TensorFlow时,最后会提示Python版本落后(≥3.7),具体原因未知,更新Python版本后,又发现pip方式无法获取与CUDA 9.2相匹配的TensorFlow安装包。经过多个小时的折腾,自己最终决定,升级CUDA版本至10.1,并重新安装显卡驱动(低版本驱动无法支持高版本CUDA,具体对应关系如下图)。为避免大家少走弯路,自己整理安装过程如下,仅供参考。

注意:不要直接Download下载,而是在Linux云服务器中用wget 命令获取,从下载到安装十分钟即可搞定(注意,CUDA Toolkit 中自带驱动,故无需单独安装显卡驱动):

万事俱备,只欠东风。下面我们就可以用pip命令安全TensorFlow了,本文安装的 TensorFlow 2.3.0,版本号很重要,必须与CUDA和cudnn版本对应,否则TensorFlow无法工作。

安装之前,先将pip下载源修改为国内镜像,如 豆瓣,清华,阿里云等,实测豆瓣比较稳定,推荐。

修改完成之后,即可使用如下命令安装 TensorFlow, 如果安装失败,可尝试更换镜像源。

如图所示,如果最终输出结果为True, 则证明安装成功。否则需要检查CUDA和cudnn的版本是否正确。

因为本文安装的TensorFlow 2.3.0版本,如果之前的代码基于 TensorFlow 1.0,则会出现很多库函数无法识别的错误,例如:

我们可以使用TensorFlow自带的转换工具( tf_upgrage_v2)将 1.0版本的代码转为 2.0版本。可使用如下命令查看使用方法:

为了测试云服务器的训练速度,我们可以用相同的数据和神经网络进行对比训练。下面的两幅图分别是在本地电脑和云服务器上的训练时间对比,神经网络结构为 64x128x128x128x2的全链接网络,训练集为 10 Million, 测试集为 1 Million。可以看到,进行单次迭代云服务器的训练时间仅为本地电脑的十分之一左右。

发表评论

邮箱地址不会被公开。 必填项已用*标注