searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

DLRover的TrainerAgent

2024-09-09 09:47:49
5
0

什么是DLRover

关于DLRover是什么,参见本专栏的上一篇文章:DLRover:蚂蚁开源的大规模智能分布式训练系统

两个大模型训练故障场景复现

场景复现:训练 Pod 被调度在了一个故障机上

复现步骤

  • 训练任务,启动任务时同时启动监控进程,在worker-1 pod上持续杀死dlrover-run启动的网络检测子进程,模拟故障机
  • sed -i 's/run_network_check/nvidia_gpu/' examples/pytorch/mnist/start_chaos.sh && \
  • (bash examples/pytorch/mnist/start_chaos.sh kill-process &) &&
  • 训练节点数必须大于3,否则DLRover无法定位故障机

预期结果

  • pod因为故障机报错退出,错误日志("The node is down.")
  • dlrover自动启动新的pod,接替故障节点

场景复现:训练pod是一个慢节点-场景

复现步骤

  • 正常启动训练任务
  • 启动命令携带--exclude-straggler 参数
  • 进入一个训练pod中,将 其 CPU 负载提升到 90%,使其成为慢节点
  • chaosblade-1.7.2/blade create cpu load --cpu-percent 90
  • kubectl top pod torch-mnist-hgc-edljob-worker-0 -n dlrover
  • 训练pod申请的cpu数量不能太少,否则组网就会失败,整个任务失败

预期结果

  • 慢节点pod报错退出,错误日志("The node is a straggler and exits.")
  • dlrover自动启动新的pod,接替慢节点

torchrun介绍

  • torchrun 是 PyTorch 提供的一种用于启动分布式训练任务的命令行工具。它是 torch.distributed.launch 的改进版本,提供了简化的接口和更强的功能。torchrun 具备以下特点:
  • 简化的命令行参数:相比 torch.distributed.launch,torchrun 的参数更加简洁和易用。
  • 支持多节点多进程:能够方便地配置和启动多节点多进程的分布式训练任务。
  • 与 PyTorch 弹性机制的集成:torchrun 可以与 PyTorch Elastic 配合使用,提供弹性训练能力。

torchrun命令示例

  • torchrun --nnodes=4 --nproc_per_node=2 --rdzv_id=123 --rdzv_backend=c10d --rdzv_endpoint=master_ip:29500 train.py
  • --nnodes 指定总共的节点数。
  • --nproc_per_node 指定每个节点上运行的进程数。
  • --rdzv_id 是用于集合点的唯一标识符。
  • --rdzv_backend 指定集合点的后端,通常是 c10d。
  • --rdzv_endpoint 指定集合点的地址和端口。

dlrover-run介绍

  • dlrover-run 是 DLRover 提供的一个命令行工具,用于运行分布式训练作业
  • 它在功能上是 torchrun 的扩展版本,并增加了一些额外的功能,以提高分布式训练的可靠性和易用性
  • 网络检查: 自动检测故障节点和迟滞节点,提升分布式训练的可靠性。
  • 简化配置: 在多节点多工作者场景下,简化了必要的配置参数,提升了易用性。
  • 否则需要手动处理节点间通信、资源管理和故障检测等问题

dlrover-run命令示例

/usr/local/bin/dlrover-run --network-check --nnodes=2:3 --nproc_per_node=2 --max_restarts=3 examples/pytorch/mnist/cnn_train.py --num_epochs 5 --training_data /data/mnist_png/training/ --validation_data /data/mnist_png/testing/

  • 对比torchrun:
  • 自动化配置:不需要指定集合点参数
  • 故障检测和恢复:--network-check参数
  • 动态资源管理:--nnodes参数指定范围而非固定节点数

 自动检测故障节点

  • 任务启动时候添加 --network-check参数
  • 在ElasticTrainingAgent每次_rendezvous时候,会调用_initialize_workers,过程中会创建NodeCheckElasticAgent
  • NodeCheckElasticAgent在每个 GPU 上启动子进程来运行一个轻量级的检测任务来检查机器
  • GPU 检测脚本 :python -m dlrover.trainer.torch.node_check.nvidia_gpu
  • 昇腾芯片检测脚本:python -m dlrover.trainer.torch.node_check.ascend_npu
  • 检测任务包含一个简单的 GEMM 和 allgather 任务
  • 所有节点两两划分为多个group,执行检查任务并将运行耗时上报给 job master
  • 如果有任务失败,需要第二轮测试
  • 至少需要4个节点才能检测出故障节点,否则训练直接失败

agent的继承关系

  • ElasticAgent:抽象类,提供弹性调度能力的基本框架
    • PyTorch包,仅有run和get_worker_group两个待实现接口
  • SimpleElasticAgent:抽象类,提供更具体的策略接口和实现框架
    • PyTorch包,实现了_rendezvous,run等接口,_start_workers等接口待实现
  • LocalElasticAgent:专注于本地环境的弹性调度
    • PyTorch包,实现了SimpleElasticAgent中待实现的接口
  • ElasticTrainingAgent:增加了对分布式训练的支持,能够动态调整训练资源
    • DLRover实现,继承LocalElasticAgent,做了基于master获取组网信息等变化
  • NodeCheckElasticAgent:增加了节点健康检查能力
    • DLRover实现,重写run函数,只检查节点状态,不训练

 

 

0条评论
0 / 1000
h****m
5文章数
0粉丝数
h****m
5 文章 | 0 粉丝
原创

DLRover的TrainerAgent

2024-09-09 09:47:49
5
0

什么是DLRover

关于DLRover是什么,参见本专栏的上一篇文章:DLRover:蚂蚁开源的大规模智能分布式训练系统

两个大模型训练故障场景复现

场景复现:训练 Pod 被调度在了一个故障机上

复现步骤

  • 训练任务,启动任务时同时启动监控进程,在worker-1 pod上持续杀死dlrover-run启动的网络检测子进程,模拟故障机
  • sed -i 's/run_network_check/nvidia_gpu/' examples/pytorch/mnist/start_chaos.sh && \
  • (bash examples/pytorch/mnist/start_chaos.sh kill-process &) &&
  • 训练节点数必须大于3,否则DLRover无法定位故障机

预期结果

  • pod因为故障机报错退出,错误日志("The node is down.")
  • dlrover自动启动新的pod,接替故障节点

场景复现:训练pod是一个慢节点-场景

复现步骤

  • 正常启动训练任务
  • 启动命令携带--exclude-straggler 参数
  • 进入一个训练pod中,将 其 CPU 负载提升到 90%,使其成为慢节点
  • chaosblade-1.7.2/blade create cpu load --cpu-percent 90
  • kubectl top pod torch-mnist-hgc-edljob-worker-0 -n dlrover
  • 训练pod申请的cpu数量不能太少,否则组网就会失败,整个任务失败

预期结果

  • 慢节点pod报错退出,错误日志("The node is a straggler and exits.")
  • dlrover自动启动新的pod,接替慢节点

torchrun介绍

  • torchrun 是 PyTorch 提供的一种用于启动分布式训练任务的命令行工具。它是 torch.distributed.launch 的改进版本,提供了简化的接口和更强的功能。torchrun 具备以下特点:
  • 简化的命令行参数:相比 torch.distributed.launch,torchrun 的参数更加简洁和易用。
  • 支持多节点多进程:能够方便地配置和启动多节点多进程的分布式训练任务。
  • 与 PyTorch 弹性机制的集成:torchrun 可以与 PyTorch Elastic 配合使用,提供弹性训练能力。

torchrun命令示例

  • torchrun --nnodes=4 --nproc_per_node=2 --rdzv_id=123 --rdzv_backend=c10d --rdzv_endpoint=master_ip:29500 train.py
  • --nnodes 指定总共的节点数。
  • --nproc_per_node 指定每个节点上运行的进程数。
  • --rdzv_id 是用于集合点的唯一标识符。
  • --rdzv_backend 指定集合点的后端,通常是 c10d。
  • --rdzv_endpoint 指定集合点的地址和端口。

dlrover-run介绍

  • dlrover-run 是 DLRover 提供的一个命令行工具,用于运行分布式训练作业
  • 它在功能上是 torchrun 的扩展版本,并增加了一些额外的功能,以提高分布式训练的可靠性和易用性
  • 网络检查: 自动检测故障节点和迟滞节点,提升分布式训练的可靠性。
  • 简化配置: 在多节点多工作者场景下,简化了必要的配置参数,提升了易用性。
  • 否则需要手动处理节点间通信、资源管理和故障检测等问题

dlrover-run命令示例

/usr/local/bin/dlrover-run --network-check --nnodes=2:3 --nproc_per_node=2 --max_restarts=3 examples/pytorch/mnist/cnn_train.py --num_epochs 5 --training_data /data/mnist_png/training/ --validation_data /data/mnist_png/testing/

  • 对比torchrun:
  • 自动化配置:不需要指定集合点参数
  • 故障检测和恢复:--network-check参数
  • 动态资源管理:--nnodes参数指定范围而非固定节点数

 自动检测故障节点

  • 任务启动时候添加 --network-check参数
  • 在ElasticTrainingAgent每次_rendezvous时候,会调用_initialize_workers,过程中会创建NodeCheckElasticAgent
  • NodeCheckElasticAgent在每个 GPU 上启动子进程来运行一个轻量级的检测任务来检查机器
  • GPU 检测脚本 :python -m dlrover.trainer.torch.node_check.nvidia_gpu
  • 昇腾芯片检测脚本:python -m dlrover.trainer.torch.node_check.ascend_npu
  • 检测任务包含一个简单的 GEMM 和 allgather 任务
  • 所有节点两两划分为多个group,执行检查任务并将运行耗时上报给 job master
  • 如果有任务失败,需要第二轮测试
  • 至少需要4个节点才能检测出故障节点,否则训练直接失败

agent的继承关系

  • ElasticAgent:抽象类,提供弹性调度能力的基本框架
    • PyTorch包,仅有run和get_worker_group两个待实现接口
  • SimpleElasticAgent:抽象类,提供更具体的策略接口和实现框架
    • PyTorch包,实现了_rendezvous,run等接口,_start_workers等接口待实现
  • LocalElasticAgent:专注于本地环境的弹性调度
    • PyTorch包,实现了SimpleElasticAgent中待实现的接口
  • ElasticTrainingAgent:增加了对分布式训练的支持,能够动态调整训练资源
    • DLRover实现,继承LocalElasticAgent,做了基于master获取组网信息等变化
  • NodeCheckElasticAgent:增加了节点健康检查能力
    • DLRover实现,重写run函数,只检查节点状态,不训练

 

 

文章来自个人专栏
侯功成的专栏
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0