最新要闻
- 奚梦瑶首晒女儿正面照,Romee小脸圆润超可爱,五官像父亲何猷君
- 蔚来汽车最新财报:2023年第二季度营收87.717亿元人民币
- 招商银行:8月29日融券净卖出8.55万股,连续3日累计净卖出56.41万股
- 中远海能:8月29日融资买入1125.78万元,融资融券余额3.31亿元
- 重磅信号:一晚30多家公司叫停减持,回购队伍继续壮大!A股真的变了?
- 一加 Ace 2 Pro 原神派蒙主题礼盒今日 10 点开售,售价 3599 元
- 美国宣布再向乌克兰提供价值2.5亿美元军事援助
- “一经售出,概不退换?”演出票务“霸道”条款惹争议
- 美国油气巨头:全球无法在2050年前将变暖幅度控制在2度以内
- 开学家长也焦虑?专家教你4招缓解
- 浙江义乌开通首条国内全货机航线 预计年运量超四千吨
- 爱情喜剧《欢迎来到我身边》开机 于适王影璐主演
- 朔州市今年第一例造血干细胞捐献成功
- iPhone 15发布日期曝光:没金色 没大动
- 天津签发首份遗产管理人资格公证书
- 浙江省博物馆新馆开馆迎客 “数字文物”展厅受关注
手机
南航上半年成绩单,还透露了厦航是赚是亏
速达股份IPO铩羽两年再闯关 最重要股东郑煤机“壮士断腕”为哪般
- 南航上半年成绩单,还透露了厦航是赚是亏
- 速达股份IPO铩羽两年再闯关 最重要股东郑煤机“壮士断腕”为哪般
- 康比特2023年上半年净利4501.12万 同比增加53.87%
- 郑州银建地产100%股权及相关债权挂牌转让,底价7953.76万元
- 富士x100值得买吗(富士x10怎么样)
- 江苏推动海洋产业高质量发展 助力海洋强省建设
家电
MegEngine 使用小技巧:Profiler使用手册
0.写在前面
“xx,R 那边反应多机训练速度慢,你看一下什么情况”
“xxx,为什么 MGE 更新之后,xxx 网络训练变慢了,你看一下”
(资料图片仅供参考)
这是组内日常对话
然后有人日常背锅
组员的状态是:提性能,提性能,还是 TMD 提性能
据不完全统计,有 80% 的性能问题其实是因为训练代码写的不够好,让 MGE 有力使不出来
包括但不限于以下情况
1)没开 fast_run
2)频繁使用 numpy 进行同步
3)没有用 make_allreduce_cb,让计算通信串行
4)。。。
次数多了,就发现这玩意太花时间了,而且每次的步骤都千篇一律,为啥一定要我来做,所以写这篇文章进行总结,方便大家也方便自己
1.Profiler 介绍
首先我们要认识 Profiler 这个东西
简单来说,Profiler 以时间轴的形式记录了所有算子的运行时间
通过 Profile 结果,我们可以很快的发现这段代码为什么跑的慢
是做了多余的工作?还是计算资源的浪费?或者是算子本身的性能很差,需要替换成别的算子
这是一个简单的 profile 结果展示
大部分情况下我们只关注 gpu thread,每一个 gpu thread 对应一个 cuda stream,上面都是运行在这个 cuda stream 上的算子
2.使用方式
PS:静态图的统计信息还不够完善(受到图优化影响),profile 结果相对动态图的不够友好
from megengine.utils.profiler import profile, Profiler # 装饰器写法@profile()def train_step(data, label, *, optimizer, gm, model) with gm: logits = model(data) loss = F.loss.cross_entropy(logits, label) gm.backward(loss) optimizer.step().clear_grad() return loss # with 写法# 训练过程中最好只有一个profiler实例,因为profiler会在析构时自动dump出结果,如果有多个实例的话每个iter都会dump,非常慢profiler = Profiler() def train_step(data, label, *, optimizer, gm, model) with profiler: with gm: logits = model(data) loss = F.loss.cross_entropy(logits, label) gm.backward(loss) optimizer.step().clear_grad() return loss
⚠️注意,profiler 默认会在析构的时候导出 profile 结果,也可以手动调用 profiler.dump 方法手动 dump
参数说明:
Profiler
的构造函数支持如下参数:
- path: profile 数据的存储路径,默认为当前路径下的profile文件夹.
- format: 输出数据的格式,默认为chrome_timeline.json,是 Chrome 支持的一种标准格式,以时间线的形式展现 profiling 结果. 可选项还有有 memory_flow.svg,以时间x地址空间的形式展示内存使用情况.
- formats: 若需要的输出格式不止一种,可以在 formats 参数里列出.
- sample_rate: 若该项不为零,则每隔 n 个 op 会统计一次显存信息,分析数据时可以绘制显存占用曲线,默认为 0.
- profile_device: 是否记录 gpu 耗时,默认为 True.
- with_scopes: 是否额外记录 functional/ tensor method 等 python API 对应的 scope, 默认为 False.
- with_backtrace: 是否记录 op/event 对应的 python 调用栈, 默认为 False, 开启会使记录数据文件体积变大.
scope 使用介绍
我们会自动在 module 的 forward 还有 backward 以及 step 步骤中加入 scope,scope 会在 host thread 上显示,能看出 op 属于哪一个 module 的什么阶段
也可以自己加上 scope
from megengine.utils.profiler import Profiler, scope def main() with Profiler(): x = Tensor(1) with scope("Add"): y = x+1 with scope("Mul"): z = x*3
默认情况下 profiler 只会记录 module forward, backward, step 三类 scope, 用户可以在构造 Profiler 对象时传入参数with_scopes = True
额外记录 functional
, tensor method
等 api
调用对应的 scope
。
开启 with_scopes
选项后额外记录了 BatchNorm2d Module
内部调用的 functional / tensor method API
调用 scope
开启 with_scopes 选项后额外记录了 backward scope, 该 scope 用于记录反向计算序列对应的前向算子, 可用于查找反向计算中有性能问题的算子是由哪种算子前向计算产生。下图 scope 表示 Broadcast, SetSubtensor 等算子是由 Subtensor 反向计算产生的。
3.可视化显示
推荐使用perfetto查看 profile 结果,也可以用 Chrome 开发者模式(F12)的 Performance 模块查看 timeline 格式文件,也可以用chrome://tracing/进行查看
以下介绍的都是基于 perfetto 的操作方式
1)统计
可以选中一段连续的时间段,查看这一个时间段的统计结果
下方会显示事件统计结果,可以看到事件实际占用时间(Wall duration)(可以结合总时间算出空闲时间),可以按照总占用时间排序,也可以按照平均时间排序
2)依赖关系
在 host thread上,op 会记录对应的 input和output 以及相应的依赖关系,可以依据箭头找到 input 依赖的上一个 op,也可以通过下方 flow event 点击移动到上一个或者下一个
我们还能找到 op 对应的 host 时间和 gpu 时间,点击 op 可以看到在不同 thread(cpu,gpu)占用的时间
3)查看显存使用, gpu 利用率等指标
profiler 除了记录时间算子执行时间外,还会记录一些与显存和性能相关的指标。gpu_usage_ratio 记录程序执行平均的 gpu 利用率(gpu 执行 kernel 时间占总时间的比例),gpu_usage_ratio 低说明程序 host 侧是瓶颈 。gpux:x alloc_mem_value 记录了gpux 显存使用量随时间的变化的曲线, 需要把 sample_rate 设置为大于 0 的整数(sampe rate 代表每隔 n 个 op 记录一次显存使用量)
4)放大缩小
可以拖动上方时间轴的起始和结束点来修改起始点和结束点,也可以通过放大缩小手势进行放大缩小
中间竖线上面的灰色小方块就是可以拖动的点
4.常见调试技巧(附使用例子
1)多余计算
yolox 例子,forward,backward,step 运行完成了,但是后面多出了很多的 reshape 操作(一般认为 reshape 无实际计算,所以基本看作是浪费
找到原因后结果如下(5s->1.3s)
2)计算通信串行(请认准 make_allreduce_cb)
allreduce 通信在 gpu0:1,如果发现通信在 gpu0:0 那就是用错了
3)host 性能慢,gpu 利用率不高
cpu 时间和 gpu 时间基本上一致,很可疑
放大仔细看,gpu 运行时间中有很多空隙,而且点击对应 op 查看依赖关系,可以看出中间的空隙时间是在等待 host 进行 launch cuda kernel
4)使用 backtrace 记录功能查找性能瓶颈部分对应源码
上述示例介绍了如何从 profile 结果中发现性能异常的部分, profiler 提供了 backtrace 调用栈记录功能, 方便用户找到异常部分对应的训练代码源码。backtrace 记录会记录算子的 dispatch/kernel 执行,TensorWaitProperty 等事件对应的 python 调用栈。
可以在构造 Profiler 对象时通过传入 with_backtrace = True 开启调用栈记录功能。 开启该选项后 profiler 保存数据文件体积会增大。
用户可以在 perfetto UI 界面上点击 op 查看其对应的源码。
下图 profiler 结果中 CompiledOp[IOU] 算子执行时间较长, 通过记录的 backtrace 可以发现该算子是检测模型计算 loss 部分调用的。
下图中 interpreter 线程中某个 TensorWaitProp 占用时间很长,可能会拖慢 host 执行速度,导致 gpu 空闲。
(TensorWaitProp 可能是由 tensor.shape, tensor.numpy() 等方法调用产生的, 会让 host 侧等待 device 执行,以获取 Tensor 的 value 或 shape 属性)
通过调用栈可以发现该事件是由 basedet 检测模型 get_ground_truth 方法中的某个 getitem产生的 ( __getitem__中使用了 tensor shape 属性触发了 host 侧的 sync)。
附
更多 MegEngine 信息获取,您可以:查看文档和GitHub 项目,或加入 MegEngine 用户交流 QQ 群:1029741705。欢迎参与 MegEngine 社区贡献,成为Awesome MegEngineer,荣誉证书、定制礼品享不停。
关键词:
-
node18 vue2启动报错 error:0308010C:digital envelope routines::unsupported
出现原因貌似是因为是因为node17版本开始发布的OpenSSL3 0,而OpenS
来源: MegEngine 使用小技巧:Profiler使用手册
node18 vue2启动报错 error:0308010C:digital envelope routines::unsupported
南航上半年成绩单,还透露了厦航是赚是亏
沪光股份最新公告:上半年净亏损4102.03万元
速达股份IPO铩羽两年再闯关 最重要股东郑煤机“壮士断腕”为哪般
奚梦瑶首晒女儿正面照,Romee小脸圆润超可爱,五官像父亲何猷君
马鞍山:构筑招大引强“磁力场”集聚发展新动能
“把最美的中国讲给世界听”
黄渤:暑期档最大的赢家是中国电影
8家IPO企业过会后终止注册
科研人员提出新的基因剂量敏感性度量
网络电视哪个好用一点(网络电视哪个好用)
美媒曝美官员评价乌军表现:苏联式战术太消耗炮弹
赛尔号利兹几级进化(赛尔号利兹)
二十四史是我国古代二十四史(我国古代二十四史的第一部是什么)
cad2012总是安装失败_cad2012安装失败原因
2023港姐亚军王怡然谈父母疑欠款逃跑情绪失控,一度中止访问指父母感内疚
拿走近3亿后 沈亚楠正式退股!
蔚来汽车最新财报:2023年第二季度营收87.717亿元人民币
魔兽世界流沙外套同款 魔兽世界流沙外套搭配
康比特2023年上半年净利4501.12万 同比增加53.87%
新兴党建“微触角”暖心服务“零距离” 兰州万象城新兴领域区域性党群活动服务中心开展急救培训和健康义诊活动
提前30分钟出门!今日亚运会“赛时一天”演练举行
8月30日华东地区对二甲苯装置动态
圆满完成!
中美建立“新沟通渠道”,释放哪些重要信号?
专家:稳汇率信号明显,基本面支撑有望增强
广东怎么做到家门口有“医”靠?|医线观察
纽约上百民众抗议政府处理移民危机不力
郑州银建地产100%股权及相关债权挂牌转让,底价7953.76万元
一加Ace2 Pro人气火爆,登顶京东手机排行榜,连续三天蝉联榜首
郑州市12345热线上榜2023年度十佳市政及公共事业热线
泽连斯基:美欧若提供资金支持 乌就举行战时选举
富士x100值得买吗(富士x10怎么样)
赚了540天钱!爱奇艺,还缺地气
澳媒:北约染指东亚是为美国火中取栗
【金融街发布】人民银行马贱阳:抓紧研究制定金融支持民营经济发展政策举措 持续提高民营企业贷款占比
成体小花助力,中国艺术体操队世锦赛摘金夺银创造历史!
江苏推动海洋产业高质量发展 助力海洋强省建设
东莞石碣16个优质企业项目集中签约
服贸会北京丰台打出“数字金融+文旅产业”双名片
冠城大通:8月29日融券卖出200股,融资融券余额2.33亿元
中国医药:8月29日融券卖出27.05万股,融资融券余额5.29亿元
今日草食男子是什么意思(什么是草食男什么是干物女)
招商银行:8月29日融券净卖出8.55万股,连续3日累计净卖出56.41万股
中远海能:8月29日融资买入1125.78万元,融资融券余额3.31亿元
【机构调研记录】泉果基金调研安科瑞、许继电气
黑龙江五常:灾后大米生产重启 洪灾将致新米减产 存粮可保市场稳定
搭建产销对接粮食交易平台
聚焦“减盐战略”,加加食品利润同比增长23.48%
边框仅1.46mm!真我GT5手机新品开售
多部门共同发力 农产品“上行”和工业品“下行”有哪些新利好?
iPhone 15外观无大区别,快充功率暴涨
贵阳市人大常委会原副主任朱丽霞接受审查调查
业绩稳健增长,期待需求恢复
重要通知!今晚,油价调整……
京东拉美综合国家馆亮相京东“拉美日”活动
恒丰纸业:拟投资新建年产4万吨绿色低定量特种涂布纸项目
创维汽车否认销售不实信息 将追究法律责任
快充与慢充电池寿命差别不大:快充电伤电池
13499元起!惠普推出Envy 16 2023款笔记本电脑
天合光能上半年净利同比增近180% 组件出货量约27GW
东华科技08月29日获深股通增持14.34万股
嘉华国际:会审慎寻找收购机会
晒业绩扩产能投新品 一批公司预喜三季报
国际医学08月29日获深股通增持77.13万股
这4种情况下给猪并圈,不用担心猪打架!
新一代自航自升式风电安装船离开南通前往青岛
日知名艺人经纪公司杰尼斯承认:已故前社长喜多川性侵艺人持续40年
诺兰导演巨作《奥本海默》正式登陆中国内地
意外之喜女友心意以外高中锁定活动如何处理
重磅信号:一晚30多家公司叫停减持,回购队伍继续壮大!A股真的变了?
一加 Ace 2 Pro 原神派蒙主题礼盒今日 10 点开售,售价 3599 元
美国宣布再向乌克兰提供价值2.5亿美元军事援助
感谢中国篮球“易”路有你!谢谢你,易建联!中国男篮最后一个巨星退役!
车险意外险哪些不理赔范围?好处有哪些?
南欧国家力推太阳能发电
“一经售出,概不退换?”演出票务“霸道”条款惹争议
抓紧买人!曼联与库库达成个人协议 正与切尔西谈判
二次元是什么意思三次元是什么意思 二次元是什么
31省份7月CPI出炉:22地同比下降,4地“四连降”
闪耀优俊少女兑换码大全 国服最新礼包cdk兑换码领取[多图]
三大股指震荡走低沪指跌0.4% 猪肉股表现活跃
64家中药上市公司发布上半年成绩单近八成营收净利双增长
销售量、销售额均增长19%,空调引领家电业增长
“小萌新”上好第一课
枪支暴力难平息,种族歧视更严重,“我有一个梦想”在美仍是梦!
舞台艺术送基层 好戏送到家门口
中纪委再公布5名“内鬼”:海南省委巡视组原组长韩太光等被查
美国油气巨头:全球无法在2050年前将变暖幅度控制在2度以内
中国石油长庆油田天然气累产突破6000亿立方米
开学家长也焦虑?专家教你4招缓解
竹的诗句赋予人的品格 竹的诗句
封面有数丨暑期旅游市场全面增长 成都天府机场排名“繁忙机场”前列
在扬全国、省人大代表 开展专题调研活动
浙江义乌开通首条国内全货机航线 预计年运量超四千吨
《机动都市阿尔法》机甲丧钟
不要玩弄趋势,你必须不惜一切代价忠于自己
需求释放支撑业绩走强 11家光伏组件公司上半年净利润同比增长
补钙虾皮详细做法