博客專(zhuān)欄

EEPW首頁(yè) > 博客 > PyTorch 1.10正式版上線:Android NNAPI支持來(lái)了

PyTorch 1.10正式版上線:Android NNAPI支持來(lái)了

發(fā)布人:機(jī)器之心 時(shí)間:2021-10-22 來(lái)源:工程師 發(fā)布文章

廣受人們歡迎的深度學(xué)習(xí)框架 PyTorch 剛剛更新了 1.10 正式版,在 CUDA Graphs API 等方面進(jìn)行了諸多改進(jìn)。

PyTorch 是一個(gè)開(kāi)源的 Python 機(jī)器學(xué)習(xí)庫(kù),基于 Torch,底層由 C++ 實(shí)現(xiàn),主要應(yīng)用于人工智能領(lǐng)域,如自然語(yǔ)言處理,它最初由 Facebook 的人工智能研究團(tuán)隊(duì)開(kāi)發(fā)。由于 PyTorch 定義網(wǎng)絡(luò)結(jié)構(gòu)簡(jiǎn)單等特點(diǎn),自發(fā)布以來(lái)便受到眾多研究人的青睞。

經(jīng)過(guò)研究者的不斷努力,現(xiàn)在, PyTorch 更新到 PyTorch 1.10 版本。此版本由 1.9 版本以來(lái)的 3,400 多次 commits 組成,由 426 位貢獻(xiàn)者完成。 

1.png

此次PyTorch 1.10 的更新側(cè)重于改進(jìn) PyTorch 的訓(xùn)練和性能以及開(kāi)發(fā)人員的可用性。亮點(diǎn)包括以下:

集成了 CUDA Graphs API 以減少 CUDA 工作負(fù)載的 CPU 開(kāi)銷(xiāo);

FX、torch.special 和 nn.ModuleParametrization 等幾個(gè)前端 API 已從測(cè)試版變?yōu)榉€(wěn)定版;

除了 GPU 之外,JIT Compiler 中對(duì)自動(dòng)融合的支持?jǐn)U展到 CPU;

Android NNAPI 支持現(xiàn)已推出測(cè)試版。

(注:從 PyTorch 1.6 版本開(kāi)始,PyTorch 特性分為 Stable(穩(wěn)定版)、Beta(測(cè)試版)和 Prototype(原型版)。

PyTorch 1.10 最新特性

2.png

前端 API

使用 FX 進(jìn)行 Python 代碼轉(zhuǎn)換(穩(wěn)定版):FX 提供了一個(gè)用于轉(zhuǎn)換和降低 PyTorch 程序的 python 化平臺(tái),它是一個(gè)工具包,在 1.10 版本中,F(xiàn)X 趨于穩(wěn)定,用戶(hù)可以使用 torch.fx 實(shí)現(xiàn)程序轉(zhuǎn)換。

torch.special(穩(wěn)定版):torch.special 模塊,類(lèi)似于 SciPy 的特殊模塊,現(xiàn)在穩(wěn)定版可用。該模塊有 30 種運(yùn)算,包括 gamma、Bessel 和(高斯)誤差函數(shù)。

nn.Module 參數(shù)化(穩(wěn)定版):允許用戶(hù)在不修改 nn.Module 本身的情況下參數(shù)化任何參數(shù)等,在穩(wěn)定版中可用。此版本增加了權(quán)重歸一化 (weight_norm)、正交參數(shù)化(矩陣約束和部分剪枝),用戶(hù)在創(chuàng)建自己的參數(shù)化時(shí)更加靈活。

CUDA Graphs API 集成(測(cè)試版):PyTorch 現(xiàn)在集成了 CUDA Graphs API 以減少 CUDA 工作負(fù)載的 CPU 開(kāi)銷(xiāo)。

CUDA Graphs 大大降低了 CPU 綁定 cuda(CPU-bound cuda)工作負(fù)載的 CPU 開(kāi)銷(xiāo),從而通過(guò)提高 GPU 利用率來(lái)提高性能。對(duì)于分布式工作負(fù)載,CUDA Graphs 還可以減少抖動(dòng),并且由于并行工作負(fù)載必須等待最慢的工作負(fù)載,因此減少抖動(dòng)可以提高整體并行效率。

分布式訓(xùn)練

在 1.10 版本中,有許多特性在分布式包中從測(cè)試版過(guò)渡到穩(wěn)定版,具體包括:

Remote Module(穩(wěn)定版):此功能允許用戶(hù)遠(yuǎn)程操作模塊,就像使用本地模塊一樣,其中 RPC 對(duì)用戶(hù)是透明的;

DDP Communication Hook(穩(wěn)定版):此功能允許用戶(hù)覆蓋 DDP 如何跨進(jìn)程同步梯度;

ZeroRedundancyOptimizer(穩(wěn)定版):此功能可與 DistributedDataParallel 結(jié)合使用,以減少每個(gè)進(jìn)程優(yōu)化器狀態(tài)的大小。

性能優(yōu)化以及工具

(測(cè)試版)TorchScript 嚴(yán)格要求源代碼具有類(lèi)型注釋才能成功編譯。長(zhǎng)期以來(lái),用戶(hù)只能通過(guò)反復(fù)試驗(yàn)來(lái)添加缺失或不正確的類(lèi)型注解,效率低下,耗時(shí)長(zhǎng)?,F(xiàn)在,PyTorch 1.10 利用 MonkeyType 等現(xiàn)有工具為 torch.jit.script 啟用了配置文件定向輸入,這使得該過(guò)程變得更容易、更快和更高效。

(測(cè)試版)CPU 融合:PyTorch 1.10 為 CPU 添加了一個(gè)基于 LLVM 的 JIT 編譯器,可以將 Torch 庫(kù)調(diào)用序列融合在一起以提高性能。雖然此前的版本在 GPU 上擁有此功能已有一段時(shí)間了,但 1.10 版本是第一次將編譯引入 CPU。

PyTorch Profiler

(測(cè)試版)PyTorch Profiler 的目標(biāo)是針對(duì)時(shí)間或內(nèi)存成本最高的執(zhí)行步驟,并可視化 GPU 和 CPU 之間的工作負(fù)載分布。PyTorch 1.10 包括以下主要功能:

增強(qiáng)型內(nèi)存視圖:這有助于用戶(hù)更好地了解內(nèi)存使用;

增強(qiáng)型內(nèi)核視圖:附加列顯示網(wǎng)格和塊大小以及每個(gè)線程共享內(nèi)存使用和寄存器的情況;

分布式訓(xùn)練:Gloo 現(xiàn)在支持分布式訓(xùn)練工作;

TensorCore:該工具顯示 Tensor Core(TC) 的使用,并為數(shù)據(jù)科學(xué)家和框架開(kāi)發(fā)人員提供建議;

NVTX:對(duì) NVTX markers 的支持是從舊版 autograd profiler 移植過(guò)來(lái)的;

支持移動(dòng)設(shè)備分析:PyTorch profiler 現(xiàn)在與 TorchScript 、移動(dòng)后端能夠更好的集成,支持移動(dòng)工作負(fù)載的跟蹤收集。

支持 Android NNAPI

去年,PyTorch 官方發(fā)布了對(duì) Android Neural Networks API (NNAPI) 的原型支持。PyTorch1.10 版本增加了更多的操作,包括在加載時(shí)對(duì)形狀的支持,以及在主機(jī)上運(yùn)行模型進(jìn)行測(cè)試的能力。

此外,遷移學(xué)習(xí)已經(jīng)添加到對(duì)象檢測(cè)示例中。

對(duì)于此次 PyTorch 的更新,網(wǎng)友也不僅贊嘆:「PyTorch 團(tuán)隊(duì)的出色工作,融合和 profiler 工作,非常酷!」

3.png

關(guān)于 PyTorch1.10 版本的更新,更多信息請(qǐng)參考:

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)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: Python

相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉