MindSpore高效并行训练推荐算法Recommender踩坑记(一)

张辉 发表于 2022/09/13 08:44:04 2022/09/13
【摘要】 在华为云GPU云服务器上体验MindSpore高效并行训练推荐算法Recommender

1、下载小规模criteo数据集

打开 https://xihe.mindspore.cn/datasets/shenfeng/criteo_60w/tree

cke_1572.png

点击文件名:

cke_2846.png

下载:

cke_3688.png

耐心等待下载完毕。

2、购买华为云GPU云服务器

打开控制台,切换到弹性云服务器ECS,切换到北京四,点击“购买弹性云服务器”:

按以下方式选择按需计费:

cke_7490.png

选择ubuntu 18.04带CUDA 11.2的镜像:

cke_9995.png

选择网络和安全组:

cke_10682.png

购买弹性IP,按流量计费:

cke_11779.png

设置主机名和密码:

cke_14848.png

确认配置:

cke_15359.png

立即购买:

cke_16089.png

耐心等待服务器创建完毕:

cke_18541.png

注意,此时开始高额收费了!!

配置MobaXterm登录:

cke_20246.png

查看CUDA版本是11.2:

cke_21673.png

3、安装Anaconda环境

看看Python版本:

cke_23257.png

python3.6.9有点低。

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2022.05-Linux-x86_64.sh

cke_751.png

chmod +x *.sh

./Anaconda3-2022.05-Linux-x86_64.sh 

cke_1966.png

按提示安装:

cke_3635.png

按yes继续:

cke_4167.png

cke_4598.png

耐心等待安装完毕:

cke_5296.png

重新登录下,使得环境变量生效:

cke_6286.png

这样就进入了conda的base环境。

4、创建Python 3.8的conda环境

创建一个Python 3.8的conda环境

conda create -n py38 python=3.8

cke_8464.png

安装完毕后,conda activate py38进入conda环境:

cke_11667.png

5、安装MindSpore 1.8.1 CUDA 11.1的版本

打开 mindspore.cn/install 页面,选择对应的环境后,找到pip安装命令:

cke_13517.png

pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.8.1/MindSpore/gpu/x86_64/cuda-11.1/mindspore_gpu-1.8.1-cp38-cp38-linux_x86_64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple

执行安装:

cke_276.png

cke_523.png

6、环境变量设置

将 ~/.bashrc增加以下内容:

export PATH=/usr/local/cuda/bin:$PATH 

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH 

source ~/.bashrc使其生效,

再conda activate py38进入conda环境,

nvcc -V检查cuda编译器的版本:

cke_3785.png

7、安装cuDNN 8.0.5 for CUDA 11.1

验证MindSpore安装:

python -c "import mindspore;mindspore.run_check()"

cke_7462.png

报错了,貌似是没装cuDNN。

打开 https://developer.nvidia.com/zh-cn/cudnn

要安装cuda 11对应的8.0.x的cudnn版本:

cke_10186.png

点击下载cuDNN:cke_10736.png

对比了下mindspore的cuDNN的版本要求:

cke_12157.png

还是得到 Archived cuDNN Release里面去找:

cke_14514.png

点开箭头指向的这个版本:

cke_17701.png

耐心等待下载完毕:

cke_20166.png

将其使用MobaXterm传到服务器上:

cke_21789.png

安装cuDNN:

tar -zxvf cudnn-11.1-linux-x64-v8.0.5.39.tgz

cke_29135.png

cp cuda/include/cudnn.h /usr/local/cuda/include

cp cuda/lib64/libcudnn* /usr/local/cuda/lib64

chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

cke_30194.png

注意,由于/usr/local/cuda目前指向的是cuda-11.2的目录,所以cuDNN目前也指向了cuda-11.2的目录,这可能为后面的失败埋下了伏笔。

8、验证MindSpore安装

python -c "import mindspore;mindspore.run_check()"

cke_40711.png

验证的时候有点卡,而且上面也报了MindSpore 1.8.1跟CUDA版本可能不兼容的警告。

准备测试程序:


import numpy as np
import mindspore as ms
import mindspore.ops as ops

ms.set_context(device_target="GPU")
x = ms.Tensor(np.ones([1,3,3,4]).astype(np.float32))
y = ms.Tensor(np.ones([1,3,3,4]).astype(np.float32))
print(ops.add(x, y))
复制

python test.py

cke_40150.png

目前看来貌似问题不大。

9、对criteo数据集做预处理

先将前面下载的数据集上传到GPU云服务器:

cke_25798.png

将该文件放到 ~/dataset2目录下。

下载recommender代码仓:

git clone https://gitee.com/mindspore/recommender.git

cke_25302.png

cd recommender/datasets/criteo_1tb/

cke_45113.png

生成可训练的mindrecord格式数据:

python process_data.py --data_path=/root/dataset2 --part_num=1

cke_47030.png

没装pandas库?

pip install pandas  -i https://pypi.tuna.tsinghua.edu.cn/simple

cke_50994.png

再来:

python process_data.py --data_path=/root/dataset2 --part_num=1

cke_53712.png


cke_54025.png

cke_54365.png

执行完毕。

检查下结果:

cke_56301.png

cd mindrecord

cke_58449.png

10、进行Wide and deep算法模型的第一次训练

现在应该可以开始训练了!

cd ~/recommender/rec/models/wide_deep

python train_and_eval.py --data_path=/root/dataset2/mindrecord --device_target="GPU"

cke_61361.png

很奇怪,难道mindspore安装的时候没有装这些库吗?

pip install sklearn -i https://pypi.tuna.tsinghua.edu.cn/simple

cke_66829.png

重来:

python train_and_eval.py --data_path=/root/dataset2/mindrecord --device_target="GPU"

cke_67803.png

pip install pyyaml -i https://pypi.tuna.tsinghua.edu.cn/simple

cke_69446.png

再来:

python train_and_eval.py --data_path=/root/dataset2/mindrecord --device_target="GPU"

cke_69863.png

cke_71746.png

报错了:OSError: libnvrtc.so.11.1: cannot open shared object file: No such file or directory

看提示是要找11.1的so版本,但现在显然是11.2的版本,文件名不对应。

找一下,系统中确实有11.2的so文件:

cke_77307.png

到底是重装cuda11.1呢?还是 将11.2改个名字?

先试试简单的方式:

cp ./usr/local/cuda-11.2/targets/x86_64-linux/lib/libnvrtc.so.11.2 ./usr/local/cuda-11.2/targets/x86_64-linux/lib/libnvrtc.so.11.1 

再来训练:

cke_929.png

cke_1160.png

好像还是报错!

看来还得装cuda11.1。

11、安装CUDA 11.1的失败尝试

wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run

chmod +x cuda_11.1.1_455.32.00_linux.run

./cuda_11.1.1_455.32.00_linux.run

报/tmp文件系统空间不足。查看了下硬盘使用情况,确实只剩下2G左右的根文件系统空间,而cuda 11.1的安装盘就有3G多:

12、GPU云服务器硬盘扩容

眼见着硬盘容量不足,只有扩容了,原来40G,那就扩到60G吧!

到ECS服务器列表:

点击名称:

点击云硬盘:

点击扩容:

将容量改为60G的目标容量,点击下一步确认:

耐心等待硬盘扩容完毕。

最好重启下系统,登录linux终端,查看下硬盘容量,这里仍然是40G:

lsblk可以看到硬盘设备已经识别出了60G,但是挂载的vda1还是以前的40G:

fdisk -l查看文件系统类型为Linux:

blkid /dev/vda1

c2fsck -n /dev/vda1

growpart /dev/vda 1

resize2fs /dev/vda1

再重新查看硬盘使用情况:df -h

可见根文件系统已经扩容到60G。

13、重新安装CUDA 11.1

./cuda_11.1.1_455.32.00_linux.run

accept:

install:

这里是提醒原来 /usr/local/cuda指向的是cuda-11.2的目录,需要将其指向cuda-11.1的目录,Yes继续:

安装完毕。

检查安装后的CUDA版本:

nvidia-smi

14、重新安装cuDNN for CUDA 11.1

由于前面将cuDNN装到了CUDA 11.2的目录下,现在CUDA更新了目录,故也需要重新将cuDNN部署到相关的目录:

15、进行Wide and deep算法模型的第二次训练

cd ~/recommender/rec/models/wide_deep

python train_and_eval.py --data_path=/root/dataset2/mindrecord --device_target="GPU"

经过一大堆warning之后:

出现以下画面:

选取部分报错内容贴出来如下:

[WARNING] MD(2153,7f6631fff700,python):2022-09-13-00:26:51.961.512 [mindspore/ccsrc/minddata/mindrecord/io/shard_reader.cc:360] ReadRowGroupSummary] The mindrecord file: /root/dataset2/mindrecord/train_9_input_part.mindrecord0 does not contain any samples, pls remove it.
[ERROR] KERNEL(2153,7f66e55dd700,python):2022-09-13-00:27:05.824.172 [mindspore/ccsrc/plugin/device/gpu/kernel/akg/akg_gpu_kernel_mod.cc:79] GetFunction] cuModuleLoadDataEx failed. Kernel name: << Fused_BroadcastTo_inplace_assign_builder_1247607919109757026_kernel0. Error message: CUDA_ERROR_UNSUPPORTED_PTX_VERSION
[ERROR] KERNEL(2153,7f66e55dd700,python):2022-09-13-00:27:05.824.202 [mindspore/ccsrc/plugin/device/gpu/kernel/akg/akg_gpu_kernel_mod.cc:125] Launch] Get function Fused_BroadcastTo_inplace_assign_builder_1247607919109757026_kernel0 failed. Error message: CUDA_ERROR_UNSUPPORTED_PTX_VERSION
[ERROR] DEVICE(2153,7f66e55dd700,python):2022-09-13-00:27:05.824.215 [mindspore/ccsrc/plugin/device/gpu/hal/hardware/gpu_device_context.cc:601] LaunchKernel] Launch kernel failed, kernel full name: Default/GraphKernel_BroadcastTo_inplace_assign_builder-op1035

主要错误是:Error message: CUDA_ERROR_UNSUPPORTED_PTX_VERSION

这点张小白好像也搞不定了。。。只有等待MindSpore专家的答复了!

(未完待续)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。