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