99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

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

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

那些年在pytorch上過(guò)的當(dāng)

jf_78858299 ? 來(lái)源:天宏NLP ? 作者:tianhongzxy ? 2023-02-22 14:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

起因

最近在修改上一個(gè)同事加載和預(yù)處理數(shù)據(jù)的代碼,原版的代碼使用tf1.4.1寫(xiě)的,數(shù)據(jù)加載也是完全就是for循環(huán)讀取+預(yù)處理,每讀入并預(yù)處理好一個(gè)batch就返回丟給模型訓(xùn)練,如此往復(fù),我覺(jué)得速度實(shí)在太慢了,而且我新寫(xiě)的代碼都是基于pytorch,雖然預(yù)處理的過(guò)程很復(fù)雜,我還是下決心自己改寫(xiě)。

用pytorch加載預(yù)處理數(shù)據(jù),最常用的就是torch.utils.data.Datasettorch.utils.data.DataLoader組合起來(lái),把數(shù)據(jù)預(yù)處理都在Dataset里寫(xiě)好,再在DataLoader里設(shè)定batch_size, shuffle等參數(shù)去加載數(shù)據(jù),網(wǎng)上的教程非常多,這里我就不展開(kāi)講了。

過(guò)程

現(xiàn)在我已經(jīng)獲得了train_loadertest_loader,可以從它們里面每次讀取一個(gè)batch出來(lái)訓(xùn)練,可照理說(shuō)加載Dataset時(shí)占用了大量?jī)?nèi)存是正常的,因?yàn)閿?shù)據(jù)都預(yù)加載好了,就只需要用DataLoader讀取就行了,但在訓(xùn)練的過(guò)程中,內(nèi)存不應(yīng)該隨著訓(xùn)練而逐漸增加。我眼睜睜看著內(nèi)存占用從8、9個(gè)g,逐漸漲到了25個(gè)g,程序最終因?yàn)檎紳M內(nèi)存而崩潰。檢查了半天自己的代碼都沒(méi)找出問(wèn)題所在,后來(lái)用memory_profiler查看內(nèi)存占用情況,發(fā)現(xiàn)問(wèn)題主要出現(xiàn)在這一行代碼:actual_labels += list(correctness)correctness的類(lèi)型是torch.FloatTensor,actual_labelspython原生的list。

圖片

predcorrectness是同類(lèi)型同長(zhǎng)度的tensor,在將其轉(zhuǎn)換為list再添加到已有的list中時(shí),占用的內(nèi)存相差了約5個(gè)Mb,于是我將上面代碼改寫(xiě)為:

圖片

問(wèn)題解決了!

為什么下面的代碼就沒(méi)事,上面直接將Tensor轉(zhuǎn)為list就會(huì)發(fā)生這種奇怪的現(xiàn)象?我去github和知乎看到了遇到類(lèi)似問(wèn)題的issue與文章,下面是鏈接

  1. https://github.com/pytorch/pytorch/issues/13246
  2. https://zhuanlan.zhihu.com/p/86286137
  3. https://github.com/pytorch/pytorch/issues/17499

結(jié)論

目前得到的結(jié)論大概是python list的design有問(wèn)題,導(dǎo)致了這種情況發(fā)生,pytorch團(tuán)隊(duì)雖然竭力修復(fù),但他們表示因?yàn)檫@是python設(shè)計(jì)的缺陷,超出了他們的能力范圍,上面第一個(gè)issue主要是針對(duì)DataLoadernum_workers>0時(shí)會(huì)導(dǎo)致內(nèi)存泄漏,里面也提到了list與tensor互轉(zhuǎn)亦會(huì)發(fā)生內(nèi)存泄漏,這個(gè)issue已經(jīng)一年多了還沒(méi)能close。

因此,在使用pytorch時(shí),應(yīng)該盡力避免list的使用,一定不能讓tensor和list直接互相轉(zhuǎn)換,如果一定要做,應(yīng)該將tensor從cuda轉(zhuǎn)到cpu上,轉(zhuǎn)為numpy.array,最后轉(zhuǎn)為list,反之亦然。

聲明:本文內(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)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4899

    瀏覽量

    70634
  • for循環(huán)
    +關(guān)注

    關(guān)注

    0

    文章

    61

    瀏覽量

    2710
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    809

    瀏覽量

    13928
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Pytorch模型訓(xùn)練實(shí)用PDF教程【中文】

    ?模型部分?還是優(yōu)化器?只有這樣不斷的通過(guò)可視化診斷你的模型,不斷的對(duì)癥下藥,才能訓(xùn)練出一個(gè)較滿意的模型。本教程內(nèi)容及結(jié)構(gòu):本教程內(nèi)容主要為在 PyTorch 中訓(xùn)練一個(gè)模型所可能涉及到的方法及函數(shù),并且
    發(fā)表于 12-21 09:18

    Pytorch自動(dòng)求導(dǎo)示例

    Pytorch自動(dòng)微分的幾個(gè)例子
    發(fā)表于 08-09 11:56

    Pytorch入門(mén)之的基本操作

    Pytorch入門(mén)之基本操作
    發(fā)表于 05-22 17:15

    PyTorch如何入門(mén)

    PyTorch 入門(mén)實(shí)戰(zhàn)(一)——Tensor
    發(fā)表于 06-01 09:58

    PyTorch10的基礎(chǔ)教程

    PyTorch 10 基礎(chǔ)教程(4):訓(xùn)練分類(lèi)器
    發(fā)表于 06-05 17:42

    Pytorch AI語(yǔ)音助手

    想做一個(gè)Pytorch AI語(yǔ)音助手,有沒(méi)有好的思路呀?
    發(fā)表于 03-06 13:00

    如何安裝TensorFlow2 Pytorch

    如何安裝TensorFlow2 Pytorch?
    發(fā)表于 03-07 07:32

    如何往星光2板子里裝pytorch?

    如題,想先gpu版本的pytorch只安裝cpu版本的pytorch,pytorch官網(wǎng)提供了基于conda和pip兩種安裝方式。因?yàn)樵凼莚isc架構(gòu)沒(méi)對(duì)應(yīng)的conda,而使用pip安裝提示也沒(méi)有
    發(fā)表于 09-12 06:30

    基于PyTorch的深度學(xué)習(xí)入門(mén)教程之PyTorch簡(jiǎn)單知識(shí)

    本文參考PyTorch官網(wǎng)的教程,分為五個(gè)基本模塊來(lái)介紹PyTorch。為了避免文章過(guò)長(zhǎng),這五個(gè)模塊分別在五篇博文中介紹。 Part1:PyTorch簡(jiǎn)單知識(shí) Part2:PyTorch
    的頭像 發(fā)表于 02-16 15:20 ?2499次閱讀

    基于PyTorch的深度學(xué)習(xí)入門(mén)教程之PyTorch的自動(dòng)梯度計(jì)算

    本文參考PyTorch官網(wǎng)的教程,分為五個(gè)基本模塊來(lái)介紹PyTorch。為了避免文章過(guò)長(zhǎng),這五個(gè)模塊分別在五篇博文中介紹。 Part1:PyTorch簡(jiǎn)單知識(shí) Part2:PyTorch
    的頭像 發(fā)表于 02-16 15:26 ?2269次閱讀

    PyTorch1.8和Tensorflow2.5該如何選擇?

    發(fā)布。而 PyTorch 則由 Facebook 的團(tuán)隊(duì)開(kāi)發(fā),并于 2017 年在 GitHub 上開(kāi)源。 為了充分發(fā)揮不同機(jī)器學(xué)習(xí)框架的優(yōu)勢(shì),許多機(jī)器
    的頭像 發(fā)表于 07-09 10:33 ?1829次閱讀

    那些年在pytorch上踩過(guò)的坑

    今天又發(fā)現(xiàn)了一個(gè)pytorch的小坑,給大家分享一下。手上兩份同一模型的代碼,一份用tensorflow寫(xiě)的,另一份是我拿pytorch寫(xiě)的,模型架構(gòu)一模一樣,預(yù)處理數(shù)據(jù)的邏輯也一模一樣,測(cè)試發(fā)現(xiàn)模型推理的速度也差不多。一份預(yù)處理代碼是為
    的頭像 發(fā)表于 02-22 14:18 ?1333次閱讀
    <b class='flag-5'>那些</b><b class='flag-5'>年在</b><b class='flag-5'>pytorch</b>上踩過(guò)的坑

    tensorflow和pytorch哪個(gè)更簡(jiǎn)單?

    PyTorch更簡(jiǎn)單。選擇TensorFlow還是PyTorch取決于您的具體需求和偏好。如果您需要一個(gè)易于使用、靈活且具有強(qiáng)大社區(qū)支持的框架,PyTorch可能是一個(gè)更好的選擇。如果您需要一個(gè)在
    的頭像 發(fā)表于 07-05 09:45 ?1462次閱讀

    PCB板上過(guò)孔太多如何解決

    PCB板上過(guò)孔太多是一個(gè)在電子設(shè)計(jì)中常見(jiàn)的問(wèn)題,它可能由多種因素引起,如設(shè)計(jì)不合理、走線復(fù)雜、信號(hào)需求等。解決PCB板上過(guò)孔太多的問(wèn)題,需要從設(shè)計(jì)、布局、走線以及與制造廠商的溝通等多個(gè)方面入手。
    的頭像 發(fā)表于 07-16 15:25 ?7412次閱讀

    pytorch怎么在pycharm中運(yùn)行

    第一部分:PyTorch和PyCharm的安裝 1.1 安裝PyTorch PyTorch是一個(gè)開(kāi)源的機(jī)器學(xué)習(xí)庫(kù),用于構(gòu)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)。要在PyCharm中使用PyTorch,首先需
    的頭像 發(fā)表于 08-01 16:22 ?2495次閱讀