# msrun启动 [](https://gitee.com/mindspore/docs/blob/r2.3.q1/tutorials/experts/source_zh_cn/parallel/msrun_launcher.md) ## 概述 `msrun`是[动态组网](https://www.mindspore.cn/tutorials/experts/zh-CN/r2.3.0rc1/parallel/dynamic_cluster.html)启动方式的封装,用户可使用`msrun`以单个命令行指令的方式在各节点拉起多进程分布式任务,并且无需手动设置[动态组网环境变量](https://www.mindspore.cn/tutorials/experts/zh-CN/r2.3.0rc1/parallel/dynamic_cluster.html)。`msrun`同时支持`Ascend`,`GPU`和`CPU`后端。与`动态组网`启动方式一样,`msrun`无需依赖第三方库以及配置文件。 > - `msrun`在用户安装MindSpore后即可使用,可使用指令`msrun --help`查看支持参数。 > - `msrun`支持`图模式`以及`PyNative模式`。 命令行参数列表:
参数 | 功能 | 类型 | 取值 | 说明 |
---|---|---|---|---|
--worker_num | 参与分布式任务的Worker进程总数。 | Integer | 大于0的整数。默认值为8。 | 每个节点上启动的Worker总数应当等于此参数: 若总数大于此参数,多余的Worker进程会注册失败; 若总数小于此参数,集群会在等待一段超时时间后, 提示任务拉起失败并退出, 超时时间窗大小可通过参数 cluster_time_out 配置。 |
--local_worker_num | 当前节点上拉起的Worker进程数。 | Integer | 大于0的整数。默认值为8。 | 当此参数与worker_num 保持一致时,代表所有Worker进程在本地执行,此场景下 node_rank 值会被忽略。 |
--master_addr | 指定Scheduler的IP地址。 | String | 合法的IP地址。默认为127.0.0.1。 | msrun会自动检测在哪个节点拉起Scheduler进程,用户无需关心。 若无法查找到对应的地址,训练任务会拉起失败。 当前版本暂不支持IPv6地址。 当前版本msrun使用 ip -j addr 指令查询当前节点地址,需要用户环境支持此指令。 |
--master_port | 指定Scheduler绑定端口号。 | Integer | 1024~65535范围内的端口号。默认为8118。 | |
--node_rank | 当前节点的索引。 | Integer | 大于0的整数。默认值为-1。 | 单机多卡场景下,此参数会被忽略。 多机多卡场景下, 若不设置此参数,Worker进程的rank_id会被自动分配; 若设置,则会按照索引为各节点上的Worker进程分配rank_id。 若每个节点Worker进程数量不同,建议不配置此参数, 以自动分配rank_id。 |
--log_dir | Worker以及Scheduler日志输出路径。 | String | 文件夹路径。默认为当前目录。 | 若路径不存在,msrun会递归创建文件夹。 日志格式如下:对于Scheduler进程,日志名为 scheduler.log ;对于Worker进程,日志名为 worker_[rank].log ,其中 rank 后缀与分配给Worker的rank_id 一致,但在未设置 node_rank 且多机多卡场景下,它们可能不一致。建议执行 grep -rn "Global rank id" 指令查看各Worker的rank_id 。 |
--join | msrun是否等待Worker以及Scheduler退出。 | Bool | True或者False。默认为False。 | 若设置为False,msrun在拉起进程后会立刻退出, 查看日志确认分布式任务是否正常执行。 若设置为True,msrun会等待所有进程退出后,收集异常日志并退出。 |
--cluster_time_out | 集群组网超时时间,单位为秒。 | Integer | 整数。默认为600秒。 | 此参数代表在集群组网的等待时间。 若超出此时间窗口依然没有 worker_num 数量的Worker注册成功,则任务拉起失败。 |
task_script | 用户Python脚本。 | String | 合法的脚本路径。 | 一般情况下,此参数为python脚本路径,msrun会默认以python task_script task_script_args 方式拉起进程。msrun还支持此参数为pytest,此场景下任务脚本及任务参数在参数 task_script_args 传递。 |
task_script_args | 用户Python脚本的参数。 | 参数列表。 | 例如:msrun --worker_num=8 --local_worker_num=8 train.py --device_target=Ascend --dataset_path=/path/to/dataset |
环境变量 | 功能 | 取值 |
---|---|---|
MS_ROLE | 本进程角色。 |
当前版本msrun 导出下面两个值:
|
MS_SCHED_HOST | 用户指定的Scheduler的IP地址。 | 与参数--master_addr 相同。 |
MS_SCHED_PORT | 用户指定的Scheduler绑定端口号。 | 与参数--master_port 相同。 |
MS_WORKER_NUM | 用户指定的Worker进程总数。 | 与参数--worker_num 相同。 |
MS_TOPO_TIMEOUT | 集群组网超时时间。 | 与参数--cluster_time_out 相同。 |
RANK_SIZE | 用户指定的Worker进程总数。 | 与参数--worker_num 相同。 |
RANK_ID | 为Worker进程分配的rank_id。 | 多机多卡场景下,若没有设置--node_rank 参数,RANK_ID 只会在集群初始化后被导出。因此要使用此环境变量,建议正确设置 --node_rank 参数。 |