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

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

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

[[441177]]

本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。

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

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

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

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

有點麻煩。

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

[[441178]]

有多厲害?

相關項目在GitHub才發布沒幾天就收獲了600+星。

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

一行代碼解決內存溢出錯誤

軟件包名叫koila,已經上傳PyPI,先安裝一下:

  1. pip install koila 

現在,假如你面對這樣一個PyTorch項目:構建一個神經網絡來對FashionMNIST數據集中的圖像進行分類。

先定義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函數、計算輸出和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來防止內存溢出?

超級簡單!

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

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

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

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

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

靈感來自TensorFlow的靜態/懶惰評估

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

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

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

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

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

又是算shape又是算內存的,koila聽起來就很慢?

[[441179]]

NO。

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

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

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

是的,它也可以。

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

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

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

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

以及現在只適用于常見的nn.Module類。

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

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

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

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

 

 

責任編輯:張燕妮 來源: 量子位
相關推薦

2020-04-14 15:00:04

PyTorchGitHub檢測

2024-07-10 12:41:40

數據訓練

2024-11-29 07:00:00

Kimi大模型Mooncake

2020-08-05 17:16:53

GitHub 技術開源

2021-09-18 11:28:29

GitHub代碼開發者

2024-11-18 10:25:00

AI模型

2020-11-26 15:48:37

代碼開發GitHub

2020-12-10 10:24:25

AI 數據人工智能

2023-07-22 13:47:57

開源項目

2020-12-30 10:35:49

程序員技能開發者

2020-12-07 16:14:40

GitHub 技術開源

2020-08-03 10:42:10

GitHub代碼開發者

2021-08-09 15:56:43

機器學習人工智能計算機

2020-02-20 10:00:04

GitHubPyTorch開發者

2024-12-16 09:05:00

2021-04-09 16:25:00

GitHub代碼開發者

2012-07-23 09:58:50

代碼程序員

2021-05-26 08:02:03

ThreadLocal多線程多線程并發安全

2015-03-30 11:18:50

內存管理Android

2020-08-21 13:55:56

微軟開源PyTorch
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产精品99久久久久久久久 | 久久久不卡网国产精品一区 | 色一级片| 亚洲a人 | 久久99精品久久久久久琪琪 | 久久久久成人精品 | 久久久精品一区 | 亚洲一区视频 | 日韩一区二区三区视频在线播放 | 国产一区视频在线 | 激情久久网| 波多野结衣中文字幕一区二区三区 | 粉嫩一区二区三区四区公司1 | 欧美bondage紧缚视频 | 超碰日本 | 国产特级毛片aaaaaa喷潮 | 欧美久久电影 | 日韩精品一区二区不卡 | 精品一级毛片 | 久草免费在线视频 | 日韩免费 | 欧美视频在线观看 | 国产精品久久久久永久免费观看 | 欧美一二三四成人免费视频 | 免费在线观看成年人视频 | 成人免费黄色片 | 精品无码三级在线观看视频 | 国产日韩欧美在线播放 | 久久久久免费精品国产 | 中文字幕视频在线观看 | 精品日韩在线 | 久久99一区二区 | 久久国产精品一区二区三区 | 亚洲国产精品一区 | 成人影院免费视频 | 一二区电影| 久久国产亚洲 | 午夜免费在线观看 | 一级欧美| 国产精品1 | 永久免费在线观看 |