最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch鎖死在dataloader(訓(xùn)練時(shí)卡死)

 更新時(shí)間:2021年05月28日 09:34:02   作者:Totoro-wen  
這篇文章主要介紹了pytorch鎖死在dataloader(訓(xùn)練時(shí)卡死),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1.問題描述

2.解決方案

(1)Dataloader里面不用cv2.imread進(jìn)行讀取圖片,用cv2.imread還會(huì)帶來一系列的不方便,比如不能結(jié)合torchvision進(jìn)行數(shù)據(jù)增強(qiáng),所以最好用PIL 里面的Image.open來讀圖片。(并不適用本例)

(2)將DataLoader 里面的參變量num_workers設(shè)置為0,但會(huì)導(dǎo)致數(shù)據(jù)的讀取很慢,拖慢整個(gè)模型的訓(xùn)練。(并不適用本例)

(3)如果用了cv2.imread,不想改代碼的,那就加兩條語句,來關(guān)閉Opencv的多線程:cv2.setNumThreads(0)和cv2.ocl.setUseOpenCL(False)。加了這兩條語句之后,并不影響模型的訓(xùn)練。(并不適用本例)

(4)這種情況應(yīng)該是屬于pytorch多線程鎖死,在github上看到有該問題,但是沒有解決的。

參考建議

首先確保num_works數(shù)量低于CPU數(shù)量(如果使用Kubernetes,則設(shè)置為pod),但是設(shè)置得足夠高,使數(shù)據(jù)隨時(shí)可以用于下一次迭代。

如果GPU在t秒內(nèi)運(yùn)行每個(gè)迭代,而每個(gè)dataloader worker加載/處理單個(gè)批處理需要N*t秒,那么您應(yīng)該將num_workers設(shè)置為至少N,以避免GPU停滯。當(dāng)然,系統(tǒng)中至少要有N個(gè)cpu。

不幸的是,如果Dataloader使用任何使用K個(gè)線程的庫,那么生成的進(jìn)程數(shù)量就會(huì)變成num_workersK = NK。這可能比計(jì)算機(jī)中的cpu數(shù)量大得多。這會(huì)使pod節(jié)流,而Dataloader會(huì)變得非常慢。這可能導(dǎo)致Dataloader不返回批處理每t秒,導(dǎo)致GPU暫停。

避免K個(gè)線程的一種方法是通過OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 python train.py調(diào)用主腳本。這就限制了每個(gè)Dataloader工作程序只能使用一個(gè)線程,從而避免了使機(jī)器不堪重負(fù)。你仍然需要有足夠的num_workers來滿足GPU的需要。

您還應(yīng)該在_get_item__中優(yōu)化您的代碼,以便每個(gè)worker在較短的時(shí)間內(nèi)完成其批處理。請(qǐng)確保worker完成批處理的時(shí)間不受從磁盤讀取訓(xùn)練數(shù)據(jù)的時(shí)間(特別是當(dāng)您從網(wǎng)絡(luò)存儲(chǔ)中讀取數(shù)據(jù)時(shí))或網(wǎng)絡(luò)帶寬(當(dāng)您從網(wǎng)絡(luò)磁盤讀取數(shù)據(jù)時(shí))的影響。如果您的數(shù)據(jù)集很小,并且您有足夠的RAM,那么可以考慮將數(shù)據(jù)集移動(dòng)到RAM(或/tmpfs)中,并從那里讀取數(shù)據(jù)以進(jìn)行快速訪問。對(duì)于Kubernetes,您可以創(chuàng)建一個(gè)RAM磁盤(在Kubernetes中搜索emptyDir)。

如果你已經(jīng)優(yōu)化了你的_get_item__代碼,并確保磁盤訪問/網(wǎng)絡(luò)訪問不是罪魁禍?zhǔn)?,但仍然?huì)出現(xiàn)問題,你將需要請(qǐng)求更多的cpu(為了一個(gè)Kubernetes pod),或者將你的GPU移動(dòng)到擁有更多cpu的機(jī)器上。

另一個(gè)選項(xiàng)是減少batch_size,這樣每個(gè)worker要做的工作就會(huì)減少,并且可以更快地完成預(yù)處理。后一種選擇在某些情況下是不可取的,因?yàn)闀?huì)有空閑的GPU內(nèi)存不被利用。

你也可以考慮離線做一些預(yù)處理,減輕每個(gè)worker的負(fù)擔(dān)。例如,如果每個(gè)worker正在讀取一個(gè)wav文件并計(jì)算音頻文件的譜圖,那么可以考慮離線預(yù)先計(jì)算譜圖,只從工作者的磁盤中讀取計(jì)算的譜圖。這將減少每個(gè)worker的工作量。

你也可以考慮將dataloader里的設(shè)置pin_memory=False。

補(bǔ)充:pytorch加載訓(xùn)練數(shù)據(jù)集dataloader操作耗費(fèi)時(shí)間太久,該如何解決?

筆者在使用pytorch加載訓(xùn)練數(shù)據(jù)進(jìn)行模型訓(xùn)練的時(shí)候,發(fā)現(xiàn)數(shù)據(jù)加載需要耗費(fèi)太多時(shí)間,該如何縮短數(shù)據(jù)加載的時(shí)間消耗呢?經(jīng)過查詢相關(guān)文檔,

總結(jié)實(shí)際操作過程如下:

1、盡量將jpg等格式的文件保存為bmp文件,可以降低解碼時(shí)間;

2、dataloader函數(shù)中增加num_workers參數(shù),該參數(shù)表示加載數(shù)據(jù)的線程數(shù),建議設(shè)置為該系統(tǒng)中的CPU核心數(shù),若CPU很強(qiáng)勁,而且內(nèi)存很大,也可以考慮將該數(shù)值設(shè)置的更大一些。

train_loader=torch.utils.data.DataLoader(dataset=train_dataset,batch_size=batch_size,shuffle=True)

修改為:

train_loader=torch.utils.data.DataLoader(dataset=train_dataset,batch_size=batch_size,shuffle=True,num_workers=multiprocessing.cpu_count())

雖然使用dataloader達(dá)到了iter(Dataset)的讀取并行,但是沒有實(shí)現(xiàn)在GPU運(yùn)算時(shí)異步讀取數(shù)據(jù),可以考慮使用non_blocking實(shí)現(xiàn)。

dataloader = data.Dataloader(dataset, batch_size = batch_size, num_workers = workers)
for epoch in range(epochs):
    for batch_idx, (images, labels) in enumerate(dataloader):
        images = images.to(device)
        labels = labels.to(device)

改為:

dataloader = data.Dataloader(dataset, batch_size = batch_size, num_workers = workers, pin_memory = True)
for epoch in range(epochs):
    for batch_idx, (images, labels) in enumerate(dataloader):
        images = images.to(device, non_blocking=True)
        labels = labels.to(device, non_blocking=True)

需要注意的是:只有pin_memory=True并且num_workers>0時(shí)non_blocking才會(huì)有效。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python自動(dòng)發(fā)送郵件腳本

    python自動(dòng)發(fā)送郵件腳本

    這篇文章主要為大家詳細(xì)介紹了python自動(dòng)發(fā)送郵件的腳本源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • tensorflow2.0的函數(shù)簽名與圖結(jié)構(gòu)(推薦)

    tensorflow2.0的函數(shù)簽名與圖結(jié)構(gòu)(推薦)

    這篇文章主要介紹了tensorflow2.0的函數(shù)簽名與圖結(jié)構(gòu),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python實(shí)現(xiàn)定位包含特定文本信息的元素

    Python實(shí)現(xiàn)定位包含特定文本信息的元素

    在Python編程中,特別是在進(jìn)行網(wǎng)頁數(shù)據(jù)抓取或自動(dòng)化測(cè)試時(shí),定位包含特定文本信息的元素是一項(xiàng)常見且重要的任務(wù),下面我們來看看如何使用Python實(shí)現(xiàn)定位包含特定文本信息的元素吧
    2025-01-01
  • Python輕松實(shí)現(xiàn)批量郵件自動(dòng)化詳解

    Python輕松實(shí)現(xiàn)批量郵件自動(dòng)化詳解

    在日常工作和生活中,我們經(jīng)常需要發(fā)送郵件,手動(dòng)發(fā)送郵件不僅繁瑣,而且容易出錯(cuò),下面我們就來看看如何使用Python實(shí)現(xiàn)批量郵件自動(dòng)化操作吧
    2025-02-02
  • Python多叉樹的構(gòu)造及取出節(jié)點(diǎn)數(shù)據(jù)(treelib)的方法

    Python多叉樹的構(gòu)造及取出節(jié)點(diǎn)數(shù)據(jù)(treelib)的方法

    今天小編就為大家分享一篇Python多叉樹的構(gòu)造及取出節(jié)點(diǎn)數(shù)據(jù)(treelib)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python實(shí)現(xiàn)常用文本內(nèi)容提取

    Python實(shí)現(xiàn)常用文本內(nèi)容提取

    在日常工作和學(xué)習(xí)中,我們經(jīng)常需要從PDF、Word文檔中提取文本,本文將介紹如何使用Python編寫一個(gè)文本內(nèi)容提取工具,有需要的小伙伴可以參考下
    2025-03-03
  • Python中 map()函數(shù)的用法詳解

    Python中 map()函數(shù)的用法詳解

    map( )函數(shù)在算法題目里面經(jīng)常出現(xiàn),map( )會(huì)根據(jù)提供的函數(shù)對(duì)指定序列做映射,在寫返回值等需要轉(zhuǎn)換的時(shí)候比較常用。這篇文章主要介紹了Python中 map()的用法,需要的朋友可以參考下
    2018-07-07
  • python數(shù)據(jù)庫批量插入數(shù)據(jù)的實(shí)現(xiàn)(executemany的使用)

    python數(shù)據(jù)庫批量插入數(shù)據(jù)的實(shí)現(xiàn)(executemany的使用)

    這篇文章主要介紹了python數(shù)據(jù)庫批量插入數(shù)據(jù)的實(shí)現(xiàn)(executemany的使用),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python MD5加密實(shí)例詳解

    Python MD5加密實(shí)例詳解

    這篇文章主要介紹了Python MD5加密實(shí)例詳解的相關(guān)資料,這里提供實(shí)現(xiàn)方法及實(shí)例,需要的朋友可以參考下
    2017-08-08
  • python 返回列表中某個(gè)值的索引方法

    python 返回列表中某個(gè)值的索引方法

    今天小編就為大家分享一篇python 返回列表中某個(gè)值的索引方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11

最新評(píng)論

丹凤县| 安乡县| 德昌县| 策勒县| 宜阳县| 睢宁县| 肥西县| 大田县| 海门市| 永兴县| 吉木萨尔县| 乌兰察布市| 通城县| 芒康县| 曲麻莱县| 驻马店市| 当雄县| 合山市| 织金县| 潼关县| 翼城县| 夹江县| 永平县| 德令哈市| 剑川县| 梅州市| 锡林郭勒盟| 商南县| 常州市| 双牌县| 灯塔市| 香格里拉县| 裕民县| 资阳市| 监利县| 循化| 米林县| 英山县| 江门市| 麻城市| 玉林市|