[add]上传训练benchmark by z00560161

This commit is contained in:
liang_chaoming@huawei.com
2020-10-19 20:22:23 +08:00
parent 22b83024f5
commit 82522e2f61
1225 changed files with 345421 additions and 0 deletions
@@ -0,0 +1,166 @@
## atlasboost
[TOC]
### 产品介绍
atlasboost提供了如下功能:
(1) 一键式地启动单机或多机上的训练脚本,并行执行训练任务;
(2) 自动收集参与训练的device信息,生成rank table file
(3) 通过mpi重定向功能,可实时的监控训练过程;
### 目录结构
源代码的目录结构如下:
```
.
├── atlasboost
│   ├── common
│   │   ├── bin
│   │   ├── CMakeLists.txt
│   │   ├── context.cpp
│   │   ├── context.h
│   │   ├── control.cpp
│   │   ├── control.h
│   │   ├── json.cpp
│   │   ├── json.h
│   │   ├── operations.cpp
│   │   └── operations.h
│   └── tensorflow
│   ├── basics.py
│   ├── __init__.py
│   └── mpi_ops.py
├── build
│   ├── build.sh
| ├── compile.sh
| ├── compile_for_ci.sh
| └── openmpi_setup.sh
├── config
├── lib
├── doc
├── opensource
├── output
├── README.md
└── test
├── mpi_local.sh
├── mpi.sh
└── test_tensorflow.py
```
目录结构说明如下:
(1) atlasboost: 用户在训练python脚本中导入的模块;
(2) common: C++源代码,用于收集device信息,生成rank table file
(3) tensorflow: 支持tensorflow框架,设置环境变量,对外提供python接口;
(4) build: 编译脚本,用于编译common中的C++源代码;
(5) test: 测试脚本,可用于测试运行环境;
### 支持的产品
Ascend 910
### 支持的版本
### atlasboost引入
(1)按照目录结构放入到一个公共的目录中,比如当前服务器创建一个目录public,把以上目录结构放到public中,则通过修改PYTHONPATH=$PYTHONPATH:./public/,外部就可以使用atlasboot接口了。
2)通过执行./setup --path dir(可选,root用户的默认目录是/usr/local/atlasboost,非root用户默认目录是/home/username/atlasboost),则会在默认路径或者dir目录下创建atlasboost文件夹,把安装的内容放在此目录下,若dir/atlasboost已经存在,则会有交互提示(是否继续在此目录下安装,请输入y/n),输入y则会覆盖此目录下重名的文件,输入n则会退出安装。
### 环境依赖
atlasboost依赖于开源库Open MPI和Ascend 910软件中的DSMI接口;
(1) 安装Open MPI
下载4.0.2版本的Open MPI,下载地址:
https://www.open-mpi.org/software/ompi/v4.0/
解压
```
tar -jxvf openmpi-4.0.2.tar.bz2
```
配置,编译和安装
```
./configure
make && make install
```
使配置生效
```
ldconfig
```
测试
```
mpirun --version
```
(2) DSMI
atlasboost中调用DSMI接口获取device的相关信息,编译脚本compile.sh内容如下:
```
#!/bin/bash
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/Ascend/driver/kernel/inc/driver
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/Ascend/driver/lib64/driver
CUR_DIR=$(dirname $(readlink -f $0))
cd ${CUR_DIR}/../atlasboost/common
echo 2 > /proc/sys/kernel/randomize_va_space
cmake .
make
```
其中CPLUS_INCLUDE_PATH和LIBRARY_PATH分别指定了DSMI头文件和对应的动态链接库路径。
### 使用说明
提示:由于通过gethostbyname获取服务器IP,故需要配置host。
#### 1.单机环境测试
将源代码在服务器上解压,然后编译:
```
cd atlasboost/build
./compile.sh
```
然后执行atlasboost/test目录下的测试脚本:
```
./mpi_local.sh
```
该测试程序创建了4条进程,分别收集了服务器上device0到device3的信息,在atlasboost/test生成一份rank_table_file,检查一下该文件中信息是否正确。
#### 2.单机多卡训练
将atlasboost文件夹复制到训练脚本中(只要Python导入模块时能找到) ,在python的启动脚本中导入atlasboost模块:
```
import atlasboost.tensorflow.mpi_ops as atlasboost
```
在python的启动脚本开始时调用atlasboost接口,在main函数中添加如下代码:
```
初始化时传入支持的框架(tensorflow或者mindspore),默认是tensorflow.
atlasboost.init(frame="tensorflow")
device_id = atlasboost.local_rank()
atlasboost. set_device_id (device_id)
```
提示:若非mpi启动训练任务请不要调用以上接口,并且同一台机器上的device_id不要相同。
atlasboost模块初始化之后,每条进程会动态生成一个进程id,若在一台服务器上创建了n条进程,则进程id分别为0到n-1,用户需要根据进程id为每条进程分配一个device(process_id映射到device_id),可直接使用进程id作为device id,如上所示。
执行命令启动训练脚本:
```
mpirun -np 8 -bind-to none -map-by slot --allow-run-as-root ./start.sh
```
其中,-np参数指定启动进程个数,该命令在当前服务器上启动8条进程,start.sh为模型的启动脚本, atlasboost模块会在当前目录为每一台服务器创建rank_table_file,文件在启动目录中。
#### 3.多机环境部署与测试
首先在每台参与训练的服务器中进行单机环境测试;
在多机环境下使用atlasboost,需要配置启动训练服务器到其他参与训练服务器SSH免密登录;
在启动服务器生成公钥:
```
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
```
将启动服务器的公钥发送到其他每台服务器
测试:
```
ssh xx.xx.xx.xx
```
若免密登录配置成功,则可直接使用SSH登录到xx.xx.xx.xx。
在每台服务器的相同位置保存一份atlasdc,若OS属于不同的CPU架构(arm或X86),需要重新编译;在启动服务器中,切换到atlasdc/test目录下,配置mpi.sh脚本:
```
#!/bin/bash
mpirun -H xx.xx.xx.xx:2,xx.xx.xx.xx:4 \
--allow-run-as-root \
--mca btl_tcp_if_exclude lo,docker0,endvnic \
python3 test_tensorflow.py
```
该脚本为在多台服务器上同时启动多条进程的命令,其中-H参数指定了启动哪些服务器上的test_tensorflow.py脚本以及每台服务器上启动几条进程,其中冒号后数值即为在该服务器上启动进程数,根据自己的环境进行配置。
执行测试脚本:
```
./mpi.sh
```
若多机环境正常,则会在每台服务器的atlasboost/test目录下生成进程的工作目录,工作目录中生成了rank table file。
#### 4.多机多卡训练
训练脚本经过单机多卡分布式部署的配置之后,将训练脚本复制到每台参与训练服务器的相同位置,然后执行如下命令:
```
mpirun -H xx.xx.xx.xx:8,xx.xx.xx.xx:8 \
--allow-run-as-root \
-bind-to none -map-by slot \
--mca btl_tcp_if_exclude lo,docker0,endvnic \
./mpi_start.sh
```
该命令在每台服务器上都启动了8条进程进行训练,每台服务器都生成了rank_table_file,其中--mca btl_tcp_if_exclude参数用于限制tcp通信时使用的网卡(不使用lo,docker0,endvnic)。