溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

基于CUDA?out?of?memory的解決方法是什么

發(fā)布時間:2023-02-22 11:26:32 來源:億速云 閱讀:113 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下基于CUDA out of memory的解決方法是什么的相關(guān)知識點,內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    CUDA out of memory的解決

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

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

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

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

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

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

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

    但是樣本量一大起來,即使用冒號法還是可能會溢出。比方說我后來把4000個樣本作為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...

    之所以說“可能”會溢出,是因為確實是有小概率能正常訓(xùn)練的,但是大部分情況還是會out of memory…

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

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

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

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

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

    CUDA error: out of memory問題

    本人遇到的問題是在訓(xùn)練是正常,一到驗證時就會出現(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()

    放到報錯位置的前后,不奏效

    4.后來再聚焦問題關(guān)鍵,是一到驗證就會出問題,所以專門查攻略,我初步懷疑是因為驗證沒有參與反向傳播,梯度累積,內(nèi)存爆了,但當(dāng)時代碼中有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)

    以上就是“基于CUDA out of memory的解決方法是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI