# msrun启动 [](https://gitee.com/mindspore/docs/blob/r2.7.0rc1/tutorials/source_zh_cn/parallel/msrun_launcher.md) ## 概述 `msrun`是[动态组网](https://www.mindspore.cn/tutorials/zh-CN/r2.7.0rc1/parallel/dynamic_cluster.html)启动方式的封装,用户可使用`msrun`,以单个命令行指令的方式在各节点拉起多进程分布式任务,并且无需手动设置[动态组网环境变量](https://www.mindspore.cn/tutorials/zh-CN/r2.7.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地址或者主机名。默认为IP地址127.0.0.1。 | msrun会自动检测在哪个节点拉起Scheduler进程,用户无需关心。 若无法查找到对应的地址或主机名无法被DNS解析,训练任务会拉起失败。 当前版本暂不支持IPv6地址。 若传入主机名时,msrun会自动将其解析为IP地址,需要用户环境支持DNS服务。 |
--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注册成功,则任务拉起失败。 |
--bind_core | 开启进程绑核。 | Bool/Dict | True、False或者给指定设备分配CPU范围段的字典。默认为False。 | 若设置为True,则会基于环境信息按照设备亲和去自动分配CPU范围段;若手动传入一个字典,如{"device0":["0-10"],"device1":["11-20"]} ,则会给0号进程(对应device0)分配CPU范围段0-10,给1号进程(对应device1)分配CPU范围段11-20。 |
--sim_level | 设置模拟编译等级。 | Integer | 默认为-1,即关闭模拟编译功能。 | 若用户配置此参数,msrun只会拉起进程的模拟编译,不做算子执行。 此功能通常用于调试大规模分布式训练并行策略,在编译阶段提前发现内存和策略问题。 模拟编译等级的设置可参考文档:DryRun。 |
--sim_rank_id | 单卡模拟编译的rank_id。 | Integer | 默认为-1,即关闭单进程的模拟编译功能。 | 设置单卡模拟编译进程的rank_id。 |
--rank_table_file | rank_table配置文件,只在昇腾平台下有效。 | String | rank_table配置文件路径,默认为空。 | 此参数代表昇腾平台下的rank_table配置文件,描述当前分布式集群。 由于rank_table配置文件反映的是物理层面分布式集群信息,在使用该配置时, 请确保对于当前进程可见的Device与rank_table配置保持一致。 可通过环境变量 ASCEND_RT_VISIBLE_DEVICES 设置对于当前进程可见的Device。 |
--worker_log_name | 设置worker日志名。 | String | worker日志文件名,默认为worker_[rank].log 。 |
此参数代表支持用户配置worker日志名,并且支持分别通过{ip} 和{hostname} 在worker日志名中配置 ip 和hostname 。worker日志名的后缀默认为 rank 。 |
--tail_worker_log | 输出worker日志到控制台。 | String | 一个或多个与worker进程rank_id关联的整数。默认为-1。 | 此参数代表--join=True 情况下,默认输出当前节点所有worker日志,并且支持用户指定一个或多个卡的worker日志输出到控制台。 这个参数需要在[0, local_worker_num]范围内。 |
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 |
环境变量 | 功能 | 取值 |
---|---|---|
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 参数。 |