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

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

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

3天內不再提示

如何測量各種工作負載和GPU配置下收縮操作的性能

星星科技指導員 ? 來源:NVIDIA ? 作者:Markus Hoehnerbach ? 2022-04-20 10:46 ? 次閱讀

張量收縮是機器學習、計算化學和量子計算中許多重要工作的核心。隨著科學家和工程師們對不斷增長的問題的研究,基礎數據變得越來越大,計算時間也越來越長。

當張量收縮不再適合單個 GPU 時,或者如果在單個 GPU 上花費的時間太長,自然下一步是將收縮分布到多個 GPU 上。我們一直在用這個新功能擴展 cuTENSOR ,并將其作為一個名為 cuTENSORMg (多 GPU )的新庫發布。它在塊循環分布張量上提供單進程多 GPU 功能。

cuTENSORMg 的copy和contraction操作大致分為句柄、張量描述符和描述符。在這篇文章中,我們將解釋句柄和張量描述符,以及復制操作是如何工作的,并演示如何執行張量收縮。然后,我們將展示如何測量各種工作負載和 GPU 配置下收縮操作的性能。

庫把手

庫句柄表示參與計算的設備集。句柄還包含跨調用重用的數據和資源。通過將設備列表傳遞給cutensorMgCreate函數,可以創建庫句柄:

cutensorMgCreate(&handle, numDevices, devices);

cuTENSORMg 中的所有對象都是堆分配的。因此,必須通過匹配的destroy調用釋放它們。為了簡潔起見,我們在這篇文章中沒有展示這些,但是生產代碼應該銷毀它創建的所有對象,以避免泄漏。

cutensorMgDestroy(handle);

所有庫調用都返回cutensorStatus_t類型的錯誤代碼。在生產中,您應該始終檢查錯誤代碼,以便盡早檢測故障或使用問題。為了簡潔起見,我們在本文中省略了這些檢查,但它們包含在相應的示例代碼中。

除了錯誤代碼, cuTENSORMg 還提供與 cuTENSOR 類似的日志記錄功能 。可以通過適當設置CUTENSORMG_LOG_LEVEL環境變量來激活這些日志。例如,CUTENSORMG_LOG_LEVEL=1將為您提供有關返回的錯誤代碼的附加信息

張量描述符

張量描述符描述了張量在內存中的布局以及在設備中的分布。對于每種模式,有三個核心概念來確定布局:

extent:每個模式的邏輯大小。

blockSize:將extent細分為大小相等的塊,但最后的剩余塊除外。

deviceCount:確定塊在設備上的分布方式。

圖 1 顯示了extent和block size如何細分二維張量。

A 3x3 square showing block size vs extent. Block size accounts for a 1x1 block whereas extent is a large square layered on top of several blocks but does not exceed the full parameter of the 3x3 square.

圖 1 帶有范圍和塊的張量數據布局。綠色表示二維張量,藍色表示塊大小導致的塊。

A 3x3 square showing deviceCount [0] on the Y axis and deviceCount[1] on the X axis.

圖 2 以塊循環方式在設備上分布塊張量;不同的顏色代表不同的設備。

塊以循環方式分布,這意味著連續的塊被分配給不同的設備。圖 2 顯示了塊到設備的逐塊分布,將設備分配到使用另一個數組devices編碼的塊。該陣列是一個密集的柱狀主張量,其范圍與設備計數類似。

A 4x4 block with Y axis as blockStride[0] and X axis blockStride[1]. This block is comprised of smaller by 4x4 blocks with elementStride[1] as the X axis and and elementStride[0] as the Y axis.

圖 3 使用元素步距和塊步距的設備上數據布局。

最后,設備上的確切數據布局由每種模式的elementStride和blockStride 值決定。它們分別以元素為單位在線性存儲器中確定給定模式下兩個相鄰元素和相鄰塊的位移(圖 3 )。

這些屬性都是使用cutensorMgCreateTensorDescriptor調用設置的:

cutensorMgCreateTensorDescriptor(handle, &desc, numModes, extent, elementStride, blockSize, blockStride, deviceCount, numDevices, devices, type);

可以將NULL傳遞給elementStride、blockSize、blockStride和deviceCount。

如果elementStride是NULL,則使用通用列主布局假定數據布局密集。如果blockSize是NULL,則等于extent。如果blockStride是NULL,則它等于blockSize * elementStride,這將產生交錯塊格式。如果deviceCount為NULL,則所有設備計數都設置為 1 。在這種情況下,張量是分布式的,完全駐留在devices[0]的內存中。

通過將CUTENSOR_MG_DEVICE_HOST作為所屬設備傳遞,可以指定 tensor 位于主機上的固定、托管或定期分配的內存中。

復制操作

copy操作可以更改數據布局,包括將張量重新分配到不同的設備。其參數是源和目標張量描述符(descSrc和descDst),以及源和目標模式列表(modesSrc和modesDst)。這兩個張量在重合模式下的范圍必須匹配,但它們的其他方面可能不同。一個可能位于主機上,另一個跨設備,它們可能具有不同的阻塞和步幅。

與 cuTENSORMg 中的所有操作一樣,它分三步進行:

cutensorMgCopyDescriptor_t:編碼應該執行的操作。

cutensorMgCopyPlan_t:編碼操作的執行方式。

cutensorMgCopy:根據計劃執行操作。

第一步是創建復制描述符:

cutensorMgCreateCopyDescriptor(handle, &desc, descDst, modesDst, descSrc, modesSrc);

有了拷貝描述符,您可以查詢所需的設備端和主機端工作空間的數量。deviceWorkspaceSize陣列的元素數量與手柄中的設備數量相同。i-th 元素是句柄中i-th 設備所需的工作空間量。

cutensorMgCopyGetWorkspace(handle, desc, deviceWorkspaceSize, &hostWorkspaceSize);

確定工作空間大小后,規劃副本。你可以傳遞一個更大的工作空間大小,呼叫可能會利用更多的工作空間,或者你可以嘗試傳遞一個更小的大小。規劃可能能夠適應這一點,否則可能會產生錯誤。

cutensorMgCreateCopyPlan(handle, &plan, desc, deviceWorkspaceSize, hostWorkspaceSize

最后,計劃完成后,執行copy操作。

cutensorMgCopy(handle, plan, ptrDst, ptrSrc, deviceWorkspace, hostWorkspace, streams);

在這個調用中,ptrDstptrSrc是指針數組。它們包含對應的張量描述符中每個設備的一個指針。在本例中,ptrDst[0]對應于作為devices[0]傳遞給cutensorMgCreateTensorDescriptor的設備。

另一方面,deviceWorkspacestreams也是數組,其中每個條目對應一個設備。它們是根據庫句柄中設備的順序排序的,例如deviceWorkspace[0]streams[0]對應于在devices[0]傳遞給cutensorMgCreate的設備。工作空間必須至少與傳遞給cutensorMgCreateCopyPlan的工作空間大小相同。

收縮手術

cuTENSORMg 庫的核心是contraction操作。它目前實現了一個或多個設備上張量的張量收縮,但將來可能支持主機上的張量。作為復習,收縮是以下形式的操作:

D_{M,N,L} \leftarrow \alpha \sum_{K} A_{K,M,L} \cdot B_{K,N,L} + \beta C_{M,N,L^{3}}

其中ABCD是張量,MNLK是可以任意排列和交錯的模式列表。

copy操作一樣,它分三個階段進行:

  • cutensorMgCreateContractionDescriptor:對問題進行編碼。
  • cutensorMgCreateContractionPlan:對實現進行編碼。
  • cutensorMgContraction:使用計劃并執行實際收縮。

首先,根據張量描述符、模式列表和所需的計算類型(例如計算期間可能使用的最低精度數據)創建收縮描述符。

cutensorMgCreateContractionDescriptor(handle, &desc, descA, modesA, descB, modesB, descC, modesC, descD, modesD, compute);

由于收縮操作有更多的自由度,您還必須初始化find對象,以便更好地控制給定問題描述符的計劃創建。目前,這個find對象只有一個默認設置:

cutensorMgCreateContractionFind(handle, &find, CUTENSORMG_ALGO_DEFAULT);

然后,您可以按照為copy操作所做的操作來查詢工作空間需求。與該操作相比,您還傳入了findworkspace首選項:

cutensorMgContractionGetWorkspace(handle, desc, find, CUTENSOR_WORKSPACE_RECOMMENDED, deviceWorkspaceSize, &hostWorkspaceSize);

創建一個計劃:

cutensorMgCreateContractionPlan(handle, &plan, desc, find, deviceWorkspaceSize, hostWorkspaceSize);

最后,使用計劃執行收縮:

cutensorMgContraction(handle, plan, alpha, ptrA, ptrB, beta, ptrC, ptrD, deviceWorkspace, hostWorkspace, streams);

在這個調用中, alpha 和 beta 是與D張量類型相同的主機指針,除非D張量是半精度或BFloat16精度,在這種情況下是single precision。不同數組ptrAptrBptrCptrD中指針的順序對應于它們在描述符devices數組中的順序。deviceWorkspacestreams數組中指針的順序與庫句柄的devices數組中的順序相對應。

表演

你可以在CUDA 庫樣本GitHub 回購。我們將其擴展為兩個參數: GPU 的數量和比例因子。您可以隨意嘗試其他收縮、塊大小和縮放模式。它是以這樣一種方式編寫的,即在保持 K 不變的情況下,將 M 和 N 放大。它實現了形狀的幾乎 GEMM 形狀的張量收縮:

C_{M^{0}N^{0}M^{1}N^{1}M^{2}N^{2}} \leftarrow A_{M^{0}K^{0}M^{1}K^{1}M^{2}K^{2} B_K^{0}N^{0}K^{1}N^{1}K^{2}N^{2}}

M1和N1按比例放大,這些尺寸中的塊大小保持負載大致平衡。下圖顯示了在 DGX A100 上測量時的比例關系。

關于作者

Markus Hoehnerbach 是 cuTENSOR 和 cuTENSORMg 的高級軟件工程師。他擁有 RWTH 亞琛大學計算機科學博士學位。他感興趣的領域是結構化和非結構化張量的高性能計算及其在機器學習和計算科學中的應用。

審核編輯:郭婷

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

    關注

    28

    文章

    4768

    瀏覽量

    129216
  • 機器學習
    +關注

    關注

    66

    文章

    8438

    瀏覽量

    132916
收藏 人收藏

    評論

    相關推薦

    光伏逆變器負載何進行負載測試和性能評估?

    :在超過額定負載的條件,對光伏逆變器的輸出電壓、電流、功率因數等參數進行測量和記錄,檢查其是否能夠正常工作,以及長時間過載時的性能穩定性。
    發表于 12-12 09:44

    不同負載特性對電源濾波器性能有什么影響?

    電源濾波器在電子系統中至關重要,負載變化影響其性能,包括輸出電壓電流波動、濾波效果及穩定性。需根據負載特性選濾波器類型并優化,采用多種測試方法評估性能,確保在
    的頭像 發表于 12-10 16:24 ?215次閱讀
    不同<b class='flag-5'>負載</b>特性對電源濾波器<b class='flag-5'>性能</b>有什么影響?

    深度學習工作負載GPU與LPU的主要差異

    ,一個新的競爭力量——LPU(Language Processing Unit,語言處理單元)已悄然登場,LPU專注于解決自然語言處理(NLP)任務中的順序性問題,是構建AI應用不可或缺的一環。 本文旨在探討深度學習工作負載GPU
    的頭像 發表于 12-09 11:01 ?409次閱讀
    深度學習<b class='flag-5'>工作</b><b class='flag-5'>負載</b>中<b class='flag-5'>GPU</b>與LPU的主要差異

    燃料電池測試負載工作原理是什么?

    可以是純電阻負載,也可以是包含電容、電感等元件的復雜負載負載的大小和性質可以根據實際需求進行調整。 監測燃料電池性能:在測試負載的作用
    發表于 12-06 16:31

    多通道負載測試和性能評估?

    多通道負載測試和性能評估是軟件質量保證的重要組成部分,它們可以幫助我們發現和解決系統的性能瓶頸,提高系統的可用性和穩定性。 多通道負載測試是一種模擬多個用戶同時訪問系統的方法,以檢查系
    發表于 11-11 16:44

    nginx負載均衡配置介紹

    目錄 nginx負載均衡 nginx負載均衡介紹 反向代理與負載均衡 nginx負載均衡配置 Keepalived高可用nginx
    的頭像 發表于 11-10 13:39 ?291次閱讀
    nginx<b class='flag-5'>負載</b>均衡<b class='flag-5'>配置</b>介紹

    程控水冷阻性負載主要工作方式有哪些

    程控水冷阻性負載是一種模擬電力系統負載的設備,主要用于測試電力設備的性能和穩定性。其主要工作方式有以下幾種: 恒流工作模式:在恒流
    發表于 11-05 11:25

    常見GPU問題及解決方法

    各種問題。以下是一些常見的GPU問題及其解決方法: GPU驅動程序過時或不兼容 問題描述:GPU驅動程序是GPU
    的頭像 發表于 10-27 14:12 ?1804次閱讀

    如何提高GPU性能

    在當今這個視覺至上的時代,GPU(圖形處理單元)的性能對于游戲玩家、圖形設計師、視頻編輯者以及任何需要進行高強度圖形處理的用戶來說至關重要。GPU不僅是游戲和多媒體應用的心臟,它還在科學計算、深度
    的頭像 發表于 10-27 11:21 ?843次閱讀

    GPU性能服務器配置

    GPU性能服務器作為提升計算速度和效率的關鍵設備,在各大應用場景中發揮著越來越重要的作用。在此,petacloud.ai小編為你介紹GPU性能服務器的
    的頭像 發表于 10-21 10:42 ?269次閱讀

    交流負載箱的特點和優勢有哪些?

    僅可以節省能源成本,還可以降低設備的維護和更換成本。 提高工作效率:交流負載箱可以快速地模擬各種負載,使得電力設備的性能測試和驗證
    發表于 09-02 13:53

    借助NVIDIA Aerial CUDA增強5G/6G的DU性能工作負載整合

    Aerial CUDA 加速無線接入網 (RAN)可加速電信工作負載,使用 CPU、GPU 和 DPU 在云原生加速計算平臺上提供更高水平的頻譜效率 (SE)。
    的頭像 發表于 05-24 11:10 ?642次閱讀
    借助NVIDIA Aerial CUDA增強5G/6G的DU<b class='flag-5'>性能</b>和<b class='flag-5'>工作</b><b class='flag-5'>負載</b>整合

    BOPP煙膜熱收縮性能檢測方法

    擠技術,以確保薄膜具有優化的性能組合。測試BOPP煙膜的熱收縮性能至關重要,BOPP煙膜的熱收縮性能直接影響煙盒的成型和密封效果。如果熱
    的頭像 發表于 05-11 16:29 ?452次閱讀
    BOPP煙膜熱<b class='flag-5'>收縮</b><b class='flag-5'>性能</b>檢測方法

    電機負載測試設備

    電機負載測試設備是現代工業生產中不可或缺的一種設備。它的主要作用是對電機進行負載測試,以確保電機在各種工作條件下性能穩定可靠。本文將詳細介
    的頭像 發表于 03-20 15:51 ?1168次閱讀
    電機<b class='flag-5'>負載</b>測試設備

    CC工作模式電子負載運用

    電子負載是測試電源、電池和其他電子設備性能的設備。在真實世界負載的模擬條件。CC工作模式是電子負載
    的頭像 發表于 03-04 16:21 ?1258次閱讀
    CC<b class='flag-5'>工作</b>模式<b class='flag-5'>下</b>電子<b class='flag-5'>負載</b>運用
    主站蜘蛛池模板: 黄色尤物| 日韩视频 中文字幕 视频一区 | 久久精品亚洲精品国产欧美 | 淫五月| 日韩午夜大片 | 久久久久久综合 | 色女孩网站 | 黄视频网站在线 | 一区二区福利 | 欧美一级看片a免费观看 | 成人永久免费视频网站在线观看 | 九色国产在视频线精品视频 | 一级黄色片欧美 | 亚洲欧美在线视频免费 | 99午夜高清在线视频在观看 | 国产成人精品亚洲日本在线观看 | 成在线人视频免费视频 | 久久亚洲精品成人综合 | aaa一级片 | 人人艹在线视频 | 天天做天天爱夜夜想毛片 | 久久久午夜精品理论片 | 亚洲www| 午夜视频在线免费播放 | 欧美在线高清视频 | 日韩毛片高清免费 | 大美女久久久久久j久久 | 看全黄大片狐狸视频在线观看 | 天天射天天摸 | 大伊人网 | 性欧美高清极品猛交 | 日本亚洲欧美国产日韩ay高清 | 欧洲亚洲一区 | a级毛片免费观看网站 | 久久国产精品免费观看 | xxx性xxx乱| аⅴ资源中文在线天堂 | 久久精品视频免费播放 | 日本黄色三级视频 | 国产精品激情综合久久 | 中文字幕一区二区三区 精品 |