PyTorch 1.10正式版上線:Android NNAPI支持來了
廣受人們歡迎的深度學(xué)習(xí)框架 PyTorch 剛剛更新了 1.10 正式版,在 CUDA Graphs API 等方面進(jìn)行了諸多改進(jìn)。
PyTorch 是一個開源的 Python 機(jī)器學(xué)習(xí)庫,基于 Torch,底層由 C++ 實現(xiàn),主要應(yīng)用于人工智能領(lǐng)域,如自然語言處理,它最初由 Facebook 的人工智能研究團(tuán)隊開發(fā)。由于 PyTorch 定義網(wǎng)絡(luò)結(jié)構(gòu)簡單等特點(diǎn),自發(fā)布以來便受到眾多研究人的青睞。
經(jīng)過研究者的不斷努力,現(xiàn)在, PyTorch 更新到 PyTorch 1.10 版本。此版本由 1.9 版本以來的 3,400 多次 commits 組成,由 426 位貢獻(xiàn)者完成。
此次PyTorch 1.10 的更新側(cè)重于改進(jìn) PyTorch 的訓(xùn)練和性能以及開發(fā)人員的可用性。亮點(diǎn)包括以下:
集成了 CUDA Graphs API 以減少 CUDA 工作負(fù)載的 CPU 開銷;
FX、torch.special 和 nn.ModuleParametrization 等幾個前端 API 已從測試版變?yōu)榉€(wěn)定版;
除了 GPU 之外,JIT Compiler 中對自動融合的支持?jǐn)U展到 CPU;
Android NNAPI 支持現(xiàn)已推出測試版。
(注:從 PyTorch 1.6 版本開始,PyTorch 特性分為 Stable(穩(wěn)定版)、Beta(測試版)和 Prototype(原型版)。
PyTorch 1.10 最新特性
前端 API
使用 FX 進(jìn)行 Python 代碼轉(zhuǎn)換(穩(wěn)定版):FX 提供了一個用于轉(zhuǎn)換和降低 PyTorch 程序的 python 化平臺,它是一個工具包,在 1.10 版本中,F(xiàn)X 趨于穩(wěn)定,用戶可以使用 torch.fx 實現(xiàn)程序轉(zhuǎn)換。
torch.special(穩(wěn)定版):torch.special 模塊,類似于 SciPy 的特殊模塊,現(xiàn)在穩(wěn)定版可用。該模塊有 30 種運(yùn)算,包括 gamma、Bessel 和(高斯)誤差函數(shù)。
nn.Module 參數(shù)化(穩(wěn)定版):允許用戶在不修改 nn.Module 本身的情況下參數(shù)化任何參數(shù)等,在穩(wěn)定版中可用。此版本增加了權(quán)重歸一化 (weight_norm)、正交參數(shù)化(矩陣約束和部分剪枝),用戶在創(chuàng)建自己的參數(shù)化時更加靈活。
CUDA Graphs API 集成(測試版):PyTorch 現(xiàn)在集成了 CUDA Graphs API 以減少 CUDA 工作負(fù)載的 CPU 開銷。
CUDA Graphs 大大降低了 CPU 綁定 cuda(CPU-bound cuda)工作負(fù)載的 CPU 開銷,從而通過提高 GPU 利用率來提高性能。對于分布式工作負(fù)載,CUDA Graphs 還可以減少抖動,并且由于并行工作負(fù)載必須等待最慢的工作負(fù)載,因此減少抖動可以提高整體并行效率。
分布式訓(xùn)練
在 1.10 版本中,有許多特性在分布式包中從測試版過渡到穩(wěn)定版,具體包括:
Remote Module(穩(wěn)定版):此功能允許用戶遠(yuǎn)程操作模塊,就像使用本地模塊一樣,其中 RPC 對用戶是透明的;
DDP Communication Hook(穩(wěn)定版):此功能允許用戶覆蓋 DDP 如何跨進(jìn)程同步梯度;
ZeroRedundancyOptimizer(穩(wěn)定版):此功能可與 DistributedDataParallel 結(jié)合使用,以減少每個進(jìn)程優(yōu)化器狀態(tài)的大小。
性能優(yōu)化以及工具
(測試版)TorchScript 嚴(yán)格要求源代碼具有類型注釋才能成功編譯。長期以來,用戶只能通過反復(fù)試驗來添加缺失或不正確的類型注解,效率低下,耗時長。現(xiàn)在,PyTorch 1.10 利用 MonkeyType 等現(xiàn)有工具為 torch.jit.script 啟用了配置文件定向輸入,這使得該過程變得更容易、更快和更高效。
(測試版)CPU 融合:PyTorch 1.10 為 CPU 添加了一個基于 LLVM 的 JIT 編譯器,可以將 Torch 庫調(diào)用序列融合在一起以提高性能。雖然此前的版本在 GPU 上擁有此功能已有一段時間了,但 1.10 版本是第一次將編譯引入 CPU。
PyTorch Profiler
(測試版)PyTorch Profiler 的目標(biāo)是針對時間或內(nèi)存成本最高的執(zhí)行步驟,并可視化 GPU 和 CPU 之間的工作負(fù)載分布。PyTorch 1.10 包括以下主要功能:
增強(qiáng)型內(nèi)存視圖:這有助于用戶更好地了解內(nèi)存使用;
增強(qiáng)型內(nèi)核視圖:附加列顯示網(wǎng)格和塊大小以及每個線程共享內(nèi)存使用和寄存器的情況;
分布式訓(xùn)練:Gloo 現(xiàn)在支持分布式訓(xùn)練工作;
TensorCore:該工具顯示 Tensor Core(TC) 的使用,并為數(shù)據(jù)科學(xué)家和框架開發(fā)人員提供建議;
NVTX:對 NVTX markers 的支持是從舊版 autograd profiler 移植過來的;
支持移動設(shè)備分析:PyTorch profiler 現(xiàn)在與 TorchScript 、移動后端能夠更好的集成,支持移動工作負(fù)載的跟蹤收集。
支持 Android NNAPI
去年,PyTorch 官方發(fā)布了對 Android Neural Networks API (NNAPI) 的原型支持。PyTorch1.10 版本增加了更多的操作,包括在加載時對形狀的支持,以及在主機(jī)上運(yùn)行模型進(jìn)行測試的能力。
此外,遷移學(xué)習(xí)已經(jīng)添加到對象檢測示例中。
對于此次 PyTorch 的更新,網(wǎng)友也不僅贊嘆:「PyTorch 團(tuán)隊的出色工作,融合和 profiler 工作,非??幔 ?/p>
關(guān)于 PyTorch1.10 版本的更新,更多信息請參考:
Github: https://github.com/pytorch/pytorch/releases/tag/v1.10.0
參考鏈接:
https://pytorch.org/blog/pytorch-1.10-released/
https://www.marktechpost.com/2021/10/21/pytorch-releases-version-1-10-with-updates-on-cuda-graphs-apis/
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。