当前位置: 首页 > news >正文

DeepSpeed Monitoring Comm. Logging

Monitoring

支持多种后端:Tensorboard、WandB、Comet、CSV文件;

TensorBoard例子:

自动监控:DeepSpeed自动把重要metric记录下来。只需在配置文件里enable相应的看板后端即可:

{"tensorboard": {"enabled": true,"output_path": "output/ds_logs/","job_name": "train_bert"}"wandb": {"enabled": true,"team": "my_team","group": "my_group","project": "my_project"}"comet": {"enabled": true,"project": "my_project","experiment_name": "my_experiment"}"csv_monitor": {"enabled": true,"output_path": "output/ds_logs/","job_name": "train_bert"}
}

 自定义监控:

# Step 1: Import monitor (and DeepSpeed config, if needed)
from deepspeed.monitor.monitor import MonitorMaster
from deepspeed.runtime.config import DeepSpeedConfig

# Step 2: Initialized monitor with DeepSpeed config (get DeepSpeed config object, if needed)
ds_config = DeepSpeedConfig("ds_config.json")
monitor = MonitorMaster(ds_config.monitor_config)

for epoch in range(2):

    running_loss = 0.0
    for i, data in enumerate(trainloader):
        pre = time.time()
        inputs, labels = data[0].to(model_engine.local_rank), data[1].to(
            model_engine.local_rank)
        if fp16:
            inputs = inputs.half()
        outputs = model_engine(inputs)
        loss = criterion(outputs, labels)

        model_engine.backward(loss)
        model_engine.step()
        post = time.time()
        # Step 3: Create list of 3-tuple records (single entry in this case)
        events = [("Time per step", post-pre, model_engine.global_samples)]
        # Step 4: Call monitor.write_events on the list from step 3
        monitor.write_events(events)

 [("Time per step", post-pre, model_engine.global_samples)],<表名,纵轴值,横轴值>

 

通信Logging

注意:加了logging, 所有通信将改为同步,对性能会有伤害。

所有deepspeed.comm下的通信,都将被统计上。

在配置文件里打开:

"comms_logger": {"enabled": true,"verbose": false,"prof_all": true,"debug": false
}

verbose: 边跑,边把发生的通信,一条条写下来。例:

[2022-06-26 01:39:55,722] [INFO] [logging.py:69:log_dist] [Rank 0] rank=0 | comm op: reduce_scatter_tensor | time (ms): 9.46 | msg size: 678.86 MB | algbw (Gbps): 1204.52  | busbw (Gbps): 1129.23
[2022-06-26 01:39:56,470] [INFO] [logging.py:69:log_dist] [Rank 0] rank=0 | comm op: all_gather_into_tensor | time (ms): 0.11 | msg size: 6.0 MB | algbw (Gbps): 954.41  | busbw (Gbps): 894.76
[2022-06-26 01:39:56,471] [INFO] [logging.py:69:log_dist] [Rank 0] rank=0 | comm op: all_gather_into_tensor | time (ms): 0.08 | msg size: 6.0 MB | algbw (Gbps): 1293.47  | busbw (Gbps): 1212.63

algbw: algorithm bandwidth, 发生的通信size/实际通信时间;

busbw: 硬件理论带宽;是个固定值;

algbw如果比busbw小太多,说明糟糕,有待进一步优化;

总结式:deepspeed.comm.log_summary()

Comm. Op            Message Size        Count               Total Latency(ms)   Avg Latency(ms)     tput_avg (Gbps)     busbw_avg (Gbps)
broadcast2.0 KB              146                 11.12               0.08                0.43                0.4198.25 MB            1                   8317.12             8317.12             0.20                0.19
reduce_scatter_tensor678.86 MB           40                  602.29              9.69                1468.06             1376.31

展示通信等待时长:

dist.log_summary(show_straggler=True)

 这么计算的:(一次组播通信里,每个rank的完成时间,减去,所有rank里完成最快的,这些"等待"时间,加和到一起)

straggler = sum(t_collectives - allreduce(t_collectives, MIN))
http://www.lryc.cn/news/377097.html

相关文章:

  • 关于INCA的几个实用功能
  • Mamaba3--RNN、状态方程、勒让德多项式
  • PLC模拟量和数字量到底有什么区别?
  • html中如何写一个提示框,css画一个提示框
  • ExoPlayer 学习笔记
  • 汽车IVI中控开发入门及进阶(二十七):车载摄像头vehicle camera
  • Transformer模型:未来的改进方向与潜在影响
  • ROS 激光雷达
  • 杂说咋说-关于城市化发展和城市治理的几点建议(浙江借鉴)
  • Linux 常用命令 - which【定位可执行文件的位置】
  • js文件导出功能
  • PHP转Go系列 | 字符串的使用姿势
  • vue关于:deep穿透样式的理解
  • 算法 |数字计数
  • 通义千问调用笔记
  • Linux常见的压缩文件种类与对应的压缩解压方法
  • LNMP网站架构
  • 排序算法及源代码
  • 力扣第206题“反转链表”
  • 多模态大模型解读
  • React是什么?
  • 创新入门 | 病毒循环Viral Loop是什么?为何能实现指数增长
  • 鸿蒙HarmonyOS实战:渲染控制、路由案例
  • 【Linux】进程控制2——进程等待(waitwaitpid)
  • SpringBoot 统计接口调用耗时的多种方式
  • Linux系统安装Ruby语言
  • 网络安全练气篇——OWASP TOP 10
  • python实现进度条的方法和实现代码
  • 被拷打已老实!面试官问我 #{} 和 ${} 的区别是什么?
  • C# —— while循环语句