pycharm運行模型時怎么設置權重?_使用AMP和Tensor Cores得到更快速,更節省內存的PyTorch模型...

點擊上方“AI派”,關注公眾號,選擇加“星標“或“置頂”

導讀

只需要添加幾行代碼,就可以得到更快速,更省顯存的PyTorch模型。

e20e4fc1cd8e4532b83a7cedb7e5d5eb.png

你知道嗎,在1986年Geoffrey Hinton就在Nature論文中給出了反向傳播算法?

此外,卷積網絡最早是由Yann le cun在1998年提出的,用于數字分類,他使用了一個卷積層。但是直到2012年晚些時候,Alexnet才通過使用多個卷積層來實現最先進的imagenet。

那么,是什么讓他們現在如此出名,而不是之前呢?

只有在我們擁有大量計算資源的情況下,我們才能夠在最近的過去試驗和充分利用深度學習的潛力。

但是,我們是否已經足夠好地使用了我們的計算資源呢?我們能做得更好嗎?

這篇文章的主要內容是關于如何利用Tensor Cores和自動混合精度更快地訓練深度學習網絡

什么是Tensor Cores?

根據NVIDIA的網站:

NVIDIA Turing和Volta GPUs都是由Tensor Cores驅動的,這是一項革命性的技術,提供了突破性的AI性能。Tensor Cores可以加速AI核心的大矩陣運算,在一次運算中就可以完成混合精度的矩陣乘法和累加運算。在一個NVIDIA GPU上有數百個Tensor Cores并行運行,這大大提高了吞吐量和效率。

簡單地說,它們是專門的cores,非常適合特定類型的矩陣操作

fb441df9bc991d4c75702020c8b3d64c.png

我們可以將兩個FP16矩陣相乘,并將其添加到一個FP16/FP32矩陣中,從而得到一個FP16/FP32矩陣。Tensor cores支持混合精度數學,即以半精度(FP16)進行輸入,以全精度(FP32)進行輸出。上述類型的操作對許多深度學習任務具有內在價值,而Tensor cores為這種操作提供了專門的硬件。

現在,使用FP16和FP32主要有兩個好處。

  1. FP16需要更少的內存,因此更容易訓練和部署大型神經網絡。它還只需要較少的數據移動。
  2. 數學運算在降低精度的Tensor cores運行得更快。NVIDIA給出的Volta GPU的確切數字是:FP16的125 TFlops vs FP32的15.7 TFlops(8倍加速)。

但也有缺點。當我們從FP32轉到FP16時,我們需要降低精度。

cb3b6a8e51737bc78b3c9b48cdd7efed.png

FP32 vs FP16: FP32 有8個指數位和23個分數位,而FP16有5個指數位和10個分數位。

但是FP32真的有必要嗎?

實際上,FP16可以很好地表示大多數權重和梯度。所以存儲和使用FP32是很浪費的。

那么,我們如何使用Tensor Cores?

我檢查了一下我的Titan RTX GPU有576個tensor cores和4608個NVIDIA CUDA核心。但是我如何使用這些tensor cores呢?

坦白地說,NVIDIA用幾行代碼就能提供自動混合精度,因此使用tensor cores很簡單。我們需要在代碼中做兩件事:

  1. 需要用到FP32的運算比如Softmax之類的就分配用FP32,而Conv之類的操作可以用FP16的則被自動分配用FP16。

0590184436b84ecf9728ae7566b9eed2.png

  1. 使用損失縮放 為了保留小的梯度值。梯度值可能落在FP16的范圍之外。在這種情況下,梯度值被縮放,使它們落在FP16范圍內。

2d440a921b9388eb4778b96c253e4f52.png

如果你還不了解背景細節也沒關系,代碼實現相對簡單

使用PyTorch進行混合精度訓練:

讓我們從PyTorch中的一個基本網絡開始。

N,?D_in,?D_out?=?64,?1024,?512
x?=?torch.randn(N,?D_in,?device="cuda")
y?=?torch.randn(N,?D_out,?device="cuda")
model?=?torch.nn.Linear(D_in,?D_out).cuda()
optimizer?=?torch.optim.SGD(model.parameters(),?lr=1e-3)for?to?in?range(500):
???y_pred?=?model(x)
???loss?=?torch.nn.functional.mse_loss(y_pred,?y)
???optimizer.zero_grad()
???loss.backward()
???optimizer.step()

為了充分利用自動混合精度訓練的優勢,我們首先需要安裝apex庫。只需在終端中運行以下命令。

$?git?clone?https://github.com/NVIDIA/apex$?cd?apex$?pip?install?-v?--no-cache-dir?--global-option="--cpp_ext"?--global-option="--cuda_ext"?./

然后,我們只需向神經網絡代碼中添加幾行代碼,就可以利用自動混合精度(AMP)。

from?apex?import?amp
N,?D_in,?D_out?=?64,?1024,?512
x?=?torch.randn(N,?D_in,?device="cuda")
y?=?torch.randn(N,?D_out,?device="cuda")
model?=?torch.nn.Linear(D_in,?D_out).cuda()
optimizer?=?torch.optim.SGD(model.parameters(),?lr=1e-3)
model,?optimizer?=?amp.initialize(model,?optimizer,?opt_level="O1")for?to?in?range(500):
???y_pred?=?model(x)
???loss?=?torch.nn.functional.mse_loss(y_pred,?y)
???optimizer.zero_grad()
???with?amp.scale_loss(loss,?optimizer)?as?scaled_loss:
??????scaled_loss.backward()
???optimizer.step()

在這里你可以看到我們用amp.initialize初始化了我們的模型。我們還使用amp.scale_loss來指定損失縮放。

基準測試

我們可以通過使用這個git倉庫:https://github.com/znxlwm/pytoring-apex-experiment來對amp的性能進行基準測試,它在CIFAR數據集上對VGG16模型進行基準測試。我只需要修改幾行代碼就可以了。你可以在這里找到修改后的版本:https://github.com/MLWhiz/data_science_blogs/tree/master/amp。要運行自己的基準代碼,你需要:

git?clone?https://github.com/MLWhiz/data_science_blogs
cd?data_science_blogs/amp/pytorch-apex-experiment/
python?run_benchmark.py
python?make_plot.py?--GPU?'RTX'?--method?'FP32'?'FP16'?'amp'?--batch?128?256?512?1024?2048

這會在home目錄中生成下面的圖:

806a68a4fadc28026c7ba98437f53b1e.png

在這里,我使用不同的精度和批大小設置訓練了同一個模型的多個實例。我們可以看到,從FP32到amp,內存需求減少,而精度保持大致相同。時間也會減少,但不會減少那么多。這可能是由于數據集或模型太簡單。

根據NVIDIA給出的基準測試,AMP比標準的FP32快3倍左右,如下圖所示

d47a619efbcb1e728f883c8ebc9db434.png

在單精度和自動混合精度兩種精度下,加速比為固定周期訓練的時間比。
1cb718e14a9edd6afeba64f42ce6d630.png—END—文末福利各位猿們,還在為記不住API發愁嗎,哈哈哈,最近發現了國外大師整理了一份Python代碼速查表和Pycharm快捷鍵sheet,火爆國外,這里分享給大家。這個是一份Python代碼速查表

29f1ac6e656cbfc5ae1a4806ed405382.png

下面的寶藏圖片是2張(windows && Mac)高清的PyCharm快捷鍵一覽圖

e585f0f07455359d3b96f651f7959a15.png

怎樣獲取呢?可以添加我們的AI派團隊的程序媛姐姐

一定要備注【高清圖】

?????

d38ebc9720a2a266e9ec585eccbf7655.png

?我們的程序媛小姐姐微信要記得備注【高清圖】

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539299.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539299.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539299.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

引入靜態變量_Common Lisp變量的一些事情

Lisp-1 vs Lisp-2[1]Scheme的求值模型非常簡單:只是用一個名字空間,所有表達式中相應位置的值應該是明確的。Common Lisp和Scheme最大的不同是,函數名字空間和數據的名字空間是分離的。操作函數名字空間的語句包括,defun&#xff…

JobTracker和TaskTracker

轉載:http://blog.csdn.net/keda8997110/article/details/8348705 ----------------------------------------------------------------------------------------- JobTracker和TaskTracker JobTracker 對應于 NameNode TaskTracker 對應于 DataNode DataNode 和Na…

c理c利用計算機怎么彈,通過匯編一個簡單的C程序,分析匯編代碼理解計算機是如何工作的...

通過匯編一個簡單的C程序,分析匯編代碼理解計算機是如何工作的計算機的工作方式:現代計算機的基本體系結構都是采用馮諾依曼結構,馮諾依曼的設計思想最重要之處是"存儲程序"的這個概念。計算機的工作過程,就是執行程序的…

Linux安裝MySQL的兩種方法

原文鏈接:http://blog.csdn.net/superchanon/article/details/8546254 --------------------------------------------------------------------------------------- 1. 運行平臺:CentOS 6.3 x86_64,基本等同于RHEL 6.3 2. 安裝…

jenkins 手動執行_想知道如何用Jenkins自動執行Python腳本輸出測試報告?

前言在用python做自動化測試時,我們寫好代碼,然后需要執行才能得到測試報告,這時我們可以通過 Jenkins 來進一步完成自動化工作。借助Jenkins,我們可以結合 Git/SVN 自動拉取代碼,可以設置定時構建,接著就可…

VR 影院,約嗎?

世界第一家 VR 影院已經開張,朋友,去不? 世界第一家 VR 影院正式開張 (無大屏的 VR 電影院) 在被稱為 VR 元年的 2016 年,越來越多的人加入了這個新興的領域,各種傳統應用也在被 VR 包裝之后以…

redis cluster 分布式鎖_關于分布式鎖原理的一些學習與思考redis分布式鎖,zookeeper分布式鎖...

首先分布式鎖和我們平常講到的鎖原理基本一樣,目的就是確保,在多個線程并發時,只有一個線程在同一刻操作這個業務或者說方法、變量。在一個進程中,也就是一個jvm 或者說應用中,我們很容易去處理控制,在jdk …

會計行業被計算機取代馬云,會計人:為什么我神煩“人工智能取代說”?

原標題:會計人:為什么我神煩“人工智能取代說”?原創來源:學會計有方法從財會機器人誕生到馬云的無人商店,全行業掀起了一股“人工智能取代說”的熱潮。有些財會朋友在一輪又一輪的信息轟炸下,倍感壓力&…

mysql5.6允許遠程服務器訪問數據庫

創建一個mysql用戶,并設置可以遠程訪問 grant usage on *.* to fredlocalhost identified by fred;//創建用戶fred密碼ferdselect host,user,password from mysql.user where userfred;//查看記錄 grant all privileges on *.* to fred%identified by fred;//設置可以遠程訪問…

sp烘焙流程_小手雷-PBR材質流程(一)——(基本材質)

小手雷-PBR材質流程(一)Substance Painter生存手冊經過了12個章節的講解后,已經完結了(。・ω・。)相信大家經過了生存手冊這一基礎教程過后,對Substance Painter這款軟件已經有了比較堅實的基礎了,…

MyBatis-進階2

typeHandler typeHandler有什么用? 你可以重寫類型處理器或創建你自己的類型處理器來處理不支持的或非標準的類型。 具體做法為:實現 org.apache.ibatis.type.TypeHandler 接口, 或繼承一個很便利的類 org.apache.ibatis.type.BaseTypeHandle…

python中 r是什么意思_python中rb含義理解

Python文件讀寫的幾種模式: r,rb,w,wb 那么在讀寫文件時,有無b標識的的主要區別在哪里呢? 文件使用方式標識 r:默認值,表示從文件讀取數據 w:表示要向文件寫入數據,并截斷以前的內容 a:表示要向文件寫入數據&#xff0…

哈佛大學計算機生物科學,生命科學專業

【出國留學網】昨日,泰晤士報公布了最新版2018年世界大學生命科學排名,哈佛大學位列第一。本文是關于世界各國大學在本次生命科學排名中的具體表現,供你選校參考。The 2018 Times Higher Education World University Rankings’ table for li…

怎樣呵護友誼_呵護真正的友情,助力漫長的人生

友情,即友誼,是指朋友和朋友之間的感情。它是一種很美妙的東西,可以讓你在失落的時候變得高興起來,可以讓你走出苦海,去迎接新的人生。它就像一種你無法說出又可以感到快樂無比的東西。只有擁有真正朋友的人&#xff0…

【Day41】Python之路——AJAX

什么是AJAX AJAX Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。 優點: 不重新加載整個頁面的情況下,可以與服務器交換數據并更新部分網頁內容 不需要任何瀏覽器插件,但需要用戶允許JavaScript在瀏覽器上執行 同源…

LINUX重啟MYSQL的命令

原文:http://blog.csdn.net/liuyong0818/article/details/5693336 ------------------------原文有錯誤,本文轉載時已修改--------- 如何啟動/停止/重啟MySQL 一、啟動方式 1、使用 service 啟動:service mysql start 2、使用 mysql 腳…

html css子標簽,HTML+CSS系列:CSS選擇器(標簽、ID、類、通配符、后代、子元素、并集、偽類)...

一.標簽選擇器Documenth1 {color: red;}h2{color: green;}Hello World!Hello World!Hello !Hello !二.類選擇器Document.box {color: green;}.box1 {font-size: 26px;}Hello World!Hello World!三.ID選擇器Document#box{color: green;}Hello World!四.通配符選擇器Document*{ma…

aes離線解密工具_如何在Python中解密OpenSSL AES加密文件?

OpenSSL為AES加密提供了一種流行的(但不安全 - 見下文!)命令行界面:openssl aes-256-cbc -salt -in filename -out filename.encPython以PyCrypto包的形式支持AES,但它只提供工具。如何使用Python / PyCrypto解密使用OpenSSL加密的文件&#…

什么是Hive

Hive 是建立在 Hadoop 上的數據倉庫基礎構架。 它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL ),這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。 Hive 定義了簡單的類 SQL 查詢語言&#xff0c…

VUE-搜索過濾器

VUE非常實用的搜索過濾&#xff0c;喜歡點個贊哦 廢話不多說&#xff0c;先來看看效果 1 引入vue <script src"https://cdn.jsdelivr.net/npm/vue"></script>2 HTML <div id"app"><input v-modelsearch /><ul v-if"search…