1、安装天数提供的mindspore安装包
天数显卡暂时还无法适配官方mindspore的适配,安装包需要天数提供。
2、下载mindspore的yolov5
git clone https://gitee.com/mindspore/models # 默认下载最新版本
git checkout r1.8 # 根据mindspore安装包的版本号进行切换,r1.8表示mindsopre=1.8
yolov5在models-r1.8/offical/cv/yolov5目录下
3、配置优化
训练之前,需要改动几处地方:
- 修改 yolov5/src/initializer.py脚本文件
from mindspore import nn
# 改成
from mindspore import nn, load_checkpoint, load_param_into_net
- 修改yolov5/default_config.yaml配置文件
device_target: "GPU" # 把"Ascend"改为“GPU”
- 修改yolov5/backbone.py
修改类class SPP(nn.Cell)的内容:
class SPP(nn.Cell):
def __init__(self, c1, c2, k=(5, 9, 13)):
super(SPP, self).__init__()
...
self.maxpool1 = ops.MaxPool2d(kernel_size=5, stride=1, pad_mode='same') # 把原来的nn改为ops
self.maxpool2 = ops.MaxPool2d(kernel_size=9, stride=1, pad_mode='same') # 把原来的nn改为ops
self.maxpool3 = ops.MaxPool2d(kernel_size=13, stride=1, pad_mode='same') # 把原来的nn改为ops
...
由于天数卡对nn模块的MaxPool2d()没有适配,该算子耗时较长,改为ops模块的MaxPool2d(),训练和测试的速度能提速一倍。
4、训练/测试
- 单卡
通过修改default_config.yaml配置文件的参数,直接在终端输入:
# 训练
python trian.py
# 验证
python val.py
-
多卡
首先,修改default_config.yaml配置文件:
is_distributed: 1 # 把0改为1
device_num: 2 # gpu的数量,根据实际情况设置
mindspore的多卡分布式训练,需要额外安装openmpi。
openmpi下载和安装:
wget -c https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.3.tar.gz
tar xf openmpi-4.0.3.tar.gz
cd openmpi-4.0.3/
./configure --prefix=/usr/local/openmpi-4.0.3
make -j 16
sudo make install
echo -e "export PATH=/usr/local/openmpi-4.0.3/bin:\$PATH" >> ~/.bashrc
echo -e "export LD_LIBRARY_PATH=/usr/local/openmpi-4.0.3/lib:\$LD_LIBRARY_PATH" >> ~/.bashrc
source ~/.bashrc
验证openmpi是否安装成功,在终端输入openmpi --version,输出如下内容:
mpirun (Open MPI) 4.0.3
Report bugs to http://www.open-mpi.org/community/help/
创建run.sh,并把多卡分布式训练命令输入到run.sh
# run.sh
CUDA_VISIBLE_DEVICES=0,1
mpirun --allow-run-as-root -n N python train.py # N为gpu的数量