精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

PyTorch | 優化神經網絡訓練的十七種方法

人工智能 深度學習
本文介紹在使用 PyTorch 訓練深度模型時最省力、最有效的 17 種方法。該文所提方法,都是假設你在 GPU 環境下訓練模型。

[[442468]]

 本文介紹在使用 PyTorch 訓練深度模型時最省力、最有效的 17 種方法。該文所提方法,都是假設你在 GPU 環境下訓練模型。具體內容如下。

01. 考慮換一種學習率 schedule

學習率 schedule 的選擇對模型的收斂速度和泛化能力有很大的影響。Leslie N. Smith 等人在論文《Cyclical Learning Rates for Training Neural Networks》、《Super-Convergence: Very Fast Training of Neural Networks Using Large Learning Rates 》中提出了周期性(Cyclical)學習率以及 1Cycle 學習率 schedule。之后,fast.ai 的 Jeremy Howard 和 Sylvain Gugger 對其進行了推廣。下圖是 1Cycle 學習率 schedule 的圖示:

Sylvain 寫到:1Cycle 包括兩個等長的步幅,一個步幅是從較低的學習率到較高的學習率,另一個是回到最低水平。最大值來自學習率查找器選取的值,較小的值可以低十倍。然后,這個周期的長度應該略小于總的 epochs 數,并且,在訓練的最后階段,我們應該允許學習率比最小值小幾個數量級。

與傳統的學習率 schedule 相比,在最好的情況下,該 schedule 實現了巨大的加速(Smith 稱之為超級收斂)。例如,使用 1Cycle 策略在 ImageNet 數據集上訓練 ResNet-56,訓練迭代次數減少為原來的 1/10,但模型性能仍能比肩原論文中的水平。在常見的體系架構和優化器中,這種 schedule 似乎表現得很好。

Pytorch 已經實現了這兩種方法:「torch.optim.lr_scheduler.CyclicLR」和「torch.optim.lr_scheduler.OneCycleLR」。

參考文檔:https://pytorch.org/docs/stable/optim.html

02. 在 DataLoader 中使用多個 worker 和頁鎖定內存

當使用 torch.utils.data.DataLoader 時,設置 num_workers > 0,而不是默認值 0,同時設置 pin_memory=True,而不是默認值 False。

參考文檔:https://pytorch.org/docs/stable/data.html

來自 NVIDIA 的高級 CUDA 深度學習算法軟件工程師 Szymon Micacz 就曾使用四個 worker 和頁鎖定內存(pinned memory)在單個 epoch 中實現了 2 倍的加速。人們選擇 worker 數量的經驗法則是將其設置為可用 GPU 數量的四倍,大于或小于這個數都會降低訓練速度。請注意,增加 num_workers 將增加 CPU 內存消耗。

03. 把 batch 調到最大

把 batch 調到最大是一個頗有爭議的觀點。一般來說,如果在 GPU 內存允許的范圍內將 batch 調到最大,你的訓練速度會更快。但是,你也必須調整其他超參數,比如學習率。一個比較好用的經驗是,batch 大小加倍時,學習率也要加倍。

OpenAI 的論文《An Empirical Model of Large-Batch Training》很好地論證了不同的 batch 大小需要多少步才能收斂。在《How to get 4x speedup and better generalization using the right batch size》一文中,作者 Daniel Huynh 使用不同的 batch 大小進行了一些實驗(也使用上面討論的 1Cycle 策略)。最終,他將 batch 大小由 64 增加到 512,實現了 4 倍的加速。

然而,使用大 batch 的不足是,這可能導致解決方案的泛化能力比使用小 batch 的差。

04. 使用自動混合精度(AMP)

PyTorch 1.6 版本包括對 PyTorch 的自動混合精度訓練的本地實現。這里想說的是,與單精度 (FP32) 相比,某些運算在半精度 (FP16) 下運行更快,而不會損失準確率。AMP 會自動決定應該以哪種精度執行哪種運算。這樣既可以加快訓練速度,又可以減少內存占用。

在最好的情況下,AMP 的使用情況如下: 

  1. import torch  
  2. # Creates once at the beginning of training  
  3. scaler = torch.cuda.amp.GradScaler()  
  4. for data, label in data_iter:  
  5.    optimizer.zero_grad()  
  6.    # Casts operations to mixed precision  
  7.    with torch.cuda.amp.autocast():  
  8.       loss = model(data)  
  9.    # Scales the loss, and calls backward()  
  10.    # to create scaled gradients  
  11.    scaler.scale(loss).backward()  
  12.    # Unscales gradients and calls  
  13.    # or skips optimizer.step()  
  14.    scaler.step(optimizer)  
  15.    # Updates the scale for next iteration  
  16.    scaler.update() 

05. 考慮使用另一種優化器

AdamW 是由 fast.ai 推廣的一種具有權重衰減(而不是 L2 正則化)的 Adam,在 PyTorch 中以 torch.optim.AdamW 實現。AdamW 似乎在誤差和訓練時間上都一直優于 Adam。

Adam 和 AdamW 都能與上面提到的 1Cycle 策略很好地搭配。

目前,還有一些非本地優化器也引起了很大的關注,最突出的是 LARS 和 LAMB。NVIDA 的 APEX 實現了一些常見優化器的融合版本,比如 Adam。與 PyTorch 中的 Adam 實現相比,這種實現避免了與 GPU 內存之間的多次傳遞,速度提高了 5%。

06. cudNN 基準

如果你的模型架構保持不變、輸入大小保持不變,設置 torch.backends.cudnn.benchmark = True。

07. 小心 CPU 和 GPU 之間頻繁的數據傳輸

當頻繁地使用 tensor.cpu() 將張量從 GPU 轉到 CPU(或使用 tensor.cuda() 將張量從 CPU 轉到 GPU)時,代價是非常昂貴的。item() 和 .numpy() 也是一樣可以使用. detach() 代替。

如果你創建了一個新的張量,可以使用關鍵字參數 device=torch.device( cuda:0 ) 將其分配給 GPU。

如果你需要傳輸數據,可以使用. to(non_blocking=True),只要在傳輸之后沒有同步點。

08. 使用梯度 / 激活 checkpointing

Checkpointing 的工作原理是用計算換內存,并不存儲整個計算圖的所有中間激活用于 backward pass,而是重新計算這些激活。我們可以將其應用于模型的任何部分。

具體來說,在 forward pass 中,function 會以 torch.no_grad() 方式運行,不存儲中間激活。相反的是, forward pass 中會保存輸入元組以及 function 參數。在 backward pass 中,輸入和 function 會被檢索,并再次在 function 上計算 forward pass。然后跟蹤中間激活,使用這些激活值計算梯度。

因此,雖然這可能會略微增加給定 batch 大小的運行時間,但會顯著減少內存占用。這反過來又將允許進一步增加所使用的 batch 大小,從而提高 GPU 的利用率。

盡管 checkpointing 以 torch.utils.checkpoint 方式實現,但仍需要一些思考和努力來正確地實現。Priya Goyal 寫了一個很好的教程來介紹 checkpointing 關鍵方面。

Priya Goyal 教程地址:

https://github.com/prigoyal/pytorch_memonger/blob/master/tutorial/Checkpointing_for_PyTorch_models.ipynb

09. 使用梯度積累

增加 batch 大小的另一種方法是在調用 optimizer.step() 之前在多個. backward() 傳遞中累積梯度。

Hugging Face 的 Thomas Wolf 的文章《Training Neural Nets on Larger Batches: Practical Tips for 1-GPU, Multi-GPU & Distributed setups》介紹了如何使用梯度累積。梯度累積可以通過如下方式實現: 

  1. model.zero_grad()                                   # Reset gradients tensors  
  2. for i, (inputs, labels) in enumerate(training_set): 
  3.     predictions = model(inputs)                     # Forward pass  
  4.     loss = loss_function(predictions, labels)       # Compute loss function  
  5.     lossloss = loss / accumulation_steps                # Normalize our loss (if averaged)  
  6.     loss.backward()                                 # Backward pass  
  7.     if (i+1) % accumulation_steps == 0:             # Wait for several backward steps  
  8.         optimizer.step()                            # Now we can do an optimizer step  
  9.         model.zero_grad()                           # Reset gradients tensors  
  10.         if (i+1) % evaluation_steps == 0:           # Evaluate the model when we...  
  11.             evaluate_model()                        # ...have no gradients accumulate 

這個方法主要是為了規避 GPU 內存的限制而開發的。

10. 使用分布式數據并行進行多 GPU 訓練

加速分布式訓練可能有很多方法,但是簡單的方法是使用 torch.nn.DistributedDataParallel 而不是 torch.nn.DataParallel。這樣一來,每個 GPU 將由一個專用的 CPU 核心驅動,避免了 DataParallel 的 GIL 問題。

分布式訓練文檔地址:https://pytorch.org/tutorials/beginner/dist_overview.html

11. 設置梯度為 None 而不是 0

梯度設置為. zero_grad(set_to_none=True) 而不是 .zero_grad()。這樣做可以讓內存分配器處理梯度,而不是將它們設置為 0。正如文檔中所說,將梯度設置為 None 會產生適度的加速,但不要期待奇跡出現。注意,這樣做也有缺點,詳細信息請查看文檔。

文檔地址:https://pytorch.org/docs/stable/optim.html

12. 使用. as_tensor() 而不是. tensor()

torch.tensor() 總是會復制數據。如果你要轉換一個 numpy 數組,使用 torch.as_tensor() 或 torch.from_numpy() 來避免復制數據。

13. 必要時打開調試工具

PyTorch 提供了很多調試工具,例如 autograd.profiler、autograd.grad_check、autograd.anomaly_detection。請確保當你需要調試時再打開調試器,不需要時要及時關掉,因為調試器會降低你的訓練速度。

14. 使用梯度裁剪

關于避免 RNN 中的梯度爆炸的問題,已經有一些實驗和理論證實,梯度裁剪(gradient = min(gradient, threshold))可以加速收斂。HuggingFace 的 Transformer 實現就是一個非常清晰的例子,說明了如何使用梯度裁剪。本文中提到的其他一些方法,如 AMP 也可以用。

在 PyTorch 中可以使用 torch.nn.utils.clip_grad_norm_來實現。

15. 在 BatchNorm 之前關閉 bias

在開始 BatchNormalization 層之前關閉 bias 層。對于一個 2-D 卷積層,可以將 bias 關鍵字設置為 False:torch.nn.Conv2d(..., bias=False, ...)。

16. 在驗證期間關閉梯度計算

在驗證期間關閉梯度計算,設置:torch.no_grad() 。

17. 使用輸入和 batch 歸一化

要再三檢查一下輸入是否歸一化?是否使用了 batch 歸一化? 

 

責任編輯:龐桂玉 來源: 深度學習這件小事
相關推薦

2011-12-16 14:45:36

JavaJSP

2011-05-30 13:37:46

JSP

2020-08-03 11:43:01

神經網絡優化機器學習

2019-08-19 00:31:16

Pytorch神經網絡深度學習

2017-12-22 08:47:41

神經網絡AND運算

2022-04-07 09:01:52

神經網絡人工智能

2022-06-14 13:55:30

模型訓練網絡

2022-11-01 16:02:31

架構神經網絡模型

2024-10-16 07:58:48

2017-04-26 08:31:10

神經網絡自然語言PyTorch

2017-09-28 16:15:12

神經網絡訓練多層

2020-12-19 11:05:57

循環神經網絡PyTorch神經網絡

2025-02-19 15:12:17

神經網絡PyTorch大模型

2018-11-26 07:04:59

神經網絡優化函數

2017-08-28 21:31:37

TensorFlow深度學習神經網絡

2010-10-20 15:56:09

2017-06-11 23:38:43

進化圖像神經網絡

2016-09-28 20:05:22

2020-09-18 11:40:44

神經網絡人工智能PyTorch

2024-11-05 16:19:55

點贊
收藏

51CTO技術棧公眾號

日韩欧美在线1卡| 日本一区二区成人在线| 久久久久免费精品国产| 久草视频福利在线| 国产精品久久久久影院老司 | 欧美一级日韩免费不卡| 超碰成人在线免费观看| 精品国产av一区二区| 欧美天天在线| 亚洲第一精品自拍| 99久久久无码国产精品6| 国产在线观看黄| 精品一区二区三区免费观看| 久久99久久99精品中文字幕| 国产女人18毛片水真多18 | 青青精品视频播放| gv天堂gv无码男同在线观看| 免费精品一区| 欧美日韩亚洲成人| 夜夜爽99久久国产综合精品女不卡 | 日本日本精品二区免费| 国产女人18毛片18精品| 亚洲激情网站| 亚洲最大在线视频| 18深夜在线观看免费视频| 日本黄色免费在线| 中文字幕一区二区三区不卡在线| 亚洲专区中文字幕| 久久久久久少妇| 欧美成免费一区二区视频| 日韩欧美国产精品| 网站一区二区三区| 97人人在线视频| 中文字幕一区二区三区精华液| 国产视频不卡| 国产欧美熟妇另类久久久| 亚洲男女自偷自拍| 欧美精品一二区| 欧美性受xxxx黑人| 香蕉久久夜色精品国产使用方法 | 5858s免费视频成人| 国产伦精品一区二区三区四区视频_| 伊人免费在线| 国产亚洲精久久久久久| 狠狠色综合网站久久久久久久| 影音先锋黄色网址| 久久激情综合| 韩国精品美女www爽爽爽视频| 亚洲激情图片网| 美女毛片一区二区三区四区| 亚洲精品一区二区三区蜜桃下载| 亚洲视频一二三四| se01亚洲视频| 福利精品视频在线| 18禁网站免费无遮挡无码中文| 精品国产99久久久久久| 国产精品私人影院| 日本一区二区三区免费看| 五月天婷婷视频| 国产a区久久久| 亚洲jizzjizz日本少妇| 国产精品国产av| 老司机午夜精品| 国产色婷婷国产综合在线理论片a| 成人免费毛片男人用品| 国产视频一区免费看| 欧美大学生性色视频| 青青草原在线免费观看视频| 影音先锋日韩在线| 另类视频在线观看| 日韩成人短视频| 天天射—综合中文网| 亚洲一区二区精品| 日本少妇高潮喷水xxxxxxx| 亚洲另类春色校园小说| 日韩精品在线影院| 人妻无码一区二区三区| 日本午夜精品| 国产丝袜一区二区三区免费视频 | 亚洲不卡视频在线观看| 99精品久久久| 日本国产精品视频| 丰满熟女人妻一区二区三| 免费高清视频精品| 91九色单男在线观看| 国产成人精品免费看视频| 国产福利一区二区三区视频在线| 国产精品久久精品国产| 天堂а在线中文在线无限看推荐| 久久久三级国产网站| 日本高清久久一区二区三区| 亚洲精品承认| 悠悠色在线精品| 僵尸世界大战2 在线播放| 在线看片国产福利你懂的| 在线视频你懂得一区二区三区| 日韩一区二区三区不卡视频| 国产精品白丝久久av网站| 日韩精品中文字幕在线不卡尤物| 小毛片在线观看| 国产成人1区| 综合激情国产一区| 青青草免费av| 亚洲欧美日韩在线观看a三区 | 久久免费影院| 欧美成人激情免费网| 欧美 日本 国产| 日韩精品免费| 高清一区二区三区日本久| aaa在线视频| 国内精品写真在线观看| 久热国产精品视频一区二区三区| 91福利在线视频| 亚洲在线中文字幕| 91视频免费版污| 99精品国产高清一区二区麻豆| 亚洲1区在线| 亚洲第一页自拍| 长河落日免费高清观看| 一区在线免费观看| 国产免费一区二区三区香蕉精| 国内精品久久久久久久久久久| 91麻豆精品一区二区三区| 欧美日韩一区在线观看| 性农村xxxxx小树林| 精品精品久久| 久久久亚洲影院你懂的| 在线观看免费视频一区| 成人av在线影院| 一本一道久久久a久久久精品91| 阿v视频在线| 9191成人精品久久| 干b视频在线观看| 亚洲午夜极品| 国产在线拍揄自揄视频不卡99| 日批视频在线播放| 亚洲色图在线播放| 一本岛在线视频| 最新国产一区| 51色欧美片视频在线观看| 99草在线视频| 国产精品久久久久影视| 国产1区2区在线| 久久中文资源| 欧美大片免费看| 97人妻精品一区二区三区| 国产色爱av资源综合区| 干日本少妇首页| 国产精品毛片久久久| 欧美成人免费一级人片100| 中文字幕乱码无码人妻系列蜜桃| 91美女在线观看| 精品少妇人妻av免费久久洗澡| 91精品丝袜国产高跟在线| 色播久久人人爽人人爽人人片视av| 欧美亚洲精品天堂| a美女胸又www黄视频久久| av在线com| 欧美一区一区| 久久999免费视频| www.看毛片| 一级特黄大欧美久久久| 在线播放国产视频| 黑丝一区二区| 国产精品露出视频| 91超碰在线播放| 亚洲高清在线观看| 日韩欧美视频在线免费观看| jizz一区二区| 欧美爱爱视频免费看| 秋霞在线一区| 国产成人亚洲综合91| 国产中文字幕在线看| 91国内精品野花午夜精品| 精品成人无码一区二区三区| 日日夜夜免费精品| 亚洲综合第一| 日韩视频一区二区三区四区| 欧美国产日韩中文字幕在线| 欧美一区二区三区激情| 欧美丝袜一区二区| 微拍福利一区二区| 精品一区二区在线视频| 欧美日韩dvd| 精品国产导航| 国产精品91视频| 欧美另类极品| 日韩欧美国产1| 中日韩黄色大片| 中文字幕不卡在线| 亚洲 自拍 另类 欧美 丝袜| 99亚洲一区二区| 欧美一区二区三区精美影视| 麻豆久久久久| 欧美精品18videos性欧| 狠狠狠综合7777久夜色撩人| 欧美日韩国产精品自在自线| 欧美日韩免费一区二区| 91日韩精品一区| 男生操女生视频在线观看| 激情综合视频| 日韩资源av在线| 日韩一二三区在线观看| 欧美在线激情视频| 久久亚洲天堂| 日韩久久精品成人| 国产裸体永久免费无遮挡| 性感美女久久精品| 日本成人精品视频| 99re这里只有精品视频首页| 69久久久久久| 精品动漫一区| 色爱区成人综合网| 精品福利一区| 成人啪啪免费看| 成人勉费视频| 久久91精品国产91久久久| 二区在线观看| 精品成人一区二区| 影音先锋国产资源| 一本大道久久a久久精品综合| 欧美日韩在线观看成人| 中文字幕不卡一区| 少妇特黄一区二区三区| 国产精品123区| 色片在线免费观看| 久久成人在线| 东北少妇不带套对白| 天天做天天爱天天综合网| 欧洲av一区| 国产精品久av福利在线观看| 成人亲热视频网站| 99热播精品免费| 91精品国产电影| 影音先锋男人资源在线| 中文字幕在线观看亚洲| 欧洲视频在线免费观看| 欧美成人艳星乳罩| 国产人妻精品一区二区三区| 欧美三级午夜理伦三级中视频| 国产一级18片视频| 亚洲不卡av一区二区三区| 欧美日韩在线视频免费| 中文字幕一区二区三中文字幕| 加勒比综合在线| 99久久伊人网影院| 精品人妻伦一二三区久| 成人一级黄色片| 香蕉网在线视频| 国内国产精品久久| 国产大片一区二区三区| 国产在线乱码一区二区三区| 性生活免费在线观看| 免费看日韩精品| 男女视频在线看| 日韩不卡免费视频| 亚洲五月天综合| 日韩在线观看一区二区| 成年人视频在线免费| 久久aⅴ国产紧身牛仔裤| 男人揉女人奶房视频60分| 9色精品在线| 黄色一级视频片| 久久精品人人做人人爽电影蜜月| 国产91对白刺激露脸在线观看| 亚洲欧美激情诱惑| 日本www高清视频| 蜜臀av一区二区在线观看| xxx国产在线观看| 国产一区二区在线电影| 青青草原播放器| 国产精品888| 日本精品一二三| 91在线免费播放| 国产熟妇久久777777| 欧美国产一区视频在线观看| 一二三四在线观看视频| ...av二区三区久久精品| 欧美成人777| 一区二区高清视频在线观看| 中日韩精品视频在线观看| 欧美三级xxx| 一区二区视频网站| 日韩久久精品一区| 亚洲aⅴ乱码精品成人区| 亚洲欧洲在线看| 日韩黄色影院| 欧美激情视频一区| 成人片免费看| 成人a视频在线观看| 视频一区日韩精品| 免费在线国产精品| 国产精品毛片久久| 大西瓜av在线| 久久久久久9| 91网址在线观看精品| 99久久久久久99| 亚洲一级片在线播放| 一区二区久久久久久| www.国产毛片| 欧美一区二区免费| 视频一区二区在线播放| 色yeye香蕉凹凸一区二区av| heyzo高清在线| 国产精品久久久久久久久影视| 日韩精品久久久久久久软件91| 精品国产福利| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 人妖一区二区三区| 亚洲精品中文字幕乱码三区不卡 | 在线成人一区二区| 四虎影视国产在线视频| 日本精品久久中文字幕佐佐木| 97久久精品一区二区三区的观看方式| 国产传媒一区| 99re66热这里只有精品8| 日韩国产欧美亚洲| 国产一区二区免费在线| 欧洲美一区二区三区亚洲| 亚洲激情六月丁香| 在线观看免费视频一区| 精品亚洲男同gayvideo网站| 91网址在线观看| 国产成人综合精品| 卡一精品卡二卡三网站乱码| 亚洲AV无码成人精品一区| 美女精品网站| 无码国产精品一区二区免费式直播| 国产精品久久看| 中文字幕xxxx| 日韩精品亚洲视频| 国产色婷婷在线| 亚洲一区二区三区在线免费观看| 精品成人影院| 日本三级免费观看| av不卡免费电影| 欧美日韩精品亚洲精品| 欧美精品1区2区3区| yourporn在线观看中文站| 97国产在线观看| 777久久精品| 99精品一级欧美片免费播放| 美女免费视频一区| 午夜时刻免费入口| 日韩欧美在线网址| 特黄视频在线观看| 欧美激情精品久久久久| 欧美午夜在线播放| 99久re热视频精品98| 麻豆国产精品一区二区三区 | 日韩久久精品电影| 欧美激情网站| 国产日韩久久| 亚洲国产91| 人妻换人妻a片爽麻豆| 一区二区三区精品| 国产黄色高清视频| 欧美国产在线电影| 1204国产成人精品视频| 国产成人艳妇aa视频在线 | 国产又粗又猛又色| 无码av免费一区二区三区试看| 国精产品一品二品国精品69xx| 欧美风情在线观看| 国产精品chinese在线观看| 成人免费在线网| 91在线视频免费观看| 999这里只有精品| 亚洲片在线资源| 亚洲精品一区三区三区在线观看| 视频一区视频二区视频三区高| 蜜桃一区二区三区在线观看| 亚洲一级二级片| 日韩一区二区三区视频| 免费不卡av| 久久久一本精品99久久精品| 麻豆精品网站| 少妇高潮惨叫久久久久| 欧美一区二区三区性视频| 91网在线看| 国严精品久久久久久亚洲影视| 国产精品日韩精品欧美精品| b站大片免费直播| 欧美色综合网站| 91中文在线| 国内精品**久久毛片app| 午夜在线一区二区| 欧美另类69xxxx| 日韩精品一区国产麻豆| 免费一二一二在线视频| 神马影院我不卡午夜| 国产美女精品一区二区三区| 黄色小说在线观看视频| 亚洲欧美制服丝袜| 欧美一级片网址| 国产二区视频在线播放| 国产精品乱码一区二区三区软件| 国产ts变态重口人妖hd| 欧美在线视频观看免费网站| 国产精品国产三级国产在线观看 |