溫馨提示×

溫馨提示×

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

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

將PyTorch投入生產的常見錯誤有哪些

發(fā)布時間:2021-10-25 16:53:47 來源:億速云 閱讀:122 作者:iii 欄目:web開發(fā)

這篇文章主要講解了“將PyTorch投入生產的常見錯誤有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“將PyTorch投入生產的常見錯誤有哪些”吧!

錯誤 #1 — 在推理模式下保存動態(tài)圖

如果你以前使用過TensorFlow,那么你可能知道TensorFlow和PyTorch之間的關鍵區(qū)別 —— 靜態(tài)圖和動態(tài)圖。調試TensorFlow非常困難,因為每次模型更改時都要重新構建graph。這需要時間、努力和你的希望。當然,TensorFlow現(xiàn)在更好了。

總的來說,為了使調試更容易,ML框架使用動態(tài)圖,這些圖與PyTorch中所謂的Variables有關。你使用的每個變量都鏈接到前一個變量,以構建反向傳播的關系。

下面是它在實際中的樣子:

將PyTorch投入生產的常見錯誤有哪些

在大多數(shù)情況下,你希望在模型訓練完成后優(yōu)化所有的計算。如果你看一下torch的接口,有很多可選項,特別是在優(yōu)化方面。eval模式、detach和no_grad的方法造成了很多混亂。讓我來解釋一下它們是如何工作的。在模型被訓練和部署之后,以下是你所關心的事情:速度、速度和CUDA內存溢出異常。

為了加速PyTorch模型,你需要將它切換到eval模式。它通知所有層在推理模式下使用batchnorm和dropout層(簡單地說就是不使用dropout)?,F(xiàn)在,有一個detach方法可以將變量從它的計算圖中分離出來。當你從頭開始構建模型時,它很有用,但當你想重用SOTA的模型時,它就不太有用了。一個更全局性的解決方案將是在前向傳播的時候在上下文中使用torch.no_grad。這樣可以不用在在結果中存儲圖中變量的梯度,從而減少內存消耗。它節(jié)省內存,簡化計算,因此,你得到更多的速度和更少的內存使用。

錯誤 #2 — 沒有使能cudnn優(yōu)化算法

你可以在nn.Module中設置很多布爾標志,有一個是你必須知道的。使用cudnn.benchmark = True來對cudnn進行優(yōu)化。通過設置cudnn.enabled = True,可以確保cudnn確實在尋找最優(yōu)算法。NVIDIA在優(yōu)化方面為你提供了很多神奇的功能,你可以從中受益。

請注意你的數(shù)據(jù)必須在GPU上,模型輸入大小不應該改變。數(shù)據(jù)的形狀的變化越多,可以做的優(yōu)化就越少。例如,要對數(shù)據(jù)進行歸一化,可以對圖像進行預處理??傊?,可以有變化,但不要太多。

錯誤 #3 — 重用 JIT-compilation

PyTorch提供了一種簡單的方法來優(yōu)化和重用來自不同語言的模型(見Python-To-Cpp)。如果你足夠勇敢,你可能會更有創(chuàng)造力,并將你的模型嵌入到其他語言中。

JIT-compilation允許在輸入形狀不變的情況下優(yōu)化計算圖。它的意思是,如果你的數(shù)據(jù)形狀變化不大(參見錯誤#2),JIT是一種選擇。老實說,和上面提到的no_grad和cudnn相比,它并沒有太大的區(qū)別,但可能有。這只是第一個版本,有巨大的潛力。

請注意,如果你的模型中有conditions,這在RNNs中很常見,它就沒法用了。

錯誤 #4 — 嘗試擴展使用CPU

GPU很貴,云虛擬機也一樣很貴。即使使用AWS,一個實例也將花費你大約100美元/天(最低價格是0.7美元/小時)。也許有人會想“如果我用5個CPU來代替1個GPU可以嗎?”。所有試過的人都知道這是一個死胡同。是的,你可以為CPU優(yōu)化一個模型,但是最終它還是會比GPU慢。相信我,我強烈建議忘記這個想法。

錯誤 #5 — 處理向量而不是矩陣

  • cudnn - check

  • no_grad - check

  • GPU with correct version of CUDA - check

  • JIT-compilation - check

一切都準備好了,還能做什么?

現(xiàn)在是時候使用一點數(shù)學了。如果你還記得大部分NN是如何用所謂的張量訓練的。張量在數(shù)學上是一個n維數(shù)組或多線性幾何向量。你能做的就是把輸入(如果你有足夠的時間的話)分組成張量或者矩陣,然后把它輸入到你的模型中。例如,使用圖像數(shù)組作為發(fā)送到PyTorch的矩陣。性能增益等于同時傳遞的對象數(shù)量。

這是一個顯而易見的解決方案,但是很少有人真正使用它,因為大多數(shù)時候對象都是一個一個地處理的,而且在流程上設置這樣的流可能有點困難。別擔心,你會成功的!

感謝各位的閱讀,以上就是“將PyTorch投入生產的常見錯誤有哪些”的內容了,經過本文的學習后,相信大家對將PyTorch投入生產的常見錯誤有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

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

AI