欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于CUDA out of memory的一種神奇解決方式

 更新時(shí)間:2023年02月22日 09:04:03   作者:JasmineFeng  
這篇文章主要介紹了基于CUDA out of memory的一種神奇解決方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

CUDA out of memory的解決

我的輸入樣本維度是(1000,12,24,72),一開始我是這么輸入數(shù)據(jù)的:

trainer.train(x_train, t_train, x_val, t_val)

發(fā)現(xiàn)必溢出,后來我取出其中400個(gè)樣本輸入:

trainer.train(x_train[:400], t_train[:400], x_val, t_val)

發(fā)現(xiàn)不溢出了,訓(xùn)練正常,然后我把400刪掉,但沒刪冒號(hào):

trainer.train(x_train[:], t_train[:], x_val, t_val)

竟然也沒有溢出?。?!雖然訓(xùn)練速度降了,但是也能正常訓(xùn)練,我不是很懂原理是啥,好神奇!

但是樣本量一大起來,即使用冒號(hào)法還是可能會(huì)溢出。比方說我后來把4000個(gè)樣本作為x/t_train:

>>>x_train.shape
(4000,12,24,72)
>>>t_train.shape
(4000,24)
>>>trainer.train(x_train[:], t_train[:], x_val, t_val)
RuntimeError:CUDA out of memory...

之所以說“可能”會(huì)溢出,是因?yàn)榇_實(shí)是有小概率能正常訓(xùn)練的,但是大部分情況還是會(huì)out of memory…

不過這真的是一個(gè)“神奇”的方法,能從一定程度上解決CUDA out of memory 的問題。希望大佬能解釋一下這其中的原理~謝謝!

-------------------------------------------------------------------

再附上兩個(gè)我昨天看到的兩種不同的解決方案。

一個(gè)是減少帶梯度的中間變量(即非葉子節(jié)點(diǎn))。簡言之,能一行代碼搞定的,盡量不要寫成多行,即使寫成多行,也要盡可能減少新變量的建立。

另一個(gè)是在eval的時(shí)候,讓所有的變量都不帶梯度。只需要添加一行代碼:

with torch.no_grad():
?? ?outputs = Net_(inputs)

在with語句里的所有變量requires_grad都是False。

CUDA error: out of memory問題

本人遇到的問題是在訓(xùn)練是正常,一到驗(yàn)證時(shí)就會(huì)出現(xiàn)cuda error: out of memory的問題

解決思路溯尋

1.首先就是考慮減少batch_size和num_worker,對于我的情況不奏效

2.然后找到pin_memory發(fā)現(xiàn)是設(shè)置的True,改為false,仍舊不管用

3.包括把

?# Empty GPU cache
? ? ? ? if torch.cuda.is_available():
? ? ? ? ? ? torch.cuda.empty_cache()

放到報(bào)錯(cuò)位置的前后,不奏效

4.后來再聚焦問題關(guān)鍵,是一到驗(yàn)證就會(huì)出問題,所以專門查攻略,我初步懷疑是因?yàn)轵?yàn)證沒有參與反向傳播,梯度累積,內(nèi)存爆了,但當(dāng)時(shí)代碼中有with torch.no_grad(): ,所以并沒有發(fā)現(xiàn)關(guān)鍵,知道看到別人里面 forword是放在with torch.no_grad()后面的,所以最后

with torch.no_grad():
? ? ? ? ? ? ? ? # Forward pass
? ? ? ? ? ? ? ? loss, np_probs, hv_logits = self.forward(images, targets)

問題解決!

總結(jié)

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

相關(guān)文章

  • python中編寫函數(shù)并調(diào)用的知識(shí)點(diǎn)總結(jié)

    python中編寫函數(shù)并調(diào)用的知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給各位整理的是一篇關(guān)于python中編寫函數(shù)并調(diào)用的知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • 詳解Python函數(shù)print用法

    詳解Python函數(shù)print用法

    今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識(shí),文章圍繞著Python print函數(shù)的用法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Python的Tqdm模塊實(shí)現(xiàn)進(jìn)度條配置

    Python的Tqdm模塊實(shí)現(xiàn)進(jìn)度條配置

    這篇文章主要介紹了Python的Tqdm模塊實(shí)現(xiàn)進(jìn)度條配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 如何基于Python實(shí)現(xiàn)數(shù)字類型轉(zhuǎn)換

    如何基于Python實(shí)現(xiàn)數(shù)字類型轉(zhuǎn)換

    這篇文章主要介紹了如何基于Python實(shí)現(xiàn)數(shù)字類型轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python中pyplot直方圖的繪制方式

    python中pyplot直方圖的繪制方式

    這篇文章主要介紹了python中pyplot直方圖的繪制方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python如何開啟多線程

    python如何開啟多線程

    這篇文章主要介紹了python如何開啟多線程問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 淺談django rest jwt vue 跨域問題

    淺談django rest jwt vue 跨域問題

    這篇文章主要介紹了django rest jwt vue 跨域問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • Python中正則表達(dá)式的詳細(xì)教程

    Python中正則表達(dá)式的詳細(xì)教程

    這篇文章主要介紹了Python中正則表達(dá)式的詳細(xì)教程,正則表達(dá)式是Python學(xué)習(xí)進(jìn)階當(dāng)中的重要內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • python條件判斷中not、is、is?not、is?not?None、is?None代碼實(shí)例

    python條件判斷中not、is、is?not、is?not?None、is?None代碼實(shí)例

    None是python中的一個(gè)特殊的常量,表示一個(gè)空的對象,下面這篇文章主要給大家介紹了關(guān)于python條件判斷中not、is、is?not、is?not?None、is?None的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • 一文帶你精通Python中*args和**kwargs的應(yīng)用技巧

    一文帶你精通Python中*args和**kwargs的應(yīng)用技巧

    如果能在Python中創(chuàng)建適應(yīng)不同場景的函數(shù),而無需每次都重寫它們,會(huì)使得操作簡潔方便,這就是*args和**kwargs的魔力所在,下面我們就來看看它們的具體一些應(yīng)用技巧吧
    2024-03-03

最新評論