成人精品水蜜桃_成人在线丰满少妇av_91亚洲国产高清_欧美日韩免费区域视频在线观看

首頁(yè) 娛樂(lè) > 正文

MegEngine 使用小技巧:Profiler使用手冊(cè)

0.寫(xiě)在前面

“xx,R 那邊反應(yīng)多機(jī)訓(xùn)練速度慢,你看一下什么情況”

“xxx,為什么 MGE 更新之后,xxx 網(wǎng)絡(luò)訓(xùn)練變慢了,你看一下”

這是組內(nèi)日常對(duì)話


(資料圖)

然后有人日常背鍋

組員的狀態(tài)是:提性能,提性能,還是 TMD 提性能

據(jù)不完全統(tǒng)計(jì),有 80% 的性能問(wèn)題其實(shí)是因?yàn)橛?xùn)練代碼寫(xiě)的不夠好,讓 MGE 有力使不出來(lái)

包括但不限于以下情況

1)沒(méi)開(kāi) fast_run

2)頻繁使用 numpy 進(jìn)行同步

3)沒(méi)有用 make_allreduce_cb,讓計(jì)算通信串行

4)。。。

次數(shù)多了,就發(fā)現(xiàn)這玩意太花時(shí)間了,而且每次的步驟都千篇一律,為啥一定要我來(lái)做,所以寫(xiě)這篇文章進(jìn)行總結(jié),方便大家也方便自己

1.Profiler 介紹

首先我們要認(rèn)識(shí) Profiler 這個(gè)東西

簡(jiǎn)單來(lái)說(shuō),Profiler 以時(shí)間軸的形式記錄了所有算子的運(yùn)行時(shí)間

通過(guò) Profile 結(jié)果,我們可以很快的發(fā)現(xiàn)這段代碼為什么跑的慢

是做了多余的工作?還是計(jì)算資源的浪費(fèi)?或者是算子本身的性能很差,需要替換成別的算子

這是一個(gè)簡(jiǎn)單的 profile 結(jié)果展示

大部分情況下我們只關(guān)注 gpu thread,每一個(gè) gpu thread 對(duì)應(yīng)一個(gè) cuda stream,上面都是運(yùn)行在這個(gè) cuda stream 上的算子

2.使用方式

PS:靜態(tài)圖的統(tǒng)計(jì)信息還不夠完善(受到圖優(yōu)化影響),profile 結(jié)果相對(duì)動(dòng)態(tài)圖的不夠友好

from megengine.utils.profiler import profile, Profiler # 裝飾器寫(xiě)法@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 寫(xiě)法# 訓(xùn)練過(guò)程中最好只有一個(gè)profiler實(shí)例,因?yàn)閜rofiler會(huì)在析構(gòu)時(shí)自動(dòng)dump出結(jié)果,如果有多個(gè)實(shí)例的話每個(gè)iter都會(huì)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 默認(rèn)會(huì)在析構(gòu)的時(shí)候?qū)С?profile 結(jié)果,也可以手動(dòng)調(diào)用 profiler.dump 方法手動(dòng) dump

參數(shù)說(shuō)明:

Profiler的構(gòu)造函數(shù)支持如下參數(shù):

  • path: profile 數(shù)據(jù)的存儲(chǔ)路徑,默認(rèn)為當(dāng)前路徑下的profile文件夾.
  • format: 輸出數(shù)據(jù)的格式,默認(rèn)為chrome_timeline.json,是 Chrome 支持的一種標(biāo)準(zhǔn)格式,以時(shí)間線的形式展現(xiàn) profiling 結(jié)果. 可選項(xiàng)還有有 memory_flow.svg,以時(shí)間x地址空間的形式展示內(nèi)存使用情況.
  • formats: 若需要的輸出格式不止一種,可以在 formats 參數(shù)里列出.
  • sample_rate: 若該項(xiàng)不為零,則每隔 n 個(gè) op 會(huì)統(tǒng)計(jì)一次顯存信息,分析數(shù)據(jù)時(shí)可以繪制顯存占用曲線,默認(rèn)為 0.
  • profile_device: 是否記錄 gpu 耗時(shí),默認(rèn)為 True.
  • with_scopes: 是否額外記錄 functional/ tensor method 等 python API 對(duì)應(yīng)的 scope, 默認(rèn)為 False.
  • with_backtrace: 是否記錄 op/event 對(duì)應(yīng)的 python 調(diào)用棧, 默認(rèn)為 False, 開(kāi)啟會(huì)使記錄數(shù)據(jù)文件體積變大.

scope 使用介紹

我們會(huì)自動(dòng)在 module 的 forward 還有 backward 以及 step 步驟中加入 scope,scope 會(huì)在 host thread 上顯示,能看出 op 屬于哪一個(gè) 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

默認(rèn)情況下 profiler 只會(huì)記錄 module forward, backward, step 三類 scope, 用戶可以在構(gòu)造 Profiler 對(duì)象時(shí)傳入?yún)?shù)with_scopes = True額外記錄 functionaltensor methodapi調(diào)用對(duì)應(yīng)的 scope

開(kāi)啟 with_scopes選項(xiàng)后額外記錄了 BatchNorm2d Module內(nèi)部調(diào)用的 functional / tensor method API調(diào)用 scope

開(kāi)啟 with_scopes 選項(xiàng)后額外記錄了 backward scope, 該 scope 用于記錄反向計(jì)算序列對(duì)應(yīng)的前向算子, 可用于查找反向計(jì)算中有性能問(wèn)題的算子是由哪種算子前向計(jì)算產(chǎn)生。下圖 scope 表示 Broadcast, SetSubtensor 等算子是由 Subtensor 反向計(jì)算產(chǎn)生的。

3.可視化顯示

推薦使用perfetto查看 profile 結(jié)果,也可以用 Chrome 開(kāi)發(fā)者模式(F12)的 Performance 模塊查看 timeline 格式文件,也可以用chrome://tracing/進(jìn)行查看

以下介紹的都是基于 perfetto 的操作方式

1)統(tǒng)計(jì)

可以選中一段連續(xù)的時(shí)間段,查看這一個(gè)時(shí)間段的統(tǒng)計(jì)結(jié)果

下方會(huì)顯示事件統(tǒng)計(jì)結(jié)果,可以看到事件實(shí)際占用時(shí)間(Wall duration)(可以結(jié)合總時(shí)間算出空閑時(shí)間),可以按照總占用時(shí)間排序,也可以按照平均時(shí)間排序

2)依賴關(guān)系

在 host thread上,op 會(huì)記錄對(duì)應(yīng)的 input和output 以及相應(yīng)的依賴關(guān)系,可以依據(jù)箭頭找到 input 依賴的上一個(gè) op,也可以通過(guò)下方 flow event 點(diǎn)擊移動(dòng)到上一個(gè)或者下一個(gè)

我們還能找到 op 對(duì)應(yīng)的 host 時(shí)間和 gpu 時(shí)間,點(diǎn)擊 op 可以看到在不同 thread(cpu,gpu)占用的時(shí)間

3)查看顯存使用, gpu 利用率等指標(biāo)

profiler 除了記錄時(shí)間算子執(zhí)行時(shí)間外,還會(huì)記錄一些與顯存和性能相關(guān)的指標(biāo)。gpu_usage_ratio 記錄程序執(zhí)行平均的 gpu 利用率(gpu 執(zhí)行 kernel 時(shí)間占總時(shí)間的比例),gpu_usage_ratio 低說(shuō)明程序 host 側(cè)是瓶頸 。gpux:x alloc_mem_value 記錄了gpux 顯存使用量隨時(shí)間的變化的曲線, 需要把 sample_rate 設(shè)置為大于 0 的整數(shù)(sampe rate 代表每隔 n 個(gè) op 記錄一次顯存使用量)

4)放大縮小

可以拖動(dòng)上方時(shí)間軸的起始和結(jié)束點(diǎn)來(lái)修改起始點(diǎn)和結(jié)束點(diǎn),也可以通過(guò)放大縮小手勢(shì)進(jìn)行放大縮小

中間豎線上面的灰色小方塊就是可以拖動(dòng)的點(diǎn)

4.常見(jiàn)調(diào)試技巧(附使用例子

1)多余計(jì)算

yolox 例子,forward,backward,step 運(yùn)行完成了,但是后面多出了很多的 reshape 操作(一般認(rèn)為 reshape 無(wú)實(shí)際計(jì)算,所以基本看作是浪費(fèi)

找到原因后結(jié)果如下(5s->1.3s)

2)計(jì)算通信串行(請(qǐng)認(rèn)準(zhǔn) make_allreduce_cb)

allreduce 通信在 gpu0:1,如果發(fā)現(xiàn)通信在 gpu0:0 那就是用錯(cuò)了

3)host 性能慢,gpu 利用率不高

cpu 時(shí)間和 gpu 時(shí)間基本上一致,很可疑

放大仔細(xì)看,gpu 運(yùn)行時(shí)間中有很多空隙,而且點(diǎn)擊對(duì)應(yīng) op 查看依賴關(guān)系,可以看出中間的空隙時(shí)間是在等待 host 進(jìn)行 launch cuda kernel

4)使用 backtrace 記錄功能查找性能瓶頸部分對(duì)應(yīng)源碼

上述示例介紹了如何從 profile 結(jié)果中發(fā)現(xiàn)性能異常的部分, profiler 提供了 backtrace 調(diào)用棧記錄功能, 方便用戶找到異常部分對(duì)應(yīng)的訓(xùn)練代碼源碼。backtrace 記錄會(huì)記錄算子的 dispatch/kernel 執(zhí)行,TensorWaitProperty 等事件對(duì)應(yīng)的 python 調(diào)用棧。

可以在構(gòu)造 Profiler 對(duì)象時(shí)通過(guò)傳入 with_backtrace = True 開(kāi)啟調(diào)用棧記錄功能。 開(kāi)啟該選項(xiàng)后 profiler 保存數(shù)據(jù)文件體積會(huì)增大。

用戶可以在 perfetto UI 界面上點(diǎn)擊 op 查看其對(duì)應(yīng)的源碼。

下圖 profiler 結(jié)果中 CompiledOp[IOU] 算子執(zhí)行時(shí)間較長(zhǎng), 通過(guò)記錄的 backtrace 可以發(fā)現(xiàn)該算子是檢測(cè)模型計(jì)算 loss 部分調(diào)用的。

下圖中 interpreter 線程中某個(gè) TensorWaitProp 占用時(shí)間很長(zhǎng),可能會(huì)拖慢 host 執(zhí)行速度,導(dǎo)致 gpu 空閑。

(TensorWaitProp 可能是由 tensor.shape, tensor.numpy() 等方法調(diào)用產(chǎn)生的, 會(huì)讓 host 側(cè)等待 device 執(zhí)行,以獲取 Tensor 的 value 或 shape 屬性)

通過(guò)調(diào)用棧可以發(fā)現(xiàn)該事件是由 basedet 檢測(cè)模型 get_ground_truth 方法中的某個(gè) getitem產(chǎn)生的 ( __getitem__中使用了 tensor shape 屬性觸發(fā)了 host 側(cè)的 sync)。

更多 MegEngine 信息獲取,您可以:查看文檔和GitHub 項(xiàng)目,或加入 MegEngine 用戶交流 QQ 群:1029741705。歡迎參與 MegEngine 社區(qū)貢獻(xiàn),成為Awesome MegEngineer,榮譽(yù)證書(shū)、定制禮品享不停。

關(guān)鍵詞:

最近更新

關(guān)于本站 管理團(tuán)隊(duì) 版權(quán)申明 網(wǎng)站地圖 聯(lián)系合作 招聘信息

Copyright © 2005-2023 創(chuàng)投網(wǎng) - m.7778890.com All rights reserved
聯(lián)系我們:39 60 29 14 2@qq.com
皖I(lǐng)CP備2022009963號(hào)-3

成人精品水蜜桃_成人在线丰满少妇av_91亚洲国产高清_欧美日韩免费区域视频在线观看
成人av免费在线播放| 久久综合九色综合97_久久久| 亚洲免费在线视频一区 二区| 国产91精品一区二区麻豆网站| 色综合激情五月| 亚洲国产欧美在线| 性色av一区二区怡红| 亚洲日本丝袜连裤袜办公室| 日韩三级在线免费观看| 国产精品一二三区| 欧美在线一二三| 久久精品国产秦先生| 久久综合图片| 美女久久久精品| 欧美色图一区二区三区| 久久不见久久见中文字幕免费| 欧洲人成人精品| 六月丁香综合在线视频| 色综合天天天天做夜夜夜夜做| 亚洲国产网站| 日韩av中文在线观看| 欧美日韩另类国产亚洲欧美一级| 久久精品久久99精品久久| 欧美日韩免费观看一区二区三区| 国产精品一区二区三区乱码| 日韩视频国产视频| 欧美日韩一区二| 亚洲一级不卡视频| 欧美亚洲动漫另类| 成人av在线影院| 一区二区三区欧美激情| 在线观看www91| 色综合久久综合中文综合网| 一区二区三区日本| 7777精品久久久大香线蕉| 国产精品草草| 蜜臀av一区二区| 中文字幕中文字幕一区| 精品视频色一区| 国产主播一区| 午夜精品福利一区二区蜜股av | 91精品国产欧美日韩| 欧美在线视频二区| 久久精品国产精品亚洲精品| 国产精品麻豆99久久久久久| 在线观看免费视频综合| 91视视频在线直接观看在线看网页在线看 | 日韩视频在线播放| 99精品国产一区二区三区不卡| 日韩极品在线观看| 国产精品日产欧美久久久久| 欧美日韩视频在线观看一区二区三区 | 亚洲国产成人av网| 欧美日韩一区久久| 亚洲性感激情| 国产精品一区专区| 亚洲人成在线观看一区二区| 欧美午夜理伦三级在线观看| 亚洲少妇诱惑| 99成人精品| 亚洲欧美一区在线| 91蜜桃在线免费视频| 国产美女视频一区| 国产精品一区二区黑丝| 一区二区三区国产豹纹内裤在线| 欧美一区二区人人喊爽| 日本aⅴ亚洲精品中文乱码| 亚洲一区二区在线播放相泽| 亚洲男人的天堂在线观看| 国产女同互慰高潮91漫画| 日本一区二区三区免费乱视频| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩欧美亚洲国产另类| 欧美剧情片在线观看| 欧美日韩精品一区二区三区蜜桃| 欧美久久一二区| 欧美一级久久久久久久大片| 日韩欧美www| 国产精品国模大尺度视频| 国产精品国产三级国产有无不卡 | 精品成人在线观看| 亚洲色图在线看| 国产一区二区精品久久99| 国内精品福利| 欧美三级三级三级爽爽爽| 久久久久久免费毛片精品| 国产亚洲福利社区一区| 婷婷久久综合九色综合伊人色| www.日本不卡| 欧美私人免费视频| 国产精品福利一区| 国产自产2019最新不卡| 精品动漫av| 欧美精品一区二区三区很污很色的| 亚洲午夜精品久久久久久久久| 粉嫩蜜臀av国产精品网站| 国产精品试看| 自拍偷拍亚洲综合| 91毛片在线观看| 欧美一区二区福利在线| 秋霞国产午夜精品免费视频| 亚洲视频福利| 国产日韩精品一区二区三区在线| 国产一区二区三区观看| 久久久久综合| 午夜视频在线观看一区二区 | 欧美日韩一区二区高清| 精品国产91洋老外米糕| 国产综合久久久久久久久久久久| 国产精品综合色区在线观看| 国产欧美日韩视频一区二区| 成人av在线看| 日韩欧美亚洲另类制服综合在线| 免费人成黄页网站在线一区二区| 在线不卡欧美| 亚洲一区二区在线免费观看视频| 欧美久久影院| 日韩精品免费视频人成| 综合激情成人伊人| 制服丝袜亚洲网站| 欧美激情一区二区三区蜜桃视频| 九九九久久久精品| 国产亚洲一二三区| 色综合久久99| 欧美精品网站| 久久激情五月激情| 久久综合九色综合欧美98| 亚洲bt欧美bt精品777| 蜜桃av久久久亚洲精品| 亚洲国产精品久久久久婷婷884| 妖精视频成人观看www| 亚洲综合色网站| 欧美亚洲一区三区| 成人97人人超碰人人99| 国产精品久久国产精麻豆99网站| 亚洲高清电影| 五月天网站亚洲| 久久综合九色综合欧美就去吻| 欧美日一区二区在线观看| 亚洲精品欧美在线| 777午夜精品免费视频| 女人色偷偷aa久久天堂| 亚洲欧洲综合另类在线| 91精品国产色综合久久不卡蜜臀| 极品日韩av| 成人午夜看片网址| 日韩—二三区免费观看av| 国产亚洲一二三区| 在线观看一区二区视频| 99国产精品久久久久久久久久久| 首页国产欧美日韩丝袜| 中文字幕欧美激情一区| 91精品国产品国语在线不卡| 99日韩精品| 欧美啪啪一区| 成人国产一区二区三区精品| 奇米777欧美一区二区| 国产精品久久久久婷婷| 久久久一区二区三区捆绑**| 欧美性极品少妇| 色婷婷av一区二区三区软件| 欧美视频完全免费看| 亚洲高清精品中出| 92国产精品观看| 成人高清视频免费观看| 成人黄页在线观看| 国产99精品国产| 午夜欧美一区二区三区在线播放| 欧美亚洲禁片免费| 欧美大香线蕉线伊人久久国产精品| jlzzjlzz欧美大全| 激情六月综合| 欧美老年两性高潮| 国产午夜精品一区二区三区嫩草 | 精品播放一区二区| 色狠狠桃花综合| 久久视频一区| 欧美日韩国产片| 欧美一卡二卡在线| 精品av综合导航| 国产精品久久久久婷婷二区次| 国产精品亲子伦对白| 亚洲乱码国产乱码精品精的特点| 欧美极品少妇xxxxⅹ高跟鞋 | 国产精品国产三级国产普通话蜜臀 | 欧美色涩在线第一页| 久久精品国产综合精品| 久久亚洲高清| 欧美精品一区二区三区一线天视频 | 久久99国产精品久久99 | 一区二区三区国产精华| 日本在线不卡一区| 9l国产精品久久久久麻豆| 99国产精品久久久久老师| 欧美日韩亚洲综合| 亚洲欧洲另类国产综合| 美女免费视频一区二区| 欧美影院一区| 91黄视频在线观看| 综合在线观看色|