<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pytorch節(jié)省內(nèi)存(顯存)的小技巧

          共 2789字,需瀏覽 6分鐘

           ·

          2021-12-29 09:02

          點擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時間送達(dá)

          一 提問


          Pytorch有什么節(jié)省內(nèi)存(顯存)的小技巧?


          在用pytorch實現(xiàn)一個tensorflow project的時候遇到了GPU顯存超出 (out of memory) 的問題,不知道有什么優(yōu)化方法。


          高質(zhì)量回答

          Lyken
          愿以有涯隨無涯
          https://www.zhihu.com/question/274635237/answer/755102181

          咦,大家都沒看過陳天奇的 Training Deep Nets with Sublinear Memory Cost (https://arxiv.org/abs/1604.06174)嗎?


          訓(xùn)練 CNN 時,Memory 主要的開銷來自于儲存用于計算 backward 的 activation,一般的 workflow 是這樣的?


          Vanilla backprop


          對于一個長度為 N 的 CNN,需要 O(N) 的內(nèi)存。這篇論文給出了一個思路,每隔 sqrt(N) 個 node 存一個 activation,中需要的時候再算,這樣顯存就從 O(N) 降到了 O(sqrt(N))。


          Checkpointed backprop


          對于越深的模型,這個方法省的顯存就越多,且速度不會明顯變慢。



          PyTorch 我實現(xiàn)了一版,有興趣的同學(xué)可以來試試?
          https://github.com/Lyken17/pytorch-memonger


          鄭哲東
          計算機(jī)科學(xué)博士在讀
          https://www.zhihu.com/question/274635237/answer/573633662

          在不修改網(wǎng)絡(luò)結(jié)構(gòu)的情況下, 有如下操作:

          1. 同意?@Jiaming,?盡可能使用inplace操作, 比如relu 可以使用 inplace=True 。一個簡單的使用方法,如下:

          def inplace_relu(m): classname = m.__class__.__name__ if classname.find('ReLU') != -1: m.inplace=True
          model.apply(inplace_relu)

          2. 進(jìn)一步,比如ResNet 和 DenseNet 可以將 batchnorm 和relu打包成inplace,在bp時再重新計算。使用到了pytorch新的checkpoint特性,有以下兩個代碼。由于需要重新計算bn后的結(jié)果,所以會慢一些。

          • https://github.com/gpleiss/efficient_densenet_pytorch

          • https://github.com/mapillary/inplace_abn




          3. 每次循環(huán)結(jié)束時 刪除 loss,可以節(jié)約很少顯存,但聊勝于無??梢娙缦耰ssue:

          Tensor to Variable and memory freeing best practices:
          https://discuss.pytorch.org/t/tensor-to-variable-and-memory-freeing-best-practices/6000/2

          4. 使用float16精度混合計算。我用過?@NVIDIA英偉達(dá)apex,很好用,可以節(jié)約將近50%的顯存,但是要小心一些不安全的操作如 mean和sum,溢出fp16。

          NVIDIA/apex(https://github.com/NVIDIA/apex


          補(bǔ)充:最近我也嘗試在我CVPR19的GAN模型中加入fp16的訓(xùn)練,可以從15G的顯存需求降到約10G,這樣大多數(shù)1080Ti等較為常見的顯卡就可以訓(xùn)練了。歡迎大家star一波:
          https://github.com/NVlabs/DG-Net

          5. 對于不需要bp的forward,如validation 請使用 torch.no_grad , 注意model.eval() 不等于 torch.no_grad() 請看如下討論:

          https://github.com/NVlabs/DG-Net

          6. torch.cuda.empty_cache() 這是del的進(jìn)階版,使用nvidia-smi 會發(fā)現(xiàn)顯存有明顯的變化。但是訓(xùn)練時最大的顯存占用似乎沒變。大家可以試試。

          How can we release GPU memory cache?
          https://discuss.pytorch.org/t/how-can-we-release-gpu-memory-cache/1453

          另外,會影響精度的騷操作還有:

          把一個batchsize=64分為兩個32的batch,兩次forward以后,backward一次。但會影響 batchnorm等和batchsize相關(guān)的層。

          相關(guān)鏈接:

          老外寫的提高pytorch效率的方法,包含data prefetch等

          Optimizing PyTorch training code:
          https://www.sagivtech.com/2017/09/19/optimizing-pytorch-training-code/



          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實戰(zhàn)項目52講
          小白學(xué)視覺公眾號后臺回復(fù):Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機(jī)視覺。

          下載3:OpenCV實戰(zhàn)項目20講
          小白學(xué)視覺公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


          瀏覽 71
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  aⅴ中文字幕不卡在线无码 | 大尺度视频在线 | 北条麻妃被躁57分钟视频在线 | 精品无码久久久久久 | 日本成人黄页 |