日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习训练的时候gpu占用0_26秒单GPU训练CIFAR10,Jeff Dean也点赞的深度学习优化技巧...

發(fā)布時間:2024/1/23 pytorch 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习训练的时候gpu占用0_26秒单GPU训练CIFAR10,Jeff Dean也点赞的深度学习优化技巧... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

選自myrtle.ai

機器之心編譯機器之心編輯部

26 秒內用 ResNet 訓練 CIFAR10?一塊 GPU 也能這么干。近日,myrtle.ai 科學家 David Page 提出了一大堆針對數(shù)據(jù)預處理、模型架構、訓練和測試方面的優(yōu)化方法,有了它們,加速訓練你也可以。

運行速度和算力一直是制約深度學習模型發(fā)展的瓶頸。研究人員一直在研究如何能夠進一步提升模型的訓練和推斷速度,并減少對硬件性能的依賴。今日,一位名為 David Page 的 myrtle.ai 科學家和他的團隊對 ResNet 訓練進行了一系列改造,將在單 GPU 上訓練 CIFAR10 數(shù)據(jù)集并達到 94% 準確率所需的時間減少到了 26 秒,比 DAWNBench 排行榜現(xiàn)在的第一名高了 10 秒以上。這一項目獲得了 Jeff Dean 的點贊。

myrtle.ai 研究科學家 David Page 的推特,獲得了 Jeff Dean 的點贊。

  • colab地址:https://colab.research.google.com/github/davidcpage/cifar10-fast/blob/master/bag_of_tricks.ipynb
  • 博客地址:https://myrtle.ai/how-to-train-your-resnet-8-bag-of-tricks/

DAWNBench 是斯坦福大學提出的一個基準測試,用于衡量端到端深度學習訓練和推斷的運行時間和。計算時間和消耗是構建深度學習模型中重要的問題,因此提出這一測試的科學家希望能夠提供量化評價模型訓練時間、訓練消耗、推斷延遲時間和推斷消耗的開支的方法。并根據(jù)不同的優(yōu)化策略、模型架構、軟件框架和硬件等指標來進行測算。

以上為目前的 DAWNBechmark,排名最高的模型用時 37 秒。

在經過一系列的調優(yōu)之后,研究者的單 GPU 實現(xiàn)超越了頂級的多 GPU 的訓練和推斷速度,相比于最初在單 GPU 的 SOTA 水平上實現(xiàn)了 10 倍的改進?,F(xiàn)在,研究者已經把時間降至 26 秒了,而目前排名最高的模型訓練 CIFAR10 數(shù)據(jù)集需要 37 秒。

作者表示,他們此次發(fā)布的主要目標是提供一個用于測試新技術、經過良好調整的基線,允許用戶在幾分鐘內在單個 GPU 上完成統(tǒng)計上數(shù)量顯著的訓練。

既然訓練只需要 26 秒,那么中間肯定會有一系列操作來降低訓練時間。作者在技術博客中公開并分析了這些技巧。每當使用一個,訓練的所需的 Epoch 數(shù)量就可以減少,在保證準確率為 94% 的情況下,研究者一步步減少了所需的 Epoch 數(shù)量,使得模型的訓練速度逐漸上升。

以下為每個方法使用后訓練花費的時間。隨著應用的方法越來越多,達到 94% 測試準確率的訓練時間也越來越短。

  • GPU 上進行數(shù)據(jù)預處理 (70s)
  • 更換最大池化順序 (64s)
  • 標簽平滑化 (59s)
  • 使用 CELU 激活函數(shù) (52s)
  • 幽靈批歸一化 (46s)
  • 固定批歸一化的縮放 (43s)
  • 輸入 patch 白化 (36s)
  • 指數(shù)移動平均時間 (34s)
  • 測試狀態(tài)增強 (26s)

26 秒訓練的 ResNet 效果怎么樣

既然單塊 GPU 下訓練速度快了這么多,那么效果是不是同樣優(yōu)秀?研究者表示,如果這些技巧能同時強化驗證準確度,那么這表示他們也能用來加速更通用的 ImageNet。

研究者經過一些調參,并從 24 個 Epoch 到 100 個 Epoch 同時測試了基線模型與實驗模型。最終每一次實驗都做了 5 組,并得到以下訓練曲線:

由于 DAWNBench 只需要準確度達到 94% 就可以了,因此 26 秒訓練的模型已經達到了要求。此外,研究者 9 層的 ResNet 運行 80 個 Epoch 后能達到 96.1%,而且他們還沒有進行更多的優(yōu)化。當然,26 秒只是訓練 10 個 Epoch 的時間。研究人員表示,如果繼續(xù)訓練到 70 個 Epoch,那么準確率還能增加到 96%。

下文為每一個優(yōu)化技巧的介紹和帶來的速度提升。

在 GPU 上進行數(shù)據(jù)預處理(70 秒)

研究者首先進行了一些代碼優(yōu)化的工作。根據(jù)早期的提交結果日志顯示,他們在數(shù)據(jù)預處理上浪費了 3 秒鐘的時間。

而將整個數(shù)據(jù)集(以 uint8 的格式)移動到 GPU 花費的時間可以忽略不計(40ms),而且 GPU 完成整個預處理工作甚至更快(15ms)。所以主要的時間消耗在了將處理過的數(shù)據(jù)集移動回 CPU,這一過程消耗了半秒鐘。

因此,盡管之前提升被浪費掉的 3 秒是個進步,但是還是有另外的提升空間。這是因為數(shù)據(jù)在分批和增強后依然會重新被傳回 GPU 上,導致每個 Epoch 都會有些延遲。研究人員認為,他們需要在 GPU 上進行數(shù)據(jù)增強方面的操作,用于跳過數(shù)據(jù)傳遞的步驟。

這是可以做到的,但是需要謹慎操作。研究者的操作非常簡單,只需要 35 行代碼(不依賴 Pytorch DataLoaders)。以下為一些隨機圖像增強的結果。

相比以前提供的結果,如果將數(shù)據(jù)預處理放到 GPU 上,那么總體訓練時間可以降到 70 秒以內,相當于讓 18 年提交的結果前進了兩位。

調整最大池化層(64 秒)

最大池化往往在激活函數(shù)(如 ReLU)的后面進行。但是如果首先進行池化會更高效。在一個卷積-池化塊中,研究者調換了激活函數(shù)和池化的順序。

改變這一順序在 24 個 Epoch 訓練時間中減少了 3 秒的時間,而且不改變網絡計算的所有函數(shù)。進一步的,研究人員嘗試將池化放在卷積層之后,進一步提升了運算效率。但是由于這樣會影響網絡的結構,也會造成準確率的降低。

盡管準確率降低,但最多只需要訓練一個 Epoch 就能達到這個準確率。因此適當減少準確率,減少 Epoch 的情況下,總體上能夠降低訓練時間。從積極的方面來說,這樣減少了 5 秒的訓練時間,使得訓練時間減少到了 64s,相當于目前排行榜的第三位了。

標簽平滑化(59 秒)

標簽平滑化是一個很成熟的方法,用于提升訓練速度和神經網絡在分類問題上的泛化能力。這個方法包括將 one-hot 目標概率和分類標簽在交叉熵損失中的均勻分布混合。

測試準確率提升到了 94.2%(50 次運行的平均值)。而減少了 Epoch 的數(shù)量后,訓練 23 個 Epoch 的準確率就達到了 94.1%,但是訓練時間降到了 1 分鐘以下。

CELU 激活函數(shù)(52 秒)

研究人員希望優(yōu)化過程能夠更好,因此他們使用了一個更為平滑的激活函數(shù),而不是像 ReLU 這樣過渡不夠平滑的函數(shù)。這樣可能會幫助模型提升泛化能力.。

在這里研究人員使用了 CELU(Continuously Differentiable Exponential Linear Unit)作為平滑的激活函數(shù),而且 PyTorch 有相應的實現(xiàn)。

這樣提升了模型的測試準確率,達到了 94.3%。使得模型進一步地減少了 3 個訓練 Epoch,并在 20 個 Epcoh 的時間中(52 秒)達到了 94.1% 的準確率。

「幽靈」批歸一化(46 秒)

批歸一化(BN)似乎在批量大小為 32 的時候效果最好,而研究者的批大小為 512。此外,如果不想嚴重影響訓練效果,那么他們就不能降低批量大小。因此,研究者將批歸一化獨立地應用到各批量數(shù)據(jù)的子集中。這一技術,就被稱之為「幽靈」批歸一化,它通常用于分布式訓練中,但如果單節(jié)點運算的批量數(shù)據(jù)太大,那么也能用這樣的技術。

該方法在到 20 個 Epoch 能達到 94.2% 的測試準確率。因為訓練變得更加短,提升學習率對最終的效果應該是有幫助的。如果研究者將最大學習率增大 50%,他們能實現(xiàn) 94.1% 的準確率,且還只需要 18 個 Epoch,這樣訓練時間也降低到了 46 秒。

固定批歸一化的縮放(43 秒)

如果批歸一化的通道縮放尺寸有很大變化,這可能會減少有效的通道數(shù)量。讓我們來看看這些參數(shù)在訓練中的動態(tài)變化:

這兩張圖展示了很多信息,但比較重要的是縮放尺寸(scale)并沒有太大的變化,這表明它不怎么學習,很大程度上都是根據(jù)權重衰減的控制來更新。因此我們可以嘗試固定這些變量,采用常數(shù) 1/4 來代替它,其中 1/4 表示訓練中間點的均值。

最后,研究者根據(jù)增加的準確率將 Epoch 數(shù)量降低到 17,新的測試準確率還保持在 94.1%。現(xiàn)在,該模型已經超過了排名第二的 BaiduNet9P,它的訓練時間只需要 43 秒。

輸入 patch 白化

控制內層的協(xié)方差、利用批歸一化的白化版本可能有所幫助,但需要額外的計算和艱難的實現(xiàn)工作。因此,研究者著眼于輸入層上較為簡單的問題。

17 個 epoch 之后,測試準確率躍升至 94.4%,使得訓練時間可以縮短 2 個 epoch。15 個 epoch 在 39 秒內將準確率提升至 94.1%。

如果進一步將最大學習率提升 50% 左右,同時將裁剪增強從 8×8 降到 5×5,以彌補高學習率帶來的額外正則化,我們可以再縮減一個 epoch,在 36 秒內實現(xiàn) 94.1% 的測試準確率。

指數(shù)移動平均操作(34 秒)

為了提高準確率,研究者每 5 個 batch 更新一次移動平均時間,因為他們發(fā)現(xiàn),即使更新地更加頻繁,準確率也沒有什么提升。他們需要選擇一個新的學習率計劃,越接近訓練結束,學習率越高,同時動量參數(shù)也會采用指數(shù)移動平均操作。

測試準確率提升到了 94.3%,因此可以進一步縮減 epoch。13 個 epoch 訓練使得模型的測試準確率達到了 94.1%,訓練時間低于 34s,比該系列開始時的單 GPU 水平提高了 10 倍。

降低測試時間(26 秒)

前面主要都是降低訓練時間,但最后的測試過程也能做進一步的優(yōu)化而降低所需時間。這里,研究者主要應用了測試狀態(tài)增強(Test-time augmentation,TTA)。

為了與當前 DAWNBench 提交數(shù)值保持一致,研究者將這一技術限制在僅進行水平翻轉的操作上,并找到了準確率和推斷消耗中間的平衡點。在現(xiàn)有的網絡和 13 個 Epoch 的訓練下,測試準確率達到了 94.6%。

因此研究人員移除了對剩余數(shù)據(jù)的增強操作,因為這是針對訓練而非測試步驟的,因此他們將訓練減少到了 10 個 epoch,而且在 26 秒鐘達到了測試狀態(tài)增強準確率——94.1%。

總結

以上是生活随笔為你收集整理的深度学习训练的时候gpu占用0_26秒单GPU训练CIFAR10,Jeff Dean也点赞的深度学习优化技巧...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。