自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

1行代碼消除PyTorch的CUDA內(nèi)存溢出報錯,這個GitHub項目攬星600+

新聞 前端
多少人用PyTorch“煉丹”時都會被這個bug困擾。一般情況下,你得找出當(dāng)下占顯存的沒用的程序,然后kill掉。現(xiàn)在,有人寫了一個PyTorch wrapper,用一行代碼就能“無痛”消除這個bug。

[[441177]]

本文經(jīng)AI新媒體量子位(公眾號ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。

 多少人用PyTorch“煉丹”時都會被這個bug困擾。

1行代碼消除PyTorch的CUDA內(nèi)存溢出報錯,這個GitHub項目攬星600+

一般情況下,你得找出當(dāng)下占顯存的沒用的程序,然后kill掉。

如果不行,還需手動調(diào)整batch size到合適的大小……

有點麻煩。

現(xiàn)在,有人寫了一個PyTorch wrapper,用一行代碼就能“無痛”消除這個bug。

[[441178]]

有多厲害?

相關(guān)項目在GitHub才發(fā)布沒幾天就收獲了600+星。

1行代碼消除PyTorch的CUDA內(nèi)存溢出報錯,這個GitHub項目攬星600+

一行代碼解決內(nèi)存溢出錯誤

軟件包名叫koila,已經(jīng)上傳PyPI,先安裝一下:

  1. pip install koila 

現(xiàn)在,假如你面對這樣一個PyTorch項目:構(gòu)建一個神經(jīng)網(wǎng)絡(luò)來對FashionMNIST數(shù)據(jù)集中的圖像進(jìn)行分類。

先定義input、label和model:

  1. # A batch of MNIST image 
  2. input = torch.randn(82828
  3.  
  4. # A batch of labels 
  5. label = torch.randn(010, [8]) 
  6.  
  7. class NeuralNetwork(Module): 
  8.     def __init__(self): 
  9.         super(NeuralNetwork, self).__init__() 
  10.         self.flatten = Flatten() 
  11.         self.linear_relu_stack = Sequential( 
  12.             Linear(28 * 28512), 
  13.             ReLU(), 
  14.             Linear(512512), 
  15.             ReLU(), 
  16.             Linear(51210), 
  17.         ) 
  18.  
  19.     def forward(self, x): 
  20.         x = self.flatten(x) 
  21.         logits = self.linear_relu_stack(x) 
  22.         return logits 

然后定義loss函數(shù)、計算輸出和losses。

  1. loss_fn = CrossEntropyLoss() 
  2.  
  3. # Calculate losses 
  4. out = nn(t) 
  5. loss = loss_fn(out, label) 
  6.  
  7. # Backward pass 
  8. nn.zero_grad() 
  9. loss.backward() 

好了,如何使用koila來防止內(nèi)存溢出?

超級簡單!

只需在第一行代碼,也就是把輸入用lazy張量wrap起來,并指定bacth維度——

koila就能自動幫你計算剩余的GPU內(nèi)存并使用正確的batch size了。

在本例中,batch=0,則修改如下:

  1. input = lazy(torch.randn(82828), batch=0

完事兒!就這樣和PyTorch“煉丹”時的OOM報錯說拜拜。

靈感來自TensorFlow的靜態(tài)/懶惰評估

下面就來說說koila背后的工作原理。

“CUDA error: out of memory”這個報錯通常發(fā)生在前向傳遞(forward pass)中,因為這時需要保存很多臨時變量。

koila的靈感來自TensorFlow的靜態(tài)/懶惰評估(static/lazy evaluation)。

它通過構(gòu)建圖,并僅在必要時運行訪問所有相關(guān)信息,來確定模型真正需要多少資源。

而只需計算臨時變量的shape就能計算各變量的內(nèi)存使用情況;而知道了在前向傳遞中使用了多少內(nèi)存,koila也就能自動選擇最佳batch size了。

又是算shape又是算內(nèi)存的,koila聽起來就很慢?

[[441179]]

NO。

即使是像GPT-3這種具有96層的巨大模型,其計算圖中也只有幾百個節(jié)點。

而Koila的算法是在線性時間內(nèi)運行,任何現(xiàn)代計算機都能夠立即處理這樣的圖計算;再加上大部分計算都是單個張量,所以,koila運行起來一點也不慢。

你又會問了,PyTorch Lightning的batch size搜索功能不是也可以解決這個問題嗎?

是的,它也可以。

但作者表示,該功能已深度集成在自己那一套生態(tài)系統(tǒng)中,你必須得用它的DataLoader,從他們的模型中繼承子類,才能訓(xùn)練自己的模型,太麻煩了。

koila靈活又輕量,只需一行代碼就能解決問題,非常“大快人心”有沒有。

不過目前,koila還不適用于分布式數(shù)據(jù)的并行訓(xùn)練方法(DDP),未來才會支持多GPU。

1行代碼消除PyTorch的CUDA內(nèi)存溢出報錯,這個GitHub項目攬星600+

以及現(xiàn)在只適用于常見的nn.Module類。

1行代碼消除PyTorch的CUDA內(nèi)存溢出報錯,這個GitHub項目攬星600+

ps. koila作者是一位叫做RenChu Wang的小哥。

1行代碼消除PyTorch的CUDA內(nèi)存溢出報錯,這個GitHub項目攬星600+

項目地址:
https://github.com/rentruewang/koila

 

 

責(zé)任編輯:張燕妮 來源: 量子位
相關(guān)推薦

2020-04-14 15:00:04

PyTorchGitHub檢測

2024-07-10 12:41:40

數(shù)據(jù)訓(xùn)練

2024-11-29 07:00:00

Kimi大模型Mooncake

2020-08-05 17:16:53

GitHub 技術(shù)開源

2021-09-18 11:28:29

GitHub代碼開發(fā)者

2020-12-10 10:24:25

AI 數(shù)據(jù)人工智能

2020-11-26 15:48:37

代碼開發(fā)GitHub

2024-11-18 10:25:00

AI模型

2020-12-30 10:35:49

程序員技能開發(fā)者

2023-07-22 13:47:57

開源項目

2020-08-03 10:42:10

GitHub代碼開發(fā)者

2020-12-07 16:14:40

GitHub 技術(shù)開源

2021-08-09 15:56:43

機器學(xué)習(xí)人工智能計算機

2024-12-16 09:05:00

2020-02-20 10:00:04

GitHubPyTorch開發(fā)者

2021-05-26 08:02:03

ThreadLocal多線程多線程并發(fā)安全

2015-03-30 11:18:50

內(nèi)存管理Android

2021-04-09 16:25:00

GitHub代碼開發(fā)者

2012-07-23 09:58:50

代碼程序員

2025-04-27 09:19:20

代碼GitHubAI
點贊
收藏

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