分布式接口适配
目前MindTorch中对标torch.distributed
和torch.cuda
相关分布式接口还在开发中,已支持部分核心接口功能,具体可以参考接口支持列表。
当前已支持分布式接口存在如下约束:
仅支持动态图(PyNative)模式。
仅支持GPU/Ascend后端。
启动方式当前仅支持MindSpore原生的启动方式。
通信接口不支持异步通信(
async_op
等),不支持超时检测机制(timeout
等)。
分布式启动
采用MindSpore框架的分布式启动方式代替torchrun
和torch.distributed.launch
启动方式:
在MindSpore 2.3版本及以后版本,可使用msrun以单个命令行指令的方式在各节点拉起多进程分布式任务。
msrun --worker_num=8 --local_worker_num=8 --master_port=8118 --log_dir=msrun_log --join=True --cluster_time_out=300 net.py
在MindSpore 2.3之前版本中,则可以通过OpenMPI的mpirun运行分布式脚本。下面以使用单机8卡的分布式训练为例,当执行该命令时, 脚本会在后台运行,日志文件会保存到当前目录下,不同卡上的日志会按rank_id分别保存在log_output/1/路径下对应的文件中。
mpirun -n 8 --output-filename log_output --merge-stderr-to-stdout python train.py > train.log 2>&1 &
多机多卡启动等更复杂的用法请参考MindSpore分布式训练样例。
分布式接口适配
当前仅支持部分torch.distributed
和torch.cuda
模块下基础接口功能,参数使用的差异详细可参阅约束列表。更多功能支持正在开发中,欢迎参与贡献!
另外,也可以将torch.distributed
相关接口替换成MindSpore的自动并行相关接口功能,详细可参考进阶训练指南章节描述。