成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

將PyTorch投入生產的5個常見錯誤

開發 前端
盡管大多數教程和在線教程使用TensofFlow,但我的大部分經驗都是使用PyTorch。在這里,我想分享在生產中使用PyTorch最常見的5個錯誤。考慮過使用CPU嗎?使用多線程?使用更多的GPU內存?這些坑我們都踩過。

 導讀

本文列舉了5個將PyTorch應用到生產時容易遇到的5個錯誤操作。

ML是有趣的,ML是受歡迎的,ML無處不在。大多數公司要么使用TensorFlow,要么使用PyTorch,還有些老家伙喜歡Caffe。

盡管大多數教程和在線教程使用TensofFlow,但我的大部分經驗都是使用PyTorch。在這里,我想分享在生產中使用PyTorch最常見的5個錯誤。考慮過使用CPU嗎?使用多線程?使用更多的GPU內存?這些坑我們都踩過。

錯誤 #1 — 在推理模式下保存動態圖

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

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

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

將PyTorch投入生產的5個常見錯誤

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

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

錯誤 #2 — 沒有使能cudnn優化算法

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

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

錯誤 #3 — 重用 JIT-compilation

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

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

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

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

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

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

  • cudnn - check
  • no_grad - check
  • GPU with correct version of CUDA - check
  • JIT-compilation - check

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

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

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

責任編輯:張燕妮 來源: AI公園
相關推薦

2024-03-19 13:56:03

NVIDIAcuLitho半導體

2025-03-26 11:40:28

2022-08-27 14:45:52

人工智能自動化IT

2020-11-16 15:49:54

機器學習技術人工智能

2012-05-16 17:07:53

小米青春版小米手機

2015-11-16 15:15:51

SaaS初創公司定價錯誤

2021-12-30 21:51:10

JavaScript開發內存

2019-10-14 16:39:50

云計算配置錯誤企業

2021-06-16 15:04:06

JavaScript內存開發

2020-03-20 15:10:09

Python錯誤分析代碼

2015-07-29 10:46:20

Java錯誤

2020-05-29 14:30:35

Kubernetes開發錯誤

2018-01-11 16:29:19

錯誤HibernateJPQL

2016-12-28 17:53:29

大數據數據可視化圖像

2012-05-16 09:29:25

JavaRailsJVM

2020-11-10 08:00:00

機器學習技術科學

2011-07-29 13:17:35

HTML 5

2025-02-10 00:00:00

技巧JavaStreams

2020-08-10 11:15:07

機器學習ML人工智能

2019-08-13 11:32:55

物聯網技術大數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品无码久久久久久国产 | 国内av在线| 黄色免费网站在线看 | 久久黄色网 | 亚洲国产视频一区二区 | 久久久久一区二区三区四区 | 国产在线二区 | 久久久久久成人 | 亚洲一区久久 | 国产伦精品一区二区三区精品视频 | 91看片网 | 男女一区二区三区 | 午夜精品一区二区三区在线 | 国产成人一区二区三区 | 欧美另类视频 | 日本三级电影在线观看视频 | 人人草天天草 | 韩日精品在线观看 | 久久久亚洲精品视频 | www一级片 | 欧美精品中文字幕久久二区 | 精品一区av | 毛片视频网址 | 国产精品一区二区在线 | 天天操天天射综合网 | 国产精品美女久久久久久久网站 | 久久久久久影院 | 国产亚洲精品久久久久动 | 97精品一区二区 | 成人在线免费网站 | 精品一区二区在线观看 | 精品在线一区二区 | 亚洲视频免费观看 | 国产精品亚洲综合 | av手机免费在线观看 | 久久精品亚洲 | 白浆在线| 97热在线| 夜夜骚视频| 欧美精品二区 | 日韩网站在线观看 |