偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

將PyTorch投入生產(chǎn)的5個(gè)常見(jiàn)錯(cuò)誤

開(kāi)發(fā) 前端
盡管大多數(shù)教程和在線教程使用TensofFlow,但我的大部分經(jīng)驗(yàn)都是使用PyTorch。在這里,我想分享在生產(chǎn)中使用PyTorch最常見(jiàn)的5個(gè)錯(cuò)誤??紤]過(guò)使用CPU嗎?使用多線程?使用更多的GPU內(nèi)存?這些坑我們都踩過(guò)。

 導(dǎo)讀

本文列舉了5個(gè)將PyTorch應(yīng)用到生產(chǎn)時(shí)容易遇到的5個(gè)錯(cuò)誤操作。

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

盡管大多數(shù)教程和在線教程使用TensofFlow,但我的大部分經(jīng)驗(yàn)都是使用PyTorch。在這里,我想分享在生產(chǎn)中使用PyTorch最常見(jiàn)的5個(gè)錯(cuò)誤??紤]過(guò)使用CPU嗎?使用多線程?使用更多的GPU內(nèi)存?這些坑我們都踩過(guò)。

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

如果你以前使用過(guò)TensorFlow,那么你可能知道TensorFlow和PyTorch之間的關(guān)鍵區(qū)別 —— 靜態(tài)圖和動(dòng)態(tài)圖。調(diào)試TensorFlow非常困難,因?yàn)槊看文P透臅r(shí)都要重新構(gòu)建graph。這需要時(shí)間、努力和你的希望。當(dāng)然,TensorFlow現(xiàn)在更好了。

總的來(lái)說(shuō),為了使調(diào)試更容易,ML框架使用動(dòng)態(tài)圖,這些圖與PyTorch中所謂的Variables有關(guān)。你使用的每個(gè)變量都鏈接到前一個(gè)變量,以構(gòu)建反向傳播的關(guān)系。

下面是它在實(shí)際中的樣子:

將PyTorch投入生產(chǎn)的5個(gè)常見(jiàn)錯(cuò)誤

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

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

錯(cuò)誤 #2 — 沒(méi)有使能cudnn優(yōu)化算法

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

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

錯(cuò)誤 #3 — 重用 JIT-compilation

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

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

請(qǐng)注意,如果你的模型中有conditions,這在RNNs中很常見(jiàn),它就沒(méi)法用了。

錯(cuò)誤 #4 — 嘗試擴(kuò)展使用CPU

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

錯(cuò)誤 #5 — 處理向量而不是矩陣

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

一切都準(zhǔn)備好了,還能做什么?

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

這是一個(gè)顯而易見(jiàn)的解決方案,但是很少有人真正使用它,因?yàn)榇蠖鄶?shù)時(shí)候?qū)ο蠖际且粋€(gè)一個(gè)地處理的,而且在流程上設(shè)置這樣的流可能有點(diǎn)困難。別擔(dān)心,你會(huì)成功的!

責(zé)任編輯:張燕妮 來(lái)源: AI公園
相關(guān)推薦

2024-03-19 13:56:03

NVIDIAcuLitho半導(dǎo)體

2025-03-26 11:40:28

2022-08-27 14:45:52

人工智能自動(dòng)化IT

2020-11-16 15:49:54

機(jī)器學(xué)習(xí)技術(shù)人工智能

2012-05-16 17:07:53

小米青春版小米手機(jī)

2015-11-16 15:15:51

SaaS初創(chuàng)公司定價(jià)錯(cuò)誤

2021-06-16 15:04:06

JavaScript內(nèi)存開(kāi)發(fā)

2020-03-20 15:10:09

Python錯(cuò)誤分析代碼

2019-10-14 16:39:50

云計(jì)算配置錯(cuò)誤企業(yè)

2021-12-30 21:51:10

JavaScript開(kāi)發(fā)內(nèi)存

2018-01-11 16:29:19

錯(cuò)誤HibernateJPQL

2020-05-29 14:30:35

Kubernetes開(kāi)發(fā)錯(cuò)誤

2015-07-29 10:46:20

Java錯(cuò)誤

2025-09-05 01:23:00

PyTorchPython分支

2016-12-28 17:53:29

大數(shù)據(jù)數(shù)據(jù)可視化圖像

2012-05-16 09:29:25

JavaRailsJVM

2020-11-10 08:00:00

機(jī)器學(xué)習(xí)技術(shù)科學(xué)

2025-02-10 00:00:00

技巧JavaStreams

2022-04-02 15:11:04

工具APIUI

2019-08-13 11:32:55

物聯(lián)網(wǎng)技術(shù)大數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)