如何提升 PyTorch「煉丹」速度?
最近,知名機器學習與 AI 研究者 Sebastian Raschka 向我們展示了他的絕招。據他表示,他的方法在不影響模型準確率的情況下,僅僅透過改變幾行程式碼,將 BERT 優化時間從 22.63 分鐘縮減到 3.15 分鐘,訓練速度足足提升了 7 倍。
#作者更是表示,如果你有8 個GPU 可用,整個訓練過程只需要2 分鐘,實現11.5 倍的效能加速。
#下面我們來看看他到底是如何實現的。
讓PyTorch 模型訓練更快
首先是模型,作者採用DistilBERT 模型進行研究,它是BERT 的精簡版,與BERT 相比規模縮小了40 %,但性能幾乎沒有損失。其次是資料集,訓練資料集為大型電影評論資料集 IMDB Large Movie Review,該資料集總共包含 50000 則電影評論。作者將使用下圖中的 c 方法來預測資料集中的影評情緒。
基本任務交代清楚後,以下就是 PyTorch 的訓練過程。為了讓大家更能理解這項任務,作者也貼心地介紹了一下熱身練習,即如何在 IMDB 電影評論資料集上訓練 DistilBERT 模型。如果你想自己運行程式碼,可以使用相關的Python 函式庫來設定一個虛擬環境,如下所示:
#相關軟體的版本如下:
現在省略掉枯燥的資料載入介紹,只需要了解本文將資料集分割成35000 個訓練範例、5000 個驗證範例和10000 個測試範例。需要的程式碼如下:
#程式碼部分截圖
#完整程式碼位址:
#https://github.com/rasbt/faster-pytorch-blog /blob/main/1_pytorch-distilbert.py
#然後在A100 GPU 上執行程式碼,得到如下結果:
#部分結果截圖
#如上述程式碼所示,模型從第2 輪到第3輪開始有一點過擬合,驗證準確率從92.89% 下降到了92.09%。在模型運行了 22.63 分鐘後進行微調,最終的測試準確率為 91.43%。
使用Trainer 類別
#接下來是改進上述程式碼,改進部分主要是把PyTorch 模型包裝在LightningModule 中,這樣就可以使用來自Lightning 的Trainer 類別。部分程式碼截圖如下:
#完整程式碼位址:https://github.com/rasbt/faster-pytorch-blog/blob/main/2_pytorch- with-trainer.py
上述程式碼建立了一個LightningModule,它定義瞭如何執行訓練、驗證和測試。相較於前面給出的程式碼,主要變化是在第 5 部分(即 5 Finetuning),即微調模型。與先前不同的是,微調部分在 LightningModel 類別中包裝了 PyTorch 模型,並使用 Trainer 類別來擬合模型。
之前的程式碼顯示驗證準確率從第2 輪到第3 輪有所下降,但改進後的程式碼使用了ModelCheckpoint 以載入最佳模型。在同一台機器上,這個模型在 23.09 分鐘內達到了 92% 的測試準確率。
需要注意,如果禁用checkpointing 並允許PyTorch 以非確定性模式運行,本次運行最終將獲得與普通PyTorch 相同的運行時間(時間為22.63 分而非23.09 分)。
自動混合精準度訓練
#進一步,如果GPU 支援混合精準度訓練,可以開啟GPU 以提高運算效率。作者使用自動混合精度訓練,在 32 位和 16 位浮點之間切換而不會犧牲準確率。
#在這一最佳化下,使用Trainer 類,即能透過一行程式碼實現自動混合精準度訓練:
#上述操作可以將訓練時間從23.09 分鐘縮短到8.75 分鐘,這幾乎快了3倍。測試集的準確率為 92.2%,甚至比之前的 92.0% 還略有增加。
使用Torch.Compile 靜態圖
最近PyTorch 2.0 公告顯示,PyTorch 團隊引進了新的toch.compile 函數。此函數可以透過產生最佳化的靜態圖來加速 PyTorch 程式碼執行,而不是使用動態圖來執行 PyTorch 程式碼。
#由於PyTorch 2.0 尚未正式發布,因而必須先安裝torchtriton,並更新到PyTorch 最新版本才能使用此功能。
#然後透過新增這一行來修改程式碼:
在4 區塊GPU 上進行分散式資料並行
###上文介紹了在單 GPU 上加速程式碼的混合精度訓練,接下來介紹多 GPU 訓練策略。下圖總結了幾種不同的多 GPU 訓練技術。
#想要實作分散式資料並行,可以透過DistributedDataParallel 來實現,只需修改一行程式碼就能使用Trainer。
經過這一步驟優化,在4 個A100 GPU 上,這段程式碼運行了3.52 分鐘就達到了93.1 % 的測試準確率。
DeepSpeed
最後,作者探討了在Trainer 中使用深度學習優化庫DeepSpeed 以及多GPU 策略的結果。首先必須安裝DeepSpeed 函式庫:
#接著只需更改一行程式碼即可啟用該函式庫:
這一波下來,用時3.15 分鐘就達到了92.6% 的測試準確率。不過 PyTorch 也有 DeepSpeed 的替代方案:fully-sharded DataParallel,透過 strategy="fsdp" 調用,最後花費 3.62 分鐘完成。
####以上就是作者能提升PyTorch 模型訓練速度的方法,有興趣的夥伴可以跟著原部落格嘗試一下,相信你會得到想要的結果。 ######
以上是改變幾行程式碼,PyTorch煉丹速度狂飆、模型最佳化時間大減的詳細內容。更多資訊請關注PHP中文網其他相關文章!

軟AI(被定義為AI系統,旨在使用近似推理,模式識別和靈活的決策執行特定的狹窄任務 - 試圖通過擁抱歧義來模仿類似人類的思維。 但是這對業務意味著什麼

答案很明確 - 只是雲計算需要向雲本地安全工具轉變,AI需要專門為AI獨特需求而設計的新型安全解決方案。 雲計算和安全課程的興起 在

企業家,並使用AI和Generative AI來改善其業務。同時,重要的是要記住生成的AI,就像所有技術一樣,都是一個放大器 - 使得偉大和平庸,更糟。嚴格的2024研究O

解鎖嵌入模型的力量:深入研究安德魯·NG的新課程 想像一個未來,機器可以完全準確地理解和回答您的問題。 這不是科幻小說;多虧了AI的進步,它已成為R

大型語言模型(LLM)和不可避免的幻覺問題 您可能使用了諸如Chatgpt,Claude和Gemini之類的AI模型。 這些都是大型語言模型(LLM)的示例,在大規模文本數據集上訓練的功能強大的AI系統

最近的研究表明,根據行業和搜索類型,AI概述可能導致有機交通下降15-64%。這種根本性的變化導致營銷人員重新考慮其在數字可見性方面的整個策略。 新的

埃隆大學(Elon University)想像的數字未來中心的最新報告對近300名全球技術專家進行了調查。由此產生的報告“ 2035年成為人類”,得出的結論是,大多數人擔心AI系統加深的採用


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載
最受歡迎的的開源編輯器