色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

GPU利用率低常見(jiàn)原因分析及優(yōu)化

3D視覺(jué)工坊 ? 來(lái)源:小白學(xué)視覺(jué) ? 2023-04-04 09:52 ? 次閱讀

一、GPU 利用率的定義

本文的 GPU 利用率主要指 GPU 在時(shí)間片上的利用率,即通過(guò) nvidia-smi 顯示的 GPU-util 這個(gè)指標(biāo)。統(tǒng)計(jì)方式為:在采樣周期內(nèi),GPU 上面有 kernel 執(zhí)行的時(shí)間百分比。

二、GPU 利用率低的本質(zhì)

常見(jiàn) GPU 任務(wù)運(yùn)行流程圖如下:

9462a4b0-d274-11ed-bfe3-dac502259ad0.jpg

如上圖所示,GPU 任務(wù)會(huì)交替的使用 CPU 和 GPU 進(jìn)行計(jì)算,當(dāng) CPU 計(jì)算成為瓶頸時(shí),就會(huì)出現(xiàn) GPU 等待的問(wèn)題,GPU 空跑那利用率就低了。那么優(yōu)化的方向就是縮短一切使用 CPU 計(jì)算環(huán)節(jié)的耗時(shí),減少 CPU 計(jì)算對(duì) GPU 的阻塞情況。常見(jiàn)的 CPU 計(jì)算操作如下:

數(shù)據(jù)加載

數(shù)據(jù)預(yù)處理

模型保存

loss 計(jì)算

評(píng)估指標(biāo)計(jì)算

日志打印

指標(biāo)上報(bào)

進(jìn)度上報(bào)

三、常見(jiàn) GPU 利用率低原因分析

1、數(shù)據(jù)加載相關(guān)

1)存儲(chǔ)和計(jì)算跨城了,跨城加載數(shù)據(jù)太慢導(dǎo)致 GPU 利用率低

說(shuō)明:例如數(shù)據(jù)存儲(chǔ)在“深圳 ceph”,但是 GPU 計(jì)算集群在“重慶”,那就涉及跨城使用了,影響很大。

優(yōu)化:要么遷移數(shù)據(jù),要么更換計(jì)算資源,確保存儲(chǔ)及計(jì)算是同城的。

2)存儲(chǔ)介質(zhì)性能太差

說(shuō)明:不同存儲(chǔ)介質(zhì)讀寫(xiě)性能比較:本機(jī) SSD > ceph > cfs-1.5 > hdfs > mdfs

優(yōu)化:將數(shù)據(jù)先同步到本機(jī) SSD,然后讀本機(jī) SSD 進(jìn)行訓(xùn)練。本機(jī) SSD 盤(pán)為“/dockerdata”,可先將其他介質(zhì)下的數(shù)據(jù)同步到此盤(pán)下進(jìn)行測(cè)試,排除存儲(chǔ)介質(zhì)的影響。

3)小文件太多,導(dǎo)致文件 io 耗時(shí)太長(zhǎng)

說(shuō)明:多個(gè)小文件不是連續(xù)的存儲(chǔ),讀取會(huì)浪費(fèi)很多時(shí)間在尋道上

優(yōu)化:將數(shù)據(jù)打包成一個(gè)大的文件,比如將許多圖片文件轉(zhuǎn)成一個(gè) hdf5/pth/lmdb/TFRecord 等大文件

其他格式轉(zhuǎn)換方式請(qǐng)自行谷歌

4)未啟用多進(jìn)程并行讀取數(shù)據(jù)

說(shuō)明:未設(shè)置 num_workers 等參數(shù)或者設(shè)置的不合理,導(dǎo)致 cpu 性能沒(méi)有跑起來(lái),從而成為瓶頸,卡住 GPU

優(yōu)化:設(shè)置 torch.utils.data.DataLoader 方法的 num_workers 參數(shù)、tf.data.TFRecordDataset 方法的 num_parallel_reads 參數(shù)或者 tf.data.Dataset.map 的 num_parallel_calls 參數(shù)。

5)未啟用提前加載機(jī)制來(lái)實(shí)現(xiàn) CPU 和 GPU 的并行

說(shuō)明:未設(shè)置 prefetch_factor 等參數(shù)或者設(shè)置的不合理,導(dǎo)致 CPU 與 GPU 在時(shí)間上串行,CPU 運(yùn)行時(shí) GPU 利用率直接掉 0

優(yōu)化:設(shè)置 torch.utils.data.DataLoader 方法的 prefetch_factor 參數(shù) 或者 tf.data.Dataset.prefetch()方法。prefetch_factor 表示每個(gè) worker 提前加載的 sample 數(shù)量 (使用該參數(shù)需升級(jí)到 pytorch1.7 及以上),Dataset.prefetch()方法的參數(shù) buffer_size 一般設(shè)置為:tf.data.experimental.AUTOTUNE,從而由 TensorFlow 自動(dòng)選擇合適的數(shù)值。

6)未設(shè)置共享內(nèi)存 pin_memory

說(shuō)明:未設(shè)置 torch.utils.data.DataLoader 方法的 pin_memory 或者設(shè)置成 False,則數(shù)據(jù)需從 CPU 傳入到緩存 RAM 里面,再給傳輸?shù)?GPU 上

優(yōu)化:如果內(nèi)存比較富裕,可以設(shè)置 pin_memory=True,直接將數(shù)據(jù)映射到 GPU 的相關(guān)內(nèi)存塊上,省掉一點(diǎn)數(shù)據(jù)傳輸時(shí)間

2、數(shù)據(jù)預(yù)處理相關(guān)

1)數(shù)據(jù)預(yù)處理邏輯太復(fù)雜

說(shuō)明:數(shù)據(jù)預(yù)處理部分超過(guò)一個(gè) for 循環(huán)的,都不應(yīng)該和 GPU 訓(xùn)練部分放到一起

優(yōu)化:

a、設(shè)置 tf.data.Dataset.map 的 num_parallel_calls 參數(shù),提高并行度,一般設(shè)置為 tf.data.experimental.AUTOTUNE,可讓 TensorFlow 自動(dòng)選擇合適的數(shù)值。

b、將部分?jǐn)?shù)據(jù)預(yù)處理步驟挪出訓(xùn)練任務(wù),例如對(duì)圖片的歸一化等操作,提前開(kāi)啟一個(gè) spark 分布式任務(wù)或者 cpu 任務(wù)處理好,再進(jìn)行訓(xùn)練。

c、提前將預(yù)處理部分需要用到的配置文件等信息加載到內(nèi)存中,不要每次計(jì)算的時(shí)候再去讀取。

d、關(guān)于查詢操作,多使用 dict 加速查詢操作;減少 for、while 循環(huán),降低預(yù)處理復(fù)雜度。

2)利用 GPU 進(jìn)行數(shù)據(jù)預(yù)處理 -- Nvidia DALI

說(shuō)明:Nvidia DALI 是一個(gè)專(zhuān)門(mén)用于加速數(shù)據(jù)預(yù)處理過(guò)程的庫(kù),既支持 GPU 又支持 CPU

優(yōu)化:采用 DALI,將基于 CPU 的數(shù)據(jù)預(yù)處理流程改造成用 GPU 來(lái)計(jì)算

DALI 文檔如下:https://zhuanlan.zhihu.com/p/105056158

3、模型保存相關(guān)

1)模型保存太頻繁

說(shuō)明:模型保存為 CPU 操作,太頻繁容易導(dǎo)致 GPU 等待

優(yōu)化:減少保存模型(checkpoint)的頻率

4、指標(biāo)相關(guān)

1)loss 計(jì)算太復(fù)雜

說(shuō)明:含有 for 循環(huán)的復(fù)雜 loss 計(jì)算,導(dǎo)致 CPU 計(jì)算時(shí)間太長(zhǎng)從而阻塞 GPU

優(yōu)化:該用低復(fù)雜度的 loss 或者使用多進(jìn)程或多線程進(jìn)行加速

2)指標(biāo)上報(bào)太頻繁

說(shuō)明:指標(biāo)上報(bào)操作太頻繁,CPU 和 GPU 頻繁切換導(dǎo)致 GPU 利用率低

優(yōu)化:改成抽樣上報(bào),例如每 100 個(gè) step 上報(bào)一次

5、日志相關(guān)

1)日志打印太頻繁

說(shuō)明:日志打印操作太頻繁,CPU 和 GPU 頻繁切換導(dǎo)致 GPU 利用率低

優(yōu)化:改成抽樣打印,例如每 100 個(gè) step 打印一次

四、常見(jiàn)數(shù)據(jù)加載方法說(shuō)明

1、pytorch 的 torch.utils.data.DataLoader

DataLoader(dataset,batch_size=1,shuffle=False,sampler=None,
batch_sampler=None,num_workers=0,collate_fn=None,
pin_memory=False,drop_last=False,timeout=0,
worker_init_fn=None,*,prefetch_factor=2,
persistent_workers=False)
94795ba6-d274-11ed-bfe3-dac502259ad0.jpg

從參數(shù)定義中,我們可以看到 DataLoader 主要支持以下幾個(gè)功能:

支持加載 map-style 和 iterable-style 的 dataset,主要涉及到的參數(shù)是 dataset

自定義數(shù)據(jù)加載順序,主要涉及到的參數(shù)有 shuffle, sampler, batch_sampler, collate_fn

自動(dòng)把數(shù)據(jù)整理成 batch 序列,主要涉及到的參數(shù)有 batch_size, batch_sampler, collate_fn, drop_last

單進(jìn)程和多進(jìn)程的數(shù)據(jù)加載,主要涉及到的參數(shù)有 num_workers, worker_init_fn

自動(dòng)進(jìn)行鎖頁(yè)內(nèi)存讀取 (memory pinning),主要涉及到的參數(shù) pin_memory

支持?jǐn)?shù)據(jù)預(yù)加載,主要涉及的參數(shù) prefetch_factor

參考文檔:https://pytorch.org/docs/stable/data.html

2、tensorflow 的 tf.data.Dataset

ds_train = tf.data.Dataset.from_tensor_slices((x,y))
    .shuffle(5000)
    .batch(batchs)
    .map(preprocess,num_parallel_calls=tf.data.experimental.AUTOTUNE)
    .prefetch(tf.data.experimental.AUTOTUNE)

Dataset.prefetch(): 可以讓數(shù)據(jù)集對(duì)象 Dataset 在 ? 訓(xùn)練時(shí)預(yù)取出若干個(gè)元素,使得在 GPU 訓(xùn)練的同時(shí) CPU 可以準(zhǔn)備數(shù)據(jù),提升訓(xùn)練流程的效率

Dataset.map(f): 轉(zhuǎn)換函數(shù) f 映射到數(shù)據(jù)集每一個(gè)元素; 可以利用多 CPU 資源,充分利用多核心的優(yōu)勢(shì)對(duì)數(shù)據(jù)進(jìn)行并行化變換, num_parallel_calls 設(shè)置為 tf.data.experimental.AUTOTUNE 以讓 TensorFlow 自動(dòng)選擇合適的數(shù)值,數(shù)據(jù)轉(zhuǎn)換過(guò)程多進(jìn)程執(zhí)行,設(shè)置 num_parallel_calls 參數(shù)能發(fā)揮 cpu 多核心的優(yōu)勢(shì)

Dataset.shuffle(buffer_size): 將數(shù)據(jù)集打亂,取出前 buffer_size 個(gè)元素放入,并從緩沖區(qū)中隨機(jī)采樣,采樣后的數(shù)據(jù)用后續(xù)數(shù)據(jù)替換

Dataset.batch(batch_size):將數(shù)據(jù)集分成批次,即對(duì)每 batch_size 個(gè)元素,使用 tf.stack() 在第 0 維合并,成為一個(gè)元素

五、分布式任務(wù)常見(jiàn)的 GPU 利用率低問(wèn)題

分布式任務(wù)相比單機(jī)任務(wù)多了一個(gè)機(jī)器間通信環(huán)節(jié)。如果在單機(jī)上面運(yùn)行的好好的,擴(kuò)展到多機(jī)后出現(xiàn) GPU 利用率低,運(yùn)行速度慢等問(wèn)題,大概率是機(jī)器間通信時(shí)間太長(zhǎng)導(dǎo)致的。請(qǐng)排查以下幾點(diǎn):

1、機(jī)器節(jié)點(diǎn)是否處在同一 modules?

答:機(jī)器節(jié)點(diǎn)處于不同 modules 時(shí),多機(jī)間通信時(shí)間會(huì)長(zhǎng)很多,deepspeed 組件已從平臺(tái)層面增加調(diào)度到同一 modules 的策略,用戶不需要操作;其他組件需聯(lián)系我們開(kāi)啟。

2、多機(jī)時(shí)是否啟用 GDRDMA

答:能否啟用 GDRDMA 和 NCCL 版本有關(guān),經(jīng)測(cè)試,使用 PyTorch1.7(自帶 NCCL2.7.8)時(shí),啟動(dòng) GDRDMA 失敗,和 Nvidia 的人溝通后確定是 NCCL 高版本的 bug,暫時(shí)使用的運(yùn)行注入的方式來(lái)修復(fù);使用 PyTorch1.6(自帶 NCCL2.4.8)時(shí),能夠啟用 GDRDMA。經(jīng)測(cè)試,“NCCL2.4.8 + 啟用 GDRDMA ” 比 “NCCL2.7.8 + 未啟用 GDRDMA”提升 4%。通過(guò)設(shè)置 export NCCL_DEBUG=INFO,查看日志中是否出現(xiàn)[receive] via NET/IB/0/GDRDMA 和 [send] via NET/IB/0/GDRDMA,出現(xiàn)則說(shuō)明啟用 GDRDMA 成功,否則失敗。

94a88494-d274-11ed-bfe3-dac502259ad0.jpg

3、pytorch 數(shù)據(jù)并行是否采用 DistributedDataParallel ?

答:PyTorch 里的數(shù)據(jù)并行訓(xùn)練,涉及 nn.DataParallel (DP) 和nn.parallel.DistributedDataParallel (DDP) ,我們推薦使用 nn.parallel.DistributedDataParallel (DDP)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11015

    瀏覽量

    215401
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4478

    瀏覽量

    86964
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    4889

    瀏覽量

    130473
  • 計(jì)算
    +關(guān)注

    關(guān)注

    2

    文章

    452

    瀏覽量

    39170
  • 利用率
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    7105

原文標(biāo)題:實(shí)踐教程|GPU 利用率低常見(jiàn)原因分析及優(yōu)化

文章出處:【微信號(hào):3D視覺(jué)工坊,微信公眾號(hào):3D視覺(jué)工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    GPU-Z可以監(jiān)控每個(gè)vGPU的總GPU利用率嗎?

    我同時(shí)運(yùn)行4個(gè)VM,每個(gè)vGPU是m60-2Q。所有虛擬機(jī)都運(yùn)行bechmark測(cè)試。我使用Techpowerup GPU-Z監(jiān)控每個(gè)vGPU。我發(fā)現(xiàn)了一個(gè)有趣的結(jié)果。如果我將所有vGPU利用率
    發(fā)表于 09-19 16:59

    是否可以看到每個(gè)VM的vGPU利用率

    我想知道是否可以看到每個(gè)VM的vGPU利用率。不在操作系統(tǒng)內(nèi),而是來(lái)自Grid K1卡。例如,如果GPU 0為80%,那么如果我知道45%的數(shù)字來(lái)自特定的VM,那就太棒了。我查看了論壇,但沒(méi)有
    發(fā)表于 09-21 11:06

    如何利用UCOSII中的統(tǒng)計(jì)任務(wù) OS_TaskStat()知道了CPU利用率100%把利用率降下來(lái)?

    冒昧的問(wèn)一下各路大神,假如我們利用UCOSII中的統(tǒng)計(jì)任務(wù) OS_TaskStat()知道了CPU利用率100%,則應(yīng)該怎樣操作,把利用率降下來(lái)?另外,利用率太高的話會(huì)不會(huì)不太好?
    發(fā)表于 07-12 04:36

    Post綜合后的利用率只不過(guò)是實(shí)施后的利用率

    嗨,Post綜合后的利用率只不過(guò)是實(shí)施后的利用率......?謝謝娜文G K.
    發(fā)表于 05-12 08:57

    CUP利用率怎么計(jì)算?

    要計(jì)算當(dāng)前CUP利用率,是不是就使能OS_TASK_STAT_EN就可以了,并不要單獨(dú)建立一個(gè)任務(wù)去執(zhí)行OSTaskStat(),是這樣嗎?參看戰(zhàn)艦例程,沒(méi)有找到哪里執(zhí)行了OSTaskStat()!
    發(fā)表于 05-18 22:05

    請(qǐng)問(wèn)一下如何提高無(wú)線信道利用率

    影響無(wú)線信道利用率的因素有哪些?無(wú)線利用率與網(wǎng)絡(luò)質(zhì)量間的關(guān)系是什么?調(diào)整和提高無(wú)線信道利用率的建議有哪些?
    發(fā)表于 05-27 06:46

    如何獲取棧利用率

    如何獲取棧利用率
    發(fā)表于 02-16 07:34

    openEuler 資源利用率提升之道 01:概論

    利用率低于 20%,存在巨大的資源浪費(fèi)。因此,提升數(shù)據(jù)中心資源利用率是當(dāng)前急需解決的一個(gè)重要問(wèn)題[2]。問(wèn)題成因資源利用率低下的主要原因是任務(wù)和資源調(diào)配失衡,這種失衡又有多種表現(xiàn)形式
    發(fā)表于 07-06 09:54

    CPU利用率問(wèn)題求解

    “你能不能實(shí)現(xiàn)一個(gè)理想情況下應(yīng)該在每個(gè)時(shí)間片開(kāi)始時(shí)執(zhí)行的監(jiān)控任務(wù),并確定前一個(gè)時(shí)間片的利用率。如果利用率過(guò)高,則應(yīng)發(fā)出警告。如果我們可以使用空閑時(shí)間,那么我們就可以衡量利用率。為了設(shè)置這個(gè)監(jiān)視器
    發(fā)表于 12-06 06:00

    活性物質(zhì)利用率

    活性物質(zhì)利用率 電池具有活性物質(zhì)的量與按法拉弟定律計(jì)算應(yīng)產(chǎn)生的電量稱(chēng)為理論容量。要求電極給出一定的電量時(shí),電極的活性物質(zhì)利用率可表示為
    發(fā)表于 11-06 11:02 ?2535次閱讀

    關(guān)于Swarm和Mesos資源利用率優(yōu)化實(shí)踐分析

    資源調(diào)度領(lǐng)域的優(yōu)秀經(jīng)驗(yàn),以及他們?cè)贛esos社區(qū)為提升Mesos資源利用率而正在進(jìn)行的實(shí)踐活動(dòng),深度剖析了Mesos資源的收集和調(diào)度原理,以及如何在Mesos中提供Revocable資源來(lái)提高M(jìn)esos
    發(fā)表于 10-10 11:54 ?0次下載
    關(guān)于Swarm和Mesos資源<b class='flag-5'>利用率</b><b class='flag-5'>優(yōu)化</b>實(shí)踐<b class='flag-5'>分析</b>

    利用率的獲取

    棧用于保存變量, 隨著函數(shù)調(diào)用深度和變量的數(shù)量而變化. 設(shè)置小了會(huì)出現(xiàn)棧溢出, 設(shè)置大了會(huì)浪費(fèi).利用率獲取RT-THREAD的統(tǒng)計(jì)方法是將線程棧都填充為’#’, 當(dāng)需要的時(shí)候, 檢查是否被修改為其他
    發(fā)表于 12-20 19:03 ?8次下載
    棧<b class='flag-5'>利用率</b>的獲取

    常見(jiàn)GPU利用率原因分析

    GPU 任務(wù)會(huì)交替的使用 CPU 和 GPU 進(jìn)行計(jì)算,當(dāng) CPU 計(jì)算成為瓶頸時(shí),就會(huì)出現(xiàn) GPU 等待的問(wèn)題,GPU 空跑那利用率就低了
    發(fā)表于 06-19 12:22 ?1855次閱讀
    <b class='flag-5'>常見(jiàn)</b><b class='flag-5'>GPU</b><b class='flag-5'>利用率</b><b class='flag-5'>低</b><b class='flag-5'>原因</b><b class='flag-5'>分析</b>

    GPU利用率的本質(zhì)原因

    最近經(jīng)常有同學(xué)反饋 GPU 利用率,嚴(yán)重浪費(fèi) GPU 資源的問(wèn)題,經(jīng)過(guò)對(duì)一些實(shí)例分析后,借著這篇文檔和大家分享一下解決方案,希望能對(duì)使用
    的頭像 發(fā)表于 06-19 14:07 ?1467次閱讀
    <b class='flag-5'>GPU</b><b class='flag-5'>利用率</b><b class='flag-5'>低</b>的本質(zhì)<b class='flag-5'>原因</b>

    GPU用率原因和解決方法

    可能會(huì)遇到GPU用率的情況,這可能會(huì)造成性能下降和資源浪費(fèi)。本文將探討GPU用率
    的頭像 發(fā)表于 12-09 14:32 ?1.4w次閱讀
    主站蜘蛛池模板: 色久天| 精品国产中文字幕在线视频 | 国产精品欧美一区二区在线看 | 最近高清中文字幕无吗免费看 | 99久久国产免费福利 | 国产看黄网站又黄又爽又色 | 国产在线成人一区二区三区 | 欧美精品成人久久网站 | 樱桃熟了A级毛片 | 粗好大用力好深快点漫画 | 亚洲 日韩 国产 中文视频 | 日韩一卡二卡三卡四卡免费观在线 | 欧美黑人经典片免费观看 | 色中色辩论区 | 国产偷国产偷亚州清高 | 欧美亚洲精品真实在线 | 动漫女主被扒开双腿羞辱 | 总攻催眠受的高h巨肉np | 99视频在线免费观看 | 袖珍人与大黑人性视频 | 欧美高清videosgratis高 | 亲胸吻胸添奶头GIF动态图免费 | 亚洲精品久久无码AV片银杏 | 文中字幕一区二区三区视频播放 | 岛国大片在线观看完整版 | 国内精品日本久久久久影院 | 欧美性xxxxxx爱 | 黑人操日本女人 | 亚洲精品一区二区在线看片 | 国产精人妻无码一区麻豆 | 北条麻妃のレズナンパ | 亚洲精品一二三区区别在哪 | 九九热在线免费观看 | 亚州视频一区 | 国产无遮挡又黄又爽在线视频 | 日本 稀土矿 | 乱码中字在线观看一二区 | 无码专区久久综合久综合字幕 | 久久精品亚洲AV高清网站性色 | 性XXXXX搡XXXXX搡景甜 | 日韩高清特级特黄毛片 |

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品