PyTorch 是一種開源深度學習框架,以出色的靈活性和易用性著稱。這在一定程度上是因為與機器學習開發(fā)者和數(shù)據(jù)科學家所青睞的熱門 Python 高級編程語言兼容。
什么是 PyTorch ?
PyTorch 是一種用于構建深度學習模型的功能完備框架,是一種通常用于圖像識別和語言處理等應用程序的機器學習。使用 Python 編寫,因此對于大多數(shù)機器學習開發(fā)者而言,學習和使用起來相對簡單。PyTorch 的獨特之處在于,它完全支持 GPU,并且使用反向模式自動微分技術,因此可以動態(tài)修改計算圖形。這使其成為快速實驗和原型設計的常用選擇。
為何選擇 PyTorch ?
PyTorch 是 Facebook AI Research 和其他幾個實驗室的開發(fā)者的工作成果。該框架將 Torch 中高效而靈活的 GPU 加速后端庫與直觀的 Python 前端相結合,后者專注于快速原型設計、可讀代碼,并支持盡可能廣泛的深度學習模型。Pytorch 支持開發(fā)者使用熟悉的命令式編程方法,但仍可以輸出到圖形。它于 2017 年以開源形式發(fā)布,其 Python 根源使其深受機器學習開發(fā)者的喜愛。
值得注意的是,PyTorch 采用了 Chainer 創(chuàng)新技術,稱為反向模式自動微分。從本質(zhì)上講,它就像一臺磁帶錄音機,錄制完成的操作,然后回放,計算梯度。這使得 PyTorch 的調(diào)試相對簡單,并且能夠很好地適應某些應用程序,例如動態(tài)神經(jīng)網(wǎng)絡。由于每次迭代可能都不相同,因此非常適用于原型設計。
PyTorch 在 Python 開發(fā)者中特別受歡迎,因為它使用 Python 編寫,并使用該語言的命令式、運行時定義即時執(zhí)行模式,在這種模式下,從 Python 調(diào)用運算時執(zhí)行運算。隨著 Python 編程語言的廣泛采用,一項調(diào)查顯示,AI 和機器學習任務受到越來越多的關注,并且相關 PyTorch 的采用也隨之提升。這使得 PyTorch 對于剛接觸深度學習的 Python 開發(fā)者來說是一個很好的選擇,而且越來越多的深度學習課程基于 PyTorch。從早期版本開始,API 一直保持一致,這意味著代碼對于經(jīng)驗豐富的 Python 開發(fā)者來說相對容易理解。
PyTorch 的獨特優(yōu)勢是快速原型設計和小型項目。其易用性和靈活性也使其深受學術和研究界的喜愛。
Facebook 開發(fā)者一直努力改進 PyTorch 的高效應用。新版本已提供增強功能,例如支持谷歌的 TensorBoard 可視化工具以及即時編譯。此外,還擴展了對 ONNX(開放神經(jīng)網(wǎng)絡交換)的支持,使開發(fā)者能夠匹配適合其應用程序的深度學習框架或運行時。
PyTorch 的主要優(yōu)勢
PyTorch 的一些重要特性包括:
PyTorch.org 社區(qū)有一個充滿活力的大型社區(qū),具有優(yōu)秀的文檔和教程。論壇十分活躍,并能給予幫助和支持。
采用 Python 編寫,并集成了熱門的 Python 庫,例如用于科學計算的 NumPy、SciPy 和用于將 Python 編譯為 C 以提高性能的 Cython。由于 PyTorch 的語法和用法類似于 Python,因此對于 Python 開發(fā)者來說,學習起來相對容易。
受主要云平臺的有力支持。
腳本語言(稱為 TorchScript)在即時模式下易于使用且靈活。這是一種快速啟動執(zhí)行模式,從 Python 調(diào)用運算時立即執(zhí)行運算,但也可以在 C++ 運行時環(huán)境中轉換為圖形模型,以提高速度和實現(xiàn)優(yōu)化。
它支持 CPU、GPU、并行處理以及分布式訓練。這意味著計算工作可以在多個 CPU 和 GPU 核心之間分配,并且可以在多臺機器上的多個 GPU 上進行訓練。
PyTorch 支持動態(tài)計算圖形,能夠在運行時更改網(wǎng)絡行為。與大多數(shù)機器學習框架相比,提供了更大的靈活性優(yōu)勢,因為大多數(shù)機器學習框架要求在運行時之前將神經(jīng)網(wǎng)絡定義為靜態(tài)對象。
PyTorch Hub 是一個預訓練模型庫,在某些情況下只需使用一行代碼就可以調(diào)用。
新自定義組件可創(chuàng)建為標準 Python 類的子類,可以通過 TensorBoard 等外部工具包輕松共享參數(shù),并且可以輕松導入和內(nèi)聯(lián)使用庫。
PyTorch 擁有一組備受好評的 API,可用于擴展核心功能。
既支持用于實驗的“即時模式”,也支持用于高性能執(zhí)行的“圖形模式”。
擁有從計算機視覺到增強學習等領域的大量工具和庫。
支持 Python 程序員熟悉的純 C++ 前端接口,可用于構建高性能 C++ 應用程序。
PyTorch 的工作原理
PyTorch 和 TensorFlow 的相似之處在于,兩者的核心組件都是張量和圖形。
張量
張量是一種核心 PyTorch 數(shù)據(jù)類型,類似于多維數(shù)組,用于存儲和操作模型的輸入和輸出以及模型的參數(shù)。張量與 NumPy 的 ndarray 類似,只是張量可以在 GPU 上運行以加速計算。
圖形
神經(jīng)網(wǎng)絡將一系列嵌套函數(shù)應用于輸入?yún)?shù),以轉換輸入數(shù)據(jù)。深度學習的目標是通過計算相對損失指標的偏導數(shù)(梯度),優(yōu)化這些參數(shù)(包括權重和偏差,在 PyTorch 中以張量的形式存儲)。在前向傳播中,神經(jīng)網(wǎng)絡接受輸入?yún)?shù),并向下一層的節(jié)點輸出置信度分數(shù),直至到達輸出層,在該層計算分數(shù)誤差。在一個稱為梯度下降的過程中,通過反向傳播,誤差會再次通過網(wǎng)絡發(fā)送回來,并調(diào)整權重,從而改進模型。
圖形是由已連接節(jié)點(稱為頂點)和邊緣組成的數(shù)據(jù)結構。每個現(xiàn)代深度學習框架都基于圖形的概念,其中神經(jīng)網(wǎng)絡表示為計算的圖形結構。PyTorch 在由函數(shù)對象組成的有向無環(huán)圖(DAG) 中保存張量和執(zhí)行操作的記錄。在以下 DAG 中,葉是輸入張量,根是輸出張量。
在許多熱門框架(包括 TensorFlow)中,計算圖形是一個靜態(tài)對象。PyTorch 基于動態(tài)計算圖形,即,在運行時構建和重建計算圖形,并使用與執(zhí)行前向傳遞的計算相同的代碼,同時還創(chuàng)建反向傳播所需的數(shù)據(jù)結構。PyTorch 是首個運行時定義深度學習框架,與 TensorFlow 等靜態(tài)圖形框架的功能和性能相匹配,非常適合從標準卷積網(wǎng)絡到時間遞歸神經(jīng)網(wǎng)絡等所有網(wǎng)絡。
PyTorch 用例
眾所周知,PyTorch 框架十分便捷且靈活,增強學習、圖像分類和自然語言處理等示例是比較常見的用例。
商業(yè)、研究和教育示例
自然語言處理 (NLP):從 Siri 到 Google Translate,深度神經(jīng)網(wǎng)絡在機器理解自然語言方面取得了突破性進展。其中大多數(shù)模型都將語言視為單詞或字符的平面序列,并使用一種稱為時間遞歸神經(jīng)網(wǎng)絡(RNN) 的模型處理該序列。但是,許多語言學家認為,語言極易理解為一個由短語組成的層次樹,因此,大量研究已經(jīng)進入稱為遞歸神經(jīng)網(wǎng)絡的深度學習模型,該模型將這種結構考慮在內(nèi)。雖然這些模型難以實現(xiàn)且運行效率低下,但 PyTorch 使這些模型和其他復雜自然語言處理變得容易得多。Salesforce 正在使用 PyTorch 進行 NLP 和多任務學習。
研究:PyTorch 具有易用性、靈活性和快速原型設計,是研究的首選。斯坦福大學正在利用 PyTorch 的靈活性高效研究新的算法方法。
教育:Udacity 正在使用 PyTorch 培養(yǎng) AI 創(chuàng)新者。
PyTorch 的重要意義
數(shù)據(jù)科學家
對于熟悉 Python 的程序員而言,PyTorch 學習起來相對容易。它提供了簡單的調(diào)試、簡單的 API ,并且兼容各種內(nèi)置 Python 的擴展。其動態(tài)執(zhí)行模型也非常適合原型設計,盡管會產(chǎn)生一些性能開銷。
軟件開發(fā)者
PyTorch 支持各種功能,可以快速輕松地部署 AI 模型。它還具有豐富的庫生態(tài)系統(tǒng),如 Captum(用于模型可解釋性)、skorch(scikit-learn 兼容性)等,以支持開發(fā)。PyTorch 具有出色的加速器生態(tài)系統(tǒng),例如,Glow(用于訓練)和 NVIDIA TensorRT(用于推理)。
GPU:深度學習的關鍵
在架構方面,CPU 僅由幾個具有大緩存內(nèi)存的核心組成,一次只可以處理幾個軟件線程。相比之下,GPU 由數(shù)百個核心組成,可以同時處理數(shù)千個線程。
先進的深度學習神經(jīng)網(wǎng)絡可能有數(shù)百萬乃至十億以上的參數(shù)需要通過反向傳播進行調(diào)整。由于神經(jīng)網(wǎng)絡由大量相同的神經(jīng)元構建而成,因此本質(zhì)上具有高度并行性。這種并行性會自然地映射到 NGC (NVIDIA GPU Cloud),用戶可以在其中提取容器,這些容器具有可用于各種任務(例如計算機視覺、自然語言處理等)的預訓練模型,且所有依賴項和框架位于一個容器中。借助 NVIDA 的 TensorRT,使用 NVIDIA GPU 時,可以在 PyTorch 上顯著提高推理性能。
面向開發(fā)者的 NVIDIA 深度學習
GPU 加速深度學習框架能夠為設計和訓練自定義深度神經(jīng)網(wǎng)絡帶來靈活性,并為 Python 和 C/C++ 等常用編程語言提供編程接口。MXNet、PyTorch、TensorFlow 等廣泛使用的深度學習框架依賴于 NVIDIA GPU 加速庫,能夠提供高性能的多 GPU 加速訓練。
NVIDIA GPU 加速的端到端數(shù)據(jù)科學
基于 CUDA-X AI 創(chuàng)建的 NVIDIA RAPIDS開源軟件庫套件使您完全能夠在 GPU 上執(zhí)行端到端數(shù)據(jù)科學和分析流程。此套件依靠 NVIDIA CUDA 基元進行低級別計算優(yōu)化,但通過用戶友好型 Python 接口實現(xiàn)了 GPU 并行化和高帶寬顯存速度。
借助 RAPIDS GPU DataFrame,數(shù)據(jù)可以通過一個類似 Pandas 的接口加載到 GPU 上,然后用于各種連接的機器學習和圖形分析算法,而無需離開 GPU。這種級別的互操作性是通過 Apache Arrow 這樣的庫實現(xiàn)的。這可加速端到端流程(從數(shù)據(jù)準備到機器學習,再到深度學習)。
RAPIDS 支持在許多熱門數(shù)據(jù)科學庫之間共享設備內(nèi)存。這樣可將數(shù)據(jù)保留在 GPU 上,并省去了來回復制主機內(nèi)存的高昂成本。
審核編輯:湯梓紅
-
NVIDIA
+關注
關注
14文章
5188瀏覽量
105427 -
python
+關注
關注
56文章
4822瀏覽量
85855 -
pytorch
+關注
關注
2文章
808瀏覽量
13682
原文標題:NVIDIA 大講堂 | 什么是 PYTORCH ?
文章出處:【微信號:NVIDIA_China,微信公眾號:NVIDIA英偉達】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論