最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

AMP?Tensor?Cores節(jié)省內(nèi)存PyTorch模型詳解

 更新時(shí)間:2022年10月24日 11:14:58   作者:ronghuaiyang  
這篇文章主要為大家介紹了AMP?Tensor?Cores節(jié)省內(nèi)存PyTorch模型詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

導(dǎo)讀

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

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

此外,卷積網(wǎng)絡(luò)最早是由Yann le cun在1998年提出的,用于數(shù)字分類,他使用了一個(gè)卷積層。但是直到2012年晚些時(shí)候,Alexnet才通過使用多個(gè)卷積層來實(shí)現(xiàn)最先進(jìn)的imagenet。

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

只有在我們擁有大量計(jì)算資源的情況下,我們才能夠在最近的過去試驗(yàn)和充分利用深度學(xué)習(xí)的潛力。

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

這篇文章的主要內(nèi)容是關(guān)于如何利用Tensor Cores和自動(dòng)混合精度更快地訓(xùn)練深度學(xué)習(xí)網(wǎng)絡(luò)。

什么是Tensor Cores?

根據(jù)NVIDIA的網(wǎng)站:

NVIDIA Turing和Volta GPUs都是由Tensor Cores驅(qū)動(dòng)的,這是一項(xiàng)突破性的技術(shù),提供了突破性的AI性能。Tensor Cores可以加速AI核心的大矩陣運(yùn)算,在一次運(yùn)算中就可以完成混合精度的矩陣乘法和累加運(yùn)算。在一個(gè)NVIDIA GPU上有數(shù)百個(gè)Tensor Cores并行運(yùn)行,這大大提高了吞吐量和效率。

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

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

現(xiàn)在,使用FP16和FP32主要有兩個(gè)好處。

  • FP16需要更少的內(nèi)存,因此更容易訓(xùn)練和部署大型神經(jīng)網(wǎng)絡(luò)。它還只需要較少的數(shù)據(jù)移動(dòng)。
  • 數(shù)學(xué)運(yùn)算在降低精度的Tensor cores運(yùn)行得更快。NVIDIA給出的Volta GPU的確切數(shù)字是:FP16的125 TFlops vs FP32的15.7 TFlops(8倍加速)。

但也有缺點(diǎn)。當(dāng)我們從FP32轉(zhuǎn)到FP16時(shí),我們需要降低精度。

FP32 vs FP16: FP32 有8個(gè)指數(shù)位和23個(gè)分?jǐn)?shù)位,而FP16有5個(gè)指數(shù)位和10個(gè)分?jǐn)?shù)位。

但是FP32真的有必要嗎?

實(shí)際上,F(xiàn)P16可以很好地表示大多數(shù)權(quán)重和梯度。所以存儲(chǔ)和使用FP32是很浪費(fèi)的。

那么,我們?nèi)绾问褂肨ensor Cores?

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

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

  • 需要用到FP32的運(yùn)算比如Softmax之類的就分配用FP32,而Conv之類的操作可以用FP16的則被自動(dòng)分配用FP16。

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

如果你還不了解背景細(xì)節(jié)也沒關(guān)系,代碼實(shí)現(xiàn)相對(duì)簡(jiǎn)單。

使用PyTorch進(jìn)行混合精度訓(xùn)練:

讓我們從PyTorch中的一個(gè)基本網(wǎng)絡(luò)開始。

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()

為了充分利用自動(dòng)混合精度訓(xùn)練的優(yōu)勢(shì),我們首先需要安裝apex庫。只需在終端中運(yùn)行以下命令。

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

然后,我們只需向神經(jīng)網(wǎng)絡(luò)代碼中添加幾行代碼,就可以利用自動(dòng)混合精度(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來指定損失縮放。

基準(zhǔn)測(cè)試

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

這會(huì)在home目錄中生成下面的圖:

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

根據(jù)NVIDIA給出的基準(zhǔn)測(cè)試,AMP比標(biāo)準(zhǔn)的FP32快3倍左右,如下圖所示。

在單精度和自動(dòng)混合精度兩種精度下,加速比為固定周期訓(xùn)練的時(shí)間比。

以上就是AMP Tensor Cores節(jié)省內(nèi)存PyTorch模型詳解的詳細(xì)內(nèi)容,更多關(guān)于AMP Tensor Cores 內(nèi)存模型PyTorch的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 使用SMTP發(fā)送郵件的代碼小結(jié)

    Python 使用SMTP發(fā)送郵件的代碼小結(jié)

    python的smtplib提供了一種很方便的途徑發(fā)送電子郵件。它對(duì)smtp協(xié)議進(jìn)行了簡(jiǎn)單的封裝,需要的朋友可以參考下
    2016-09-09
  • Python創(chuàng)建對(duì)稱矩陣的方法示例【基于numpy模塊】

    Python創(chuàng)建對(duì)稱矩陣的方法示例【基于numpy模塊】

    這篇文章主要介紹了Python創(chuàng)建對(duì)稱矩陣的方法,結(jié)合實(shí)例形式分析了Python基于numpy模塊實(shí)現(xiàn)矩陣運(yùn)算的相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • 詳解基于django實(shí)現(xiàn)的webssh簡(jiǎn)單例子

    詳解基于django實(shí)現(xiàn)的webssh簡(jiǎn)單例子

    這篇文章主要介紹了基于 django 實(shí)現(xiàn)的 webssh 簡(jiǎn)單例子,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • tensorflow使用指定gpu的方法

    tensorflow使用指定gpu的方法

    TensorFlow是一個(gè)基于數(shù)據(jù)流編程(dataflow programming)的符號(hào)數(shù)學(xué)系統(tǒng),被廣泛應(yīng)用于各類機(jī)器學(xué)習(xí),這篇文章主要介紹了tensorflow使用指定gpu的方法,需要的朋友可以參考下
    2020-02-02
  • 在Python下嘗試多線程編程

    在Python下嘗試多線程編程

    這篇文章主要介紹了在Python下多線程編程的嘗試,由于GIL的存在,多線程在Python開發(fā)領(lǐng)域一直是個(gè)熱門問題,需要的朋友可以參考下
    2015-04-04
  • python 切片和range()用法說明

    python 切片和range()用法說明

    首先需要明白,可迭代對(duì)象,按照正數(shù)索引(正序)是從0開始的,按照負(fù)數(shù)索引(逆序)是從-1開始的
    2013-03-03
  • 總結(jié)用Pdb庫調(diào)試Python的方式及常用的命令

    總結(jié)用Pdb庫調(diào)試Python的方式及常用的命令

    大家都知道Python是自帶Pdb庫,使用Pdb調(diào)試Python程序還是很方便的。但是遠(yuǎn)程調(diào)試、多線程,Pdb是搞不定的,下面一起來看看用Pdb庫調(diào)試Python的方式及常用的命令。
    2016-08-08
  • 500行python代碼實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    500行python代碼實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了500行python代碼實(shí)現(xiàn)飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Python使用pylab庫實(shí)現(xiàn)畫線功能的方法詳解

    Python使用pylab庫實(shí)現(xiàn)畫線功能的方法詳解

    這篇文章主要介紹了Python使用pylab庫實(shí)現(xiàn)畫線功能的方法,結(jié)合具體實(shí)例分析了Python使用pylab庫的相關(guān)函數(shù)實(shí)現(xiàn)畫線功能的操作技巧,并附帶說明了相關(guān)函數(shù)與參數(shù)功能,需要的朋友可以參考下
    2017-06-06
  • Python3實(shí)現(xiàn)從指定路徑查找文件的方法

    Python3實(shí)現(xiàn)從指定路徑查找文件的方法

    這篇文章主要介紹了Python3實(shí)現(xiàn)從指定路徑查找文件的方法,涉及Python目錄與文件的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

铜梁县| 西华县| 花莲县| 会昌县| 临沧市| 丘北县| 都安| 平定县| 绍兴县| 忻州市| 盘山县| 河西区| 东宁县| 车险| 昭苏县| 昌宁县| 汝城县| 嘉兴市| 青海省| 读书| 色达县| 石台县| 古交市| 绿春县| 灵武市| 新乡县| 伊吾县| 霍邱县| 青铜峡市| 雅安市| 文昌市| 临猗县| 龙门县| 客服| 衡阳市| 体育| 丰顺县| 策勒县| 桦南县| 龙口市| 营山县|