## 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)。