当前位置: 首页 > 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))

相关文章:

  • 速盾:什么是高防CDN?有什么优势?
  • 网络安全复习笔记
  • 入门Rabbitmq
  • QT中出现ASSERT failure in QList::at: “index out of range”的情况和解决办法
  • 全面解析AdaBoost:多分类、逻辑回归与混合分类器的实现
  • 基于DPU的云原生裸金属服务快速部署及存储解决方案
  • Jupyter Notebook 中 %run 魔法命令
  • 高级优化理论与方法(十五)
  • 外网怎么访问内网?
  • 【rabbitmq的消息堆积问题】
  • 【perl】环境搭建
  • Java基础面试重点-3
  • JAVA学习笔记DAY7——Spring_Ioc
  • Java:爬虫htmlunit抓取a标签
  • 【讲解下目标追踪】
  • [译]前端离线指南(上)
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • axios 和 cookie 的那些事
  • Create React App 使用
  • Date型的使用
  • django开发-定时任务的使用
  • Hexo+码云+git快速搭建免费的静态Blog
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Webpack 4 学习01(基础配置)
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 深度学习在携程攻略社区的应用
  • 通过git安装npm私有模块
  • 微信小程序填坑清单
  • 物联网链路协议
  • 小程序button引导用户授权
  • 译自由幺半群
  • python最赚钱的4个方向,你最心动的是哪个?
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • (04)odoo视图操作
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (学习总结)STM32CubeMX HAL库 学习笔记撰写心得
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)Sql Server 保留几位小数的两种做法
  • (转)平衡树
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (轉)JSON.stringify 语法实例讲解
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ./configure、make、make install 命令
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码