中科曙光服务器飞桨部署过程(海光DCU)
2024-09-11 16:03:49

中科曙光服务器飞桨部署过程(海光DCU)

接到公司任务,让我帮忙部署百度飞桨到一台中科曙光服务器。

1698829462496

服务器配置:

系统:Centos7.9

硬盘:①480G固态硬盘 ②4T的机械硬盘

CPU:AMD 7261 8核处理器

系统安装:

为了实验的顺利进行,需要准备一个全新没被使用过的的Linux系统。

制作安装U盘

Centos下载地址:https://www.centos.org/download/

插入U盘,用U盘制作Centos7.9镜像。

用UltralSO打开ISO镜像点击菜单栏中的 启动-写入硬盘映像。

1698829974965

先对U盘进行格式化,再点击写入。

1698830105825

1698830121282

等待写完后,插入服务器,按F7选择U盘启动。

系统安装过程

略……

参考:https://www.bilibili.com/video/BV1mG4y1s73Q/?spm_id_from=333.337.search-card.all.click&vd_source=b185220b1b84506751624fb3ce91b52a

什么是DCU?

DCU(Deep Computing Unit 深度计算器)是 海光(HYGON)推出的一款专门用于 AI 人工智能和深度学习的加速卡。DCU也可以应用于密集型数值计算。由下图可以看出,DCU是类似GPU的硬件。

安装DCU驱动

环境准备

运行如下两句命令:

①安装编译需要的工具

1
sudo yum install -y rpm-build gcc-c++ cmake automake elfutils-libelf-devel

②kernel-devel是一个开发Linux内核必备的包,它提供了编译、调试、测试Linux内核所需的库文件、头文件和文档。

1
sudo yum install -y kernel-devel-`uname -r`

下载DTK驱动

注册并登录中科曙光:https://developer.hpccube.com/tool/#sdk

下载dtk-22.10驱动即可,因为没发现dtk-22.10.1的预编译飞桨

链接:https://cancon.hpccube.com:65024/6/main/dtk-22.10%E9%A9%B1%E5%8A%A8

右键 rock-4.5.2-0-5.11.38-1-V01.4.2.run 点击生成直链:

1698831036191

复制第四个直链结果:

1698831051639

组合成如下命令,在终端执行,即可下载到本地:

1
sudo wget -c https://cancon.hpccube.com:65024/directlink/6/dtk-22.10%E9%A9%B1%E5%8A%A8/rock-4.5.2-0-5.11.38-1-V01.4.2.run

安装驱动:

赋予可执行权限:

1
sudo chmod +x rock-4.5.2-0-5.11.38-1-V01.4.2.run

执行:

1
sudo ./rock-4.5.2-0-5.11.38-1-V01.4.2.run

等待大约3分钟后会看到,如下字样

1698831448305

输入如下命令重启:

1
reboot

重启后执行如下命令:

1
lsmod | grep hydcu

可以看到如下结果则代表安装成功。
1698831708603

安装DCU Toolkit

下载DCU Toolkit

1698831941499

组合成下载命令,在终端进行执行:

1
wget -c https://cancon.hpccube.com:65024/directlink/1/DTK-22.10.1/CentOS7.6/DTK-22.10.1-CentOS7.6-x86_64.tar.gz

解压到opt文件夹下

1
tar xvf ./DTK-22.10.1-CentOS7.6-x86_64.tar.gz -C /opt

安装

运行如下命令进行安装:

1
source /opt/dtk-22.10.1/env.sh

库环境变量

1
export LD_LIBRARY_PATH=/opt/dtk-22.10.1/lib:$LD_LIBRARY_PATH

可以将上面这句话写到/root/.bashrc里面

测试是否安装成功

输入如下命令

1
rocminfo | grep DCU

可以查看到如下结果,则表明已经安装成功

1698833059747

PaddlePaddle安装

方式一:Docker镜像安装PaddlePaddle

安装Docker到服务器

1、卸载原系统Docker

因为原系统有可能使用的是Docker的替代品podman。

1
2
3
4
5
6
7
8
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2、设置安装源

1
2
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3、安装Docker

1
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4、启动Docker

1
2
3
4
5
// 启动Docker
sudo systemctl start docker

// 设置开机启动
sudo systemctl enable docker

拉取镜像

打开光源dockerHub:https://sourcefind.cn/#/image/dcu/paddlepaddle

根据需要实际情况安装自己的版本。

由于上文用到的DTK是22.10.1。因此我搜索22.10.

1698834370422

点击红框中的按钮进行复制。

即:

1
docker pull image.sourcefind.cn:5000/dcu/admin/base/paddlepaddle:2.3.2-centos7.6-dtk-22.10.1-py39-latest

待下载完后,执行可以看到镜像ID,此处我的镜像ID为:0f911e7500d2

1
docker images

微信图片_20231101183800

启动容器

1
2
3
4
5
6
7
8
9
10
# 启动容器,注意这里的参数,例如 shm-size, device 等都需要配置
docker run -it --name paddle-rocm-dev \
--shm-size=128G \
--device=/dev/kfd \
--device=/dev/dri \
--group-add video \
--cap-add=SYS_PTRACE \
--security-opt \
seccomp=unconfined \
0f911e7500d2 /bin/bash

进入容器后执行:

1
rocm-smi

可看到类似如下的结果:

1698835544815

方式二:预编译安装

下载Anaconda

1
2
3
wget -c https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh

curl -O https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh

安装Anaconda

赋予可执行权限

1
sudo chmod +x Anaconda3-2023.09-0-Linux-x86_64.sh

安装:

1
sudo ./Anaconda3-2023.09-0-Linux-x86_64.sh

①按一次回车

②按多次空格

③然后输入yes同意协议

④同意协议后再按回车进行安装。

⑤然后再输入yes

1698833862008

输入如下语句,应用环境变量

1
source /root/.bashrc

创建虚拟环境

1
conda create -n python38DCU python=3.8

查看虚拟环境

1
conda env list

激活虚拟环境

1
conda activate python39DCU

下载whl

下载地址:https://cancon.hpccube.com:65024/4/main/paddle/dtk22.10

如上方操作一样,右键paddlepaddle-2.3.2_dtk2210_git0195561-cp38-cp38-manylinux2014_x86_64.whl文件,生成直链,点击第四行复制直链链接。组合成wget下载命令。

1
wget -c https://cancon.hpccube.com:65024/directlink/4/paddle/dtk22.10/paddlepaddle-2.3.2_dtk2210_git0195561-cp38-cp38-manylinux2014_x86_64.whl

安装whl

1
pip install paddlepaddle-2.3.2_dtk2210_git0195561-cp38-cp38-manylinux2014_x86_64.whl -i https://mirror.baidu.com/pypi/simple 

验证是否安装成功

执行如下命令,可看到paddlepaddle-rocm即安装成功~!。

1
conda list | grep paddle

1698852478654

方式三:编译安装

待续……

图片分类实验

ResNet50 训练示例

第一步:克隆分类套件

1
git clone https://github.com/PaddlePaddle/PaddleClas.git

第二步:设置DCU的设备ID

1
export HIP_VISIBLE_DEVICES=0,1

第三步:模型训练

1
python -m paddle.distributed.launch --gpus="0,1" tools/train.py -c ./ppcls/configs/ImageNet/ResNet/ResNet50.yaml

目标检测实验

PaddleDetection使用

克隆PaddleDetection

只能用PaddleDetection release2.2,其他版本存在兼容性问题

1
git clone -b release/2.2 https://github.com/PaddlePaddle/PaddleDetection.git

切换目录PaddleDetection

1
cd PaddleDetection

查看分支信息

看看你的是不是2.2版本

1
git branch -v

安装PaddleDetection依赖

1
pip install Cython -i https://mirror.baidu.com/pypi/simple

安装相关依赖

注意:修改requirements.txt文件,将里面的sklearn修改为scikit-learn

1
pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple

如下图,看到Installing collected packages: .....字样则表示安装已经成功

1698852625361

安装Paddledet

1
python setup.py install

1698852717699

验证PaddleDetection是否安装成功

1
python ppdet/modeling/tests/test_architectures.py

出现了一个bug,显示找不到libpython3.8.so.1.0,所以需要进行全局查找

1
find / -name "libpython3.8.so.1.0"

找出其位置后,将其复制到/usr/lib64

1
cp /root/anaconda3/envs/python38DCU/lib/libpython3.8.so.1.0 /usr/lib64

1698852959597

1
python ppdet/modeling/tests/test_architectures.py

然后再次执行测试命令,得到ok字样即安装成功~!

1698853136726

训练示例

第一步:下载数据集

1
python PaddleDetection/dataset/voc/download_voc.py
1
python PaddleDetection/dataset/voc/create_list.py

第二步:修改 config 文件的参数
切换到PaddleDetection文件夹

1
cd PaddleDetection/

修改 configs/yolov3/_base_/optimizer_270e.yml 文件中的学习率参数
base_lr: 0.0005

修改 configs/yolov3/_base_/yolov3_reader.yml 工作数量为1
worker_num: 1

第三步:执行训练

1
export HIP_VISIBLE_DEVICES=0,1
1
python -m paddle.distributed.launch --gpus 0,1 tools/train.py -c configs/yolov3/yolov3_darknet53_270e_voc.yml --eval