MindSpore高效并行训练推荐算法Recommender踩坑记(一)
1、下载小规模criteo数据集
打开 https://xihe.mindspore.cn/datasets/shenfeng/criteo_60w/tree
点击文件名:
下载:
耐心等待下载完毕。
2、购买华为云GPU云服务器
打开控制台,切换到弹性云服务器ECS,切换到北京四,点击“购买弹性云服务器”:
按以下方式选择按需计费:
选择ubuntu 18.04带CUDA 11.2的镜像:
选择网络和安全组:
购买弹性IP,按流量计费:
设置主机名和密码:
确认配置:
立即购买:
耐心等待服务器创建完毕:
注意,此时开始高额收费了!!
配置MobaXterm登录:
查看CUDA版本是11.2:
3、安装Anaconda环境
看看Python版本:
python3.6.9有点低。
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2022.05-Linux-x86_64.sh
chmod +x *.sh
./Anaconda3-2022.05-Linux-x86_64.sh
按提示安装:
按yes继续:
耐心等待安装完毕:
重新登录下,使得环境变量生效:
这样就进入了conda的base环境。
4、创建Python 3.8的conda环境
创建一个Python 3.8的conda环境
conda create -n py38 python=3.8
安装完毕后,conda activate py38进入conda环境:
5、安装MindSpore 1.8.1 CUDA 11.1的版本
打开 mindspore.cn/install 页面,选择对应的环境后,找到pip安装命令:
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
执行安装:
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编译器的版本:
7、安装cuDNN 8.0.5 for CUDA 11.1
验证MindSpore安装:
python -c "import mindspore;mindspore.run_check()"
报错了,貌似是没装cuDNN。
打开 https://developer.nvidia.com/zh-cn/cudnn
要安装cuda 11对应的8.0.x的cudnn版本:
点击下载cuDNN:
对比了下mindspore的cuDNN的版本要求:
还是得到 Archived cuDNN Release里面去找:
点开箭头指向的这个版本:
耐心等待下载完毕:
将其使用MobaXterm传到服务器上:
安装cuDNN:
tar -zxvf cudnn-11.1-linux-x64-v8.0.5.39.tgz
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*
注意,由于/usr/local/cuda目前指向的是cuda-11.2的目录,所以cuDNN目前也指向了cuda-11.2的目录,这可能为后面的失败埋下了伏笔。
8、验证MindSpore安装
python -c "import mindspore;mindspore.run_check()"
验证的时候有点卡,而且上面也报了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
目前看来貌似问题不大。
9、对criteo数据集做预处理
先将前面下载的数据集上传到GPU云服务器:
将该文件放到 ~/dataset2目录下。
下载recommender代码仓:
git clone https://gitee.com/mindspore/recommender.git
cd recommender/datasets/criteo_1tb/
生成可训练的mindrecord格式数据:
python process_data.py --data_path=/root/dataset2 --part_num=1
没装pandas库?
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
再来:
python process_data.py --data_path=/root/dataset2 --part_num=1
执行完毕。
检查下结果:
cd mindrecord
10、进行Wide and deep算法模型的第一次训练
现在应该可以开始训练了!
cd ~/recommender/rec/models/wide_deep
python train_and_eval.py --data_path=/root/dataset2/mindrecord --device_target="GPU"
很奇怪,难道mindspore安装的时候没有装这些库吗?
pip install sklearn -i https://pypi.tuna.tsinghua.edu.cn/simple
重来:
python train_and_eval.py --data_path=/root/dataset2/mindrecord --device_target="GPU"
pip install pyyaml -i https://pypi.tuna.tsinghua.edu.cn/simple
再来:
python train_and_eval.py --data_path=/root/dataset2/mindrecord --device_target="GPU"
报错了:OSError: libnvrtc.so.11.1: cannot open shared object file: No such file or directory
看提示是要找11.1的so版本,但现在显然是11.2的版本,文件名不对应。
找一下,系统中确实有11.2的so文件:
到底是重装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
再来训练:
好像还是报错!
看来还得装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专家的答复了!
(未完待续)
- 点赞
- 收藏
- 关注作者
评论(0)