在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PyTorch教程-13.3. 自動并行

jf_pJlTbmA9 ? 來源:PyTorch ? 作者:PyTorch ? 2023-06-05 15:44 ? 次閱讀

深度學習框架(例如 MXNet 和 PyTorch)在后端自動構建計算圖。使用計算圖,系統了解所有依賴關系,并可以選擇性地并行執行多個非相互依賴的任務以提高速度。例如,第 13.2 節中的圖 13.2.2 獨立地初始化了兩個變量。因此,系統可以選擇并行執行它們。

通常,單個運算符將使用所有 CPU 或單個 GPU 上的所有計算資源。例如,dot算子將使用所有 CPU 上的所有內核(和線程),即使在一臺機器上有多個 CPU 處理器。這同樣適用于單個 GPU。因此,并行化對于單設備計算機不是很有用。有了多個設備,事情就更重要了。雖然并行化通常在多個 GPU 之間最相關,但添加本地 CPU 會略微提高性能。例如,參見 Hadjis等人。( 2016 年)專注于訓練結合 GPU 和 CPU 的計算機視覺模型。借助自動并行化框架的便利,我們可以在幾行 Python 代碼中實現相同的目標。更廣泛地說,我們對自動并行計算的討論集中在使用 CPU 和 GPU 的并行計算,以及計算和通信的并行化。

請注意,我們至少需要兩個 GPU 才能運行本節中的實驗。

import torch
from d2l import torch as d2l

from mxnet import np, npx
from d2l import mxnet as d2l

npx.set_np()

13.3.1。GPU 上的并行計算

讓我們首先定義一個要測試的參考工作負載:run 下面的函數使用分配到兩個變量中的數據在我們選擇的設備上執行 10 次矩陣-矩陣乘法:x_gpu1和 x_gpu2。

devices = d2l.try_all_gpus()
def run(x):
  return [x.mm(x) for _ in range(50)]

x_gpu1 = torch.rand(size=(4000, 4000), device=devices[0])
x_gpu2 = torch.rand(size=(4000, 4000), device=devices[1])

現在我們將函數應用于數據。為了確保緩存不會在結果中發揮作用,我們通過在測量之前對其中任何一個執行單次傳遞來預熱設備。torch.cuda.synchronize() 等待 CUDA 設備上所有流中的所有內核完成。它接受一個device參數,即我們需要同步的設備。current_device()如果設備參數為(默認),則它使用由 給出的當前設備None。

run(x_gpu1)
run(x_gpu2) # Warm-up all devices
torch.cuda.synchronize(devices[0])
torch.cuda.synchronize(devices[1])

with d2l.Benchmark('GPU1 time'):
  run(x_gpu1)
  torch.cuda.synchronize(devices[0])

with d2l.Benchmark('GPU2 time'):
  run(x_gpu2)
  torch.cuda.synchronize(devices[1])

GPU1 time: 0.4967 sec
GPU2 time: 0.5151 sec

如果我們刪除synchronize兩個任務之間的語句,系統就可以自由地自動在兩個設備上并行計算。

with d2l.Benchmark('GPU1 & GPU2'):
  run(x_gpu1)
  run(x_gpu2)
  torch.cuda.synchronize()

GPU1 & GPU2: 0.5000 sec

devices = d2l.try_all_gpus()
def run(x):
  return [x.dot(x) for _ in range(50)]

x_gpu1 = np.random.uniform(size=(4000, 4000), ctx=devices[0])
x_gpu2 = np.random.uniform(size=(4000, 4000), ctx=devices[1])

Now we apply the function to the data. To ensure that caching does not play a role in the results we warm up the devices by performing a single pass on either of them prior to measuring.

run(x_gpu1) # Warm-up both devices
run(x_gpu2)
npx.waitall()

with d2l.Benchmark('GPU1 time'):
  run(x_gpu1)
  npx.waitall()

with d2l.Benchmark('GPU2 time'):
  run(x_gpu2)
  npx.waitall()

GPU1 time: 0.5233 sec
GPU2 time: 0.5158 sec

If we remove the waitall statement between both tasks the system is free to parallelize computation on both devices automatically.

with d2l.Benchmark('GPU1 & GPU2'):
  run(x_gpu1)
  run(x_gpu2)
  npx.waitall()

GPU1 & GPU2: 0.5214 sec

在上述情況下,總執行時間小于其各部分的總和,因為深度學習框架會自動安排兩個 GPU 設備上的計算,而不需要代表用戶編寫復雜的代碼。

13.3.2。并行計算與通信

在許多情況下,我們需要在不同設備之間移動數據,比如在 CPU 和 GPU 之間,或者在不同 GPU 之間。例如,當我們想要執行分布式優化時會發生這種情況,我們需要在多個加速器卡上聚合梯度。讓我們通過在 GPU 上計算然后將結果復制回 CPU 來對此進行模擬

def copy_to_cpu(x, non_blocking=False):
  return [y.to('cpu', non_blocking=non_blocking) for y in x]

with d2l.Benchmark('Run on GPU1'):
  y = run(x_gpu1)
  torch.cuda.synchronize()

with d2l.Benchmark('Copy to CPU'):
  y_cpu = copy_to_cpu(y)
  torch.cuda.synchronize()

Run on GPU1: 0.5019 sec
Copy to CPU: 2.7168 sec

這有點低效。請注意,我們可能已經開始將 的部分內容復制y到 CPU,而列表的其余部分仍在計算中。這種情況會發生,例如,當我們計算小批量的(反向傳播)梯度時。一些參數的梯度將比其他參數更早可用。因此,在 GPU 仍在運行時開始使用 PCI-Express 總線帶寬對我們有利。在 PyTorch 中,幾個函數(例如to()和)copy_()承認一個顯式non_blocking參數,它允許調用者在不需要時繞過同步。設置non_blocking=True 允許我們模擬這種情況。

with d2l.Benchmark('Run on GPU1 and copy to CPU'):
  y = run(x_gpu1)
  y_cpu = copy_to_cpu(y, True)
  torch.cuda.synchronize()

Run on GPU1 and copy to CPU: 2.4682 sec

def copy_to_cpu(x):
  return [y.copyto(npx.cpu()) for y in x]

with d2l.Benchmark('Run on GPU1'):
  y = run(x_gpu1)
  npx.waitall()

with d2l.Benchmark('Copy to CPU'):
  y_cpu = copy_to_cpu(y)
  npx.waitall()

Run on GPU1: 0.5796 sec
Copy to CPU: 3.0989 sec

This is somewhat inefficient. Note that we could already start copying parts of y to the CPU while the remainder of the list is still being computed. This situation occurs, e.g., when we compute the gradient on a minibatch. The gradients of some of the parameters will be available earlier than that of others. Hence it works to our advantage to start using PCI-Express bus bandwidth while the GPU is still running. Removing waitall between both parts allows us to simulate this scenario.

with d2l.Benchmark('Run on GPU1 and copy to CPU'):
  y = run(x_gpu1)
  y_cpu = copy_to_cpu(y)
  npx.waitall()

Run on GPU1 and copy to CPU: 3.3488 sec

兩個操作所需的總時間(正如預期的那樣)小于它們各部分的總和。請注意,此任務不同于并行計算,因為它使用不同的資源:CPU 和 GPU 之間的總線。事實上,我們可以同時在兩個設備上進行計算和通信。如上所述,計算和通信之間存在依賴關系:y[i]必須在將其復制到 CPU 之前進行計算。幸運的是,系統可以y[i-1]邊計算邊 復制y[i],以減少總運行時間。

我們以在一個 CPU 和兩個 GPU 上進行訓練時簡單的兩層 MLP 的計算圖及其依賴關系的圖示作為結尾,如圖13.3.1所示。手動安排由此產生的并行程序將非常痛苦。這就是擁有基于圖形的計算后端進行優化的優勢所在。

poYBAGR9OqiAEhMjADhnzKcOtWI169.svg

圖 13.3.1兩層 MLP 在一個 CPU 和兩個 GPU 上的計算圖及其依賴關系。

13.3.3。概括

現代系統具有多種設備,例如多個 GPU 和 CPU。它們可以并行、異步使用。

現代系統還具有多種通信資源,例如 PCI Express、存儲(通常是固態驅動器或通過網絡)和網絡帶寬。它們可以并聯使用以達到最高效率。

后端可以通過自動并行計算和通信來提高性能。

13.3.4。練習

run在本節定義的函數中執行了八個操作。它們之間沒有依賴關系。設計一個實驗,看看深度學習框架是否會自動并行執行它們。

當單個操作員的工作量足夠小時,并行化甚至可以在單個 CPU 或 GPU 上提供幫助。設計一個實驗來驗證這一點。

設計一個實驗,在 CPU、GPU 上使用并行計算,并在兩個設備之間進行通信。

使用 NVIDIA 的Nsight等調試器 來驗證您的代碼是否有效。

設計包含更復雜數據依賴關系的計算任務,并運行實驗以查看是否可以在提高性能的同時獲得正確的結果。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 深度學習
    +關注

    關注

    73

    文章

    5507

    瀏覽量

    121294
  • pytorch
    +關注

    關注

    2

    文章

    808

    瀏覽量

    13250
收藏 人收藏

    評論

    相關推薦

    請問這是XC6SLX150-2CSG484I設備中此Fifo的最大頻率嗎?

    of this Fifo in a XC6SLX150-2CSG484I Device ?Analyze Timing with Floorplanner gives me no timing Results.I am using ISE 13.3. Any Ideas ?
    發表于 06-20 15:35

    使用ISE 13.3更改8.1 FIFO IP內核中的一些參數可能有什么問題?

    in 8.1 FIFO IP core with ISE 13.3. When I open the project in coregen it warns that the logiccore
    發表于 06-26 07:52

    Pytorch自動求導示例

    Pytorch自動微分的幾個例子
    發表于 08-09 11:56

    PyTorch如何入門

    PyTorch 入門實戰(一)——Tensor
    發表于 06-01 09:58

    iOS13.3和iPadOS13.3對比,都有哪些差異

    蘋果發布 iOS 13.3 和 iPadOS 13.3,距離 iOS/iPadOS 13.2.3 發布相隔兩周時間。可以通過訪問設置-通用-軟件更新完成 OTA 升級。 iOS 13.3
    的頭像 發表于 10-24 09:56 ?3639次閱讀

    基于PyTorch的深度學習入門教程之PyTorch簡單知識

    本文參考PyTorch官網的教程,分為五個基本模塊來介紹PyTorch。為了避免文章過長,這五個模塊分別在五篇博文中介紹。 Part1:PyTorch簡單知識 Part2:PyTorch
    的頭像 發表于 02-16 15:20 ?2278次閱讀

    基于PyTorch的深度學習入門教程之PyTorch自動梯度計算

    計算 Part3:使用PyTorch構建一個神經網絡 Part4:訓練一個神經網絡分類器 Part5:數據并行化 本文是關于Part2的內容。 Part2:PyTorch自動梯度計算
    的頭像 發表于 02-16 15:26 ?2048次閱讀

    基于PyTorch的深度學習入門教程之使用PyTorch構建一個神經網絡

    PyTorch自動梯度計算 Part3:使用PyTorch構建一個神經網絡 Part4:訓練一個神經網絡分類器 Part5:數據并行化 本文是關于Part3的內容。 Part3:使
    的頭像 發表于 02-15 09:40 ?2116次閱讀

    基于PyTorch的深度學習入門教程之DataParallel使用多GPU

    前言 本文參考PyTorch官網的教程,分為五個基本模塊來介紹PyTorch。為了避免文章過長,這五個模塊分別在五篇博文中介紹。 Part1:PyTorch簡單知識 Part2:PyTorch
    的頭像 發表于 02-15 09:55 ?4132次閱讀

    基于PyTorch的深度學習入門教程之PyTorch重點綜合實踐

    前言 PyTorch提供了兩個主要特性: (1) 一個n維的Tensor,與numpy相似但是支持GPU運算。 (2) 搭建和訓練神經網絡的自動微分功能。 我們將會使用一個全連接的ReLU網絡作為
    的頭像 發表于 02-15 10:01 ?1806次閱讀

    PyTorch 的 Autograd 機制和使用

    PyTorch 作為一個深度學習平臺,在深度學習任務中比 NumPy 這個科學計算庫強在哪里呢?我覺得一是 PyTorch 提供了自動求導機制,二是對 GPU 的支持。由此可見,自動
    的頭像 發表于 08-15 09:37 ?1115次閱讀

    PyTorch教程2.5之自動微分

    電子發燒友網站提供《PyTorch教程2.5之自動微分.pdf》資料免費下載
    發表于 06-05 11:38 ?0次下載
    <b class='flag-5'>PyTorch</b>教程2.5之<b class='flag-5'>自動</b>微分

    PyTorch教程13.3自動并行

    電子發燒友網站提供《PyTorch教程13.3自動并行.pdf》資料免費下載
    發表于 06-05 14:47 ?0次下載
    <b class='flag-5'>PyTorch</b>教程<b class='flag-5'>13.3</b>之<b class='flag-5'>自動</b><b class='flag-5'>并行</b>

    基于PyTorch的模型并行分布式訓練Megatron解析

    NVIDIA Megatron 是一個基于 PyTorch 的分布式訓練框架,用來訓練超大Transformer語言模型,其通過綜合應用了數據并行,Tensor并行和Pipeline并行
    的頭像 發表于 10-23 11:01 ?3122次閱讀
    基于<b class='flag-5'>PyTorch</b>的模型<b class='flag-5'>并行</b>分布式訓練Megatron解析

    pytorch怎么在pycharm中運行

    第一部分:PyTorch和PyCharm的安裝 1.1 安裝PyTorch PyTorch是一個開源的機器學習庫,用于構建和訓練神經網絡。要在PyCharm中使用PyTorch,首先需
    的頭像 發表于 08-01 16:22 ?1489次閱讀
    主站蜘蛛池模板: 成人午夜久久| semm亚洲欧美在线高清| 亚洲第一在线| 亚洲免费黄色网| 天天艹夜夜艹| 国模娜娜扒开嫩木耳| 色婷婷综合久久久中文字幕| 亚洲h视频| 很黄很污小说| 中文字幕有码在线视频| 亚欧美色| 日本高清色图| 黄色免费小视频| 亚洲夜夜爱| 夜夜五月天| 色妞女女女女女bbbb| 九色九色九色在线综合888| a一级视频| 美女扒开尿囗给男生桶爽| 亚洲高清美女一区二区三区| 日韩精品免费一级视频| 上海一级毛片| 免费观看成人毛片| 97综合久久| 久久天天躁夜夜躁狠狠躁2015 | 日本在线观看www| 黄色18网站| 婷婷爱五月天| 在线网站黄| 在线播放色| 欧美色p| www.色爱| 关晓彤被调教出奶水的视频| 欧美特级午夜一区二区三区| 视频在线欧美| 豆国产97在线 | 欧洲| 女人成午夜大片7777在线| 欧美巨大xxxx做受中文字幕| 一级片 在线播放| 亚洲黄色官网| 你懂的在线免费|