日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

高效框架互操作性第1部分:內(nèi)存布局和內(nèi)存池

星星科技指導(dǎo)員 ? 來源:NVIDIA ? 作者:NVIDIA ? 2022-04-07 11:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

介紹

高效的管道設(shè)計對數(shù)據(jù)科學(xué)家至關(guān)重要。在編寫復(fù)雜的端到端工作流時,您可以從各種構(gòu)建塊中進行選擇,每種構(gòu)建塊都專門用于特定任務(wù)。不幸的是,在數(shù)據(jù)格式之間重復(fù)轉(zhuǎn)換容易出錯,而且會降低性能。讓我們改變這一點!

在本系列文章中,我們將討論高效框架互操作性的不同方面:

我們從這篇文章開始討論不同內(nèi)存布局的優(yōu)缺點,以及異步內(nèi)存分配的內(nèi)存池,以實現(xiàn)零拷貝功能。

在第二篇文章中,我們重點介紹了數(shù)據(jù)加載/傳輸過程中出現(xiàn)的瓶頸,以及如何使用遠程直接內(nèi)存訪問( RDMA )技術(shù)緩解這些瓶頸。

在第三篇文章中,我們深入討論了端到端管道的實現(xiàn),展示了所討論的跨數(shù)據(jù)科學(xué)框架的最佳數(shù)據(jù)傳輸技術(shù)。

零拷貝功能是跨 GPU – 加速數(shù)據(jù)科學(xué)框架 TensorFlow 、 PyTorch 、 MXNet 、 cuDF 、 CuPy 、 Numba 和 JAX 高效拷貝數(shù)據(jù)的關(guān)鍵技術(shù)(見圖 2 )。在下文中,我們將向您展示如何以系統(tǒng)的方式實現(xiàn)這一目標。如果您只是在這里查找有關(guān)如何將數(shù)據(jù)從一個框架傳輸?shù)搅硪粋€框架的命令,那么 MIG ht 需要了解一下 換算表 。

ML-Frameworks_Pic-1-625x410.png

圖 2 數(shù)據(jù)科學(xué)和機器學(xué)習(xí)框架之間的轉(zhuǎn)換路徑。

內(nèi)存布局、數(shù)據(jù)格式和內(nèi)存池

內(nèi)存布局

在開始討論如何高效地復(fù)制數(shù)據(jù)之前,讓我們先討論一下如何存儲表格數(shù)據(jù)。實際上,所有數(shù)據(jù)格式都繼承自計算機科學(xué)家已知的兩種主要內(nèi)存布局之一(見圖 3 ):

結(jié)構(gòu)數(shù)組( AO ):潛在不同類型的一個或多個數(shù)據(jù)點 x 、 y , z … 的序列表示為 structure S 。這些數(shù)據(jù)點的幾個實例被分配為新數(shù)據(jù)類型 S 的數(shù)組 s 。然后通過結(jié)構(gòu)實例 s[k]。 的成員 s [k] x , s [k] y , s [k 。 z 。。。 訪問第 k- 個實例的原始點列表 x 、 y , z …

數(shù)組結(jié)構(gòu)( SoA ):數(shù)據(jù)點 x 、 y , z … 的多個實例存儲在單獨的數(shù)組 s _ x , s _ y , s _ z … 中 k- 第個實例的原始點 x 、 y , z … 然后被 s _ x [k], s _ y [k], s _ z [k] 訪問。最后,這些數(shù)組可以解釋為一個(僅僅是虛擬存在的)結(jié)構(gòu)的單個實例,因此命名為 SoA 。

MLFrameworksIneroperability_pic2-625x282.png

圖 3 : AoS (左)和 SoA (右)內(nèi)存布局的比較。白色箭頭表示線性內(nèi)存中的讀取順序。注意, AoS 和 SoA 通過換位是同構(gòu)的。

雖然從編程和抽象的角度來看, AoS 布局看起來比 SoA 更結(jié)構(gòu)化(雙關(guān)語),但就可實現(xiàn)的性能而言,它往往不太適合大規(guī)模并行算法。這可以解釋為當一致地訪問結(jié)構(gòu)成員的子集時(例如,在沿一個坐標軸減少值的過程中),緩存線的利用效率較低。您甚至可以在文獻中發(fā)現(xiàn),與 AOS 內(nèi)存布局中的普通處理相比,動態(tài) AoS-to-SoA 轉(zhuǎn)換可以顯著提高性能。

在復(fù)制數(shù)據(jù)的坐標切片時, SoA 內(nèi)存布局顯示出進一步的優(yōu)勢。假設(shè)您希望一次傳輸所有 x 坐標,那么就可以訪問相應(yīng)的數(shù)組,而無需在 AoS 布局中對成員進行耗時的切片。更好的是,在傳輸數(shù)據(jù)時,只需在內(nèi)存中公開數(shù)組地址而不復(fù)制單個字節(jié),就可以避免分配輔助內(nèi)存。 阿帕奇箭頭 構(gòu)建在這種方法的基礎(chǔ)上:出于討論的原因,將不同數(shù)據(jù)類型的數(shù)據(jù)存儲在不同的數(shù)組中(見圖 4 )。請注意,主流數(shù)據(jù)科學(xué)框架將 SoA 布局中的數(shù)組項視為存儲在列而不是行中,如圖 3 所示。然而,這只是一種慣例,因為我們都知道,幾乎所有內(nèi)存都是線性排序的。

MLFrameworksIntroperability_Pic3-625x370.png

圖 4 :頂部顯示的同一個表的行( AoS ,左)和列( SoA ,右)內(nèi)存布局的比較。 SoA 非常適合在 GPU 上進行大規(guī)模并行處理。

數(shù)據(jù)格式和零拷貝機制

近年來,為了滿足不同的需求,開發(fā)了不同的圖書館。與此同時,數(shù)據(jù)科學(xué)管道變得越來越復(fù)雜,需要使用多個庫來完成各種各樣的任務(wù)。不幸的是,在設(shè)計這些庫時,框架之間的互操作性并不是最優(yōu)先考慮的。因此,缺乏適合數(shù)據(jù)科學(xué)任務(wù)的標準化數(shù)據(jù)格式。當時有些人擔(dān)心數(shù)據(jù)標準,比如 pandas 項目的創(chuàng)建者 麥金尼 。 2011 年,他發(fā)表了 本帖 ,介紹了 Python 中豐富科學(xué)數(shù)據(jù)結(jié)構(gòu)的未來路線圖。

由于每個庫都實現(xiàn)了其自定義的內(nèi)存中數(shù)據(jù)布局和文件格式,因此當這些庫需要協(xié)作時,必須執(zhí)行昂貴的復(fù)制和轉(zhuǎn)換操作??倛?zhí)行時間的很大一部分被投入到無意義的復(fù)制和轉(zhuǎn)換操作中是很常見的。

2016 年 10 月, Apache 基金會發(fā)布了 Arrow ,這是一種獨立于語言的柱狀數(shù)據(jù)格式規(guī)范,旨在有效地處理 CPU S 和 GPU S 上的平坦和分層數(shù)據(jù)。從那時起,許多不同的框架都采用了它,促進了它們之間的零拷貝數(shù)據(jù)交換。 Apache Arrow 柱狀數(shù)據(jù)格式的其他 主要特征 包括:

O ( 1 )(恒定時間)隨機存取

SIMD 和矢量化友好

順序訪問(掃描)的數(shù)據(jù)鄰接

無需“指針旋轉(zhuǎn)”即可重新定位,允許在共享內(nèi)存中進行真正的零拷貝訪問

MLFrameworksInterioerability_Pic4-625x184.png

圖 5 :傳統(tǒng)框架互操作性與使用 ApacheArrow 的零拷貝方法的比較,其中所有框架都同意相同的內(nèi)存布局。

零拷貝機制避免了不必要的數(shù)據(jù)傳輸,大大縮短了應(yīng)用程序的執(zhí)行時間。數(shù)據(jù)科學(xué)框架增加了對以下一種或多種數(shù)據(jù)格式的支持: DLPack 、 CUDA 陣列接口 和 NumPy 陣列接口 。

DLPack 是一種開放式內(nèi)存張量結(jié)構(gòu),用于在框架之間共享張量。 CUDA 數(shù)組接口和 NumPy 數(shù)組接口是交換 GPU 和 CPU 類數(shù)組對象的事實標準。

MLFrameworksInteroperability_Pic5-625x441.png

表 1 :數(shù)據(jù)格式支持矩陣。

請注意, cuDF 和 CuPy 等庫只在 GPU 設(shè)備上運行。雖然可以將 NumPy 數(shù)組轉(zhuǎn)換為 cuDF 或 CuPy 對象,但我們已將其支持標記為 n/a ,因為它請求主機內(nèi)存( CPU )和設(shè)備內(nèi)存( GPU )之間的數(shù)據(jù)移動。

在下文中,我們將討論各種框架中關(guān)聯(lián)數(shù)據(jù)對象的內(nèi)存布局、使用零拷貝高效轉(zhuǎn)換數(shù)據(jù)對象,以及混合框架時使用聯(lián)合內(nèi)存池。

內(nèi)存池

內(nèi)存分配很昂貴。它們通常會設(shè)置全球壁壘,在分配完成之前阻礙剩余的業(yè)務(wù)。因此,從性能的角度來看,在訓(xùn)練神經(jīng)網(wǎng)絡(luò)的過程中,重復(fù)分配緊循環(huán)的內(nèi)存是禁止的?,F(xiàn)代數(shù)據(jù)科學(xué)和深度學(xué)習(xí)框架通過專用內(nèi)存池解決了這一問題。它要么在程序開始時預(yù)先分配一大塊內(nèi)存(例如, TensorFlow ),要么使用一些不頻繁的分配(例如, PyTorch )來遞增池。然后,通過異步地將該內(nèi)存范圍的子集分配給/從任何請求它的人收回,以智能的方式重用預(yù)先分配的內(nèi)存。例如, RAPIDS 內(nèi)存管理器( RMM ) 是最初為 RAPIDS 數(shù)據(jù)科學(xué)框架編寫的內(nèi)存池。 RMM 促進了極快的主機和設(shè)備內(nèi)存分配。 麥克哈里斯 量化了 本帖 中 RMM 的影響:“我們通過使用 RMM 分配替換對 %s :沒有足夠的空閑空間 和 %s :沒有足夠的空閑空間 的所有調(diào)用,在 cuDF 中集中了內(nèi)存管理。這是一個很大的工作,但它得到了回報。 RMM 調(diào)用的速度大約是 馬洛克 和 cudaFree 的 1000 倍。結(jié)果是抵押貸款演示的速度提高了 10 倍?!?/p>

當組合不同的數(shù)據(jù)科學(xué)庫時,幾個特定于庫的內(nèi)存池 MIG ht 競爭相同的視頻 RAM 。一個簡單的解決方法是將每個內(nèi)存池的容量限制為可用內(nèi)存的固定分區(qū)。更好的解決方案是對所有框架使用相同的內(nèi)存池。請注意,這并不一定意味著所有框架都必須同意其普通版本中提供的相同內(nèi)存池實現(xiàn)。所有供應(yīng)商都同意使用外部分配器接口( EAI )來請求和釋放其框架中的內(nèi)存就足夠了。

void* allocate(std::size_t bytes, cudaStream_t stream)
void deallocate(void* p, std::size_t bytes, cudaStream_t stream)

EAI 的進一步優(yōu)勢是直觀的日志記錄功能、內(nèi)存泄漏檢查以及速率或資源限制功能。例如, RAPIDS 內(nèi)存管理器利用統(tǒng)一內(nèi)存透明地超額訂閱 GPU 內(nèi)存。前者意味著在處理不適合 GPU 內(nèi)存的大型數(shù)據(jù)集時,顯著降低了內(nèi)存不足錯誤的幾率。

好消息是,在導(dǎo)入其他所有內(nèi)容之前,只需導(dǎo)入 RAPIDS cuDF ,就可以將 RMM 與 CuPy 和 Numba 一起使用。

import cudf  # <= now RMM is the global memory pool
import cupy
import numba

或者,您可以在不使用 RAPIDS cuDF 的情況下組合使用 Numba 和 RMM 。

import rmm
from numba import cuda
cuda.set_memory_manager(rmm.RMMNumbaManager)

結(jié)論

在我們的框架互操作性系列的這篇文章中,您了解了不同的內(nèi)存布局,以及 Apache Arrow 格式如何顯著加快跨不同數(shù)據(jù)科學(xué)和機器學(xué)習(xí)框架(如 TensorFlow 、 PyTorch 、 MXNet 、 cuDF 、 丘比。 、 麻木 和 JAX 的數(shù)據(jù)傳輸。我們還討論了由內(nèi)存池促進的異步內(nèi)存分配對于避免高達管道總運行時間 90% 的開銷至關(guān)重要。

在本系列的第二部分中,您將了解如何利用遠程直接內(nèi)存訪問( RDMA )在多 GPU 設(shè)置中進一步加速數(shù)據(jù)加載和數(shù)據(jù)傳輸。

關(guān)于作者

Christian Hundt 在德國美因茨的 Johannes Gutenberg 大學(xué)( JGU )獲得了理論物理的文憑學(xué)位。在他的博士論文中,他研究了時間序列數(shù)據(jù)挖掘算法在大規(guī)模并行架構(gòu)上的并行化。作為并行和分布式體系結(jié)構(gòu)組的博士后研究員,他專注于各種生物醫(yī)學(xué)應(yīng)用的高效并行化,如上下文感知的元基因組分類、基因集富集分析和胸部 mri 的深層語義圖像分割。他目前的職位是深度學(xué)習(xí)解決方案架構(gòu)師,負責(zé)協(xié)調(diào)盧森堡的 NVIDIA 人工智能技術(shù)中心( NVAITC )的技術(shù)合作。

Miguel Martinez 是 NVIDIA 的高級深度學(xué)習(xí)數(shù)據(jù)科學(xué)家,他專注于 RAPIDS 和 Merlin 。此前,他曾指導(dǎo)過 Udacity 人工智能納米學(xué)位的學(xué)生。他有很強的金融服務(wù)背景,主要專注于支付和渠道。作為一個持續(xù)而堅定的學(xué)習(xí)者, Miguel 總是在迎接新的挑戰(zhàn)。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11350

    瀏覽量

    226155
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    5301

    瀏覽量

    136144
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    9

    文章

    3244

    瀏覽量

    76542
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    C++ 11 14 17 20內(nèi)存管理-指針、智能指針和內(nèi)存基礎(chǔ)與提升

    pan.baidu.com/s/1g64x9D_jp9ufk4uBpQBmvA?pwd=497f? 未來 C++ 底層核心:內(nèi)存管理實戰(zhàn),從指針到內(nèi)存全鏈路進階 站在2026年的技術(shù)
    的頭像 發(fā)表于 04-20 15:51 ?576次閱讀

    LuatOS的內(nèi)存分配機制

    不同 LuatOS 硬件平臺在內(nèi)存布局上存在差異,Lua 運行內(nèi)存、系統(tǒng)內(nèi)存與 PSRAM 擴展內(nèi)存的分配方式各有區(qū)別。
    的頭像 發(fā)表于 04-16 12:37 ?171次閱讀
    LuatOS的<b class='flag-5'>內(nèi)存</b>分配機制

    吉事勵引領(lǐng)電動汽車充電操作性與兼容測試新風(fēng)向

    在電動汽車行業(yè)蓬勃發(fā)展的進程中,充電樁的操作性與兼容已成為決定行業(yè)能否持續(xù)穩(wěn)健前行的核心要素。這不僅關(guān)系到用戶充電體驗的優(yōu)劣,更影響著整個產(chǎn)業(yè)生態(tài)的健康發(fā)展。
    的頭像 發(fā)表于 03-30 15:27 ?644次閱讀
    吉事勵引領(lǐng)電動汽車充電<b class='flag-5'>互</b><b class='flag-5'>操作性</b>與兼容<b class='flag-5'>性</b>測試新風(fēng)向

    MangoTree Halo Ultra「全新PXI」,標配自動糾錯內(nèi)存#

    內(nèi)存
    芒果樹數(shù)字
    發(fā)布于 :2026年03月06日 15:59:34

    是德科技攜手愛立信賦能Pre-6G操作性驗證

    是德科技(NYSE: KEYS )近日宣布,與愛立信攜手合作,使用是德科技的WaveJudge無線分析儀解決方案,對愛立信Pre-6G基站(gNB)與Pre-6G原型設(shè)備間的操作性進行故障排查
    的頭像 發(fā)表于 03-03 16:10 ?606次閱讀

    通過恩智浦RW612三頻無線MCU提升多協(xié)議操作性

    無線連接是現(xiàn)代智能家居和工業(yè)系統(tǒng)的基石,推動著無數(shù)更智能、更自主設(shè)備的普及。恩智浦非常重視無線操作性,確保生態(tài)合作體系中的每臺設(shè)備能夠無縫協(xié)同工作的關(guān)鍵能力。
    的頭像 發(fā)表于 03-03 11:47 ?1427次閱讀

    IO序列化操作:提升系統(tǒng)操作性的關(guān)鍵技術(shù)

    在異構(gòu)系統(tǒng)并存的今天,IO序列化操作成為實現(xiàn)系統(tǒng)間操作性的核心技術(shù)。通過標準化的數(shù)據(jù)格式(如JSON、Protobuf、Hessian等),不同語言、平臺的系統(tǒng)得以無縫交換信息。合理設(shè)計序列化策略
    的頭像 發(fā)表于 02-25 16:02 ?221次閱讀
    IO序列化<b class='flag-5'>操作</b>:提升系統(tǒng)<b class='flag-5'>互</b><b class='flag-5'>操作性</b>的關(guān)鍵技術(shù)

    【「Linux 設(shè)備驅(qū)動開發(fā)( 2 版)」閱讀體驗】+讀深入理解Linux內(nèi)核內(nèi)存分配

    的一部分。也就是說,在ARM架構(gòu)中,MMU是已獲得許可的處理核心的一部分,負責(zé)在每次訪問內(nèi)存時將虛擬地址轉(zhuǎn)換為物理地址,這個過程被稱為地址轉(zhuǎn)換。邏輯地址與其物理地址具有固定偏移量的虛擬地址。 MMU是
    發(fā)表于 01-16 20:05

    C語言內(nèi)存使用

    內(nèi)存我們就可以使用單鏈表來進行維護,下面通過一個通訊錄的程序來說明內(nèi)存的運用。 普通的版本: //Example 04 V1 #
    發(fā)表于 12-11 07:57

    集裝箱儲能系統(tǒng)標準解析系列(一)|IEC 62933-2-1:電能存儲(EES)系統(tǒng) 2-1部分-儲能單元參數(shù)和試驗方法

    IEC 62933-2-1 電能存儲(EES)系統(tǒng) 2-1部分:儲能單元參數(shù)和試驗方法
    的頭像 發(fā)表于 11-25 15:40 ?3862次閱讀
    集裝箱儲能系統(tǒng)標準解析系列(一)|IEC 62933-2-<b class='flag-5'>1</b>:電能存儲(EES)系統(tǒng) <b class='flag-5'>第</b>2-<b class='flag-5'>1</b><b class='flag-5'>部分</b>-儲能單元參數(shù)和試驗方法

    集裝箱儲能系統(tǒng)標準解析系列(三)| IEC TS 62933-4-1電能存儲系統(tǒng)(EES) 4-1部分:環(huán)境問題指導(dǎo)

    IEC TS 62933-4-1電能存儲系統(tǒng)(EES) 4-1部分:環(huán)境問題指導(dǎo) 通用規(guī)范
    的頭像 發(fā)表于 11-25 15:11 ?595次閱讀
    集裝箱儲能系統(tǒng)標準解析系列(三)| IEC TS 62933-4-<b class='flag-5'>1</b>電能存儲系統(tǒng)(EES) <b class='flag-5'>第</b>4-<b class='flag-5'>1</b><b class='flag-5'>部分</b>:環(huán)境問題指導(dǎo)

    是德科技與HEAD acoustics成功完成新一代eCall系統(tǒng)操作性測試

    是德科技(NYSE: KEYS )近日宣布,其基于UXM的新一代eCall(NG eCall)解決方案,已成功與全球汽車聲學(xué)測試領(lǐng)導(dǎo)者HEAD acoustics GmbH完成操作性測試。
    的頭像 發(fā)表于 11-18 11:29 ?792次閱讀

    靈活高效ZBUFF — C內(nèi)存數(shù)據(jù)操作庫:優(yōu)化內(nèi)存管理的利器

    在C語言開發(fā)中,高效內(nèi)存管理是提升程序性能的關(guān)鍵。ZBUFF作為一款靈活高效內(nèi)存數(shù)據(jù)操作庫,通過優(yōu)化
    的頭像 發(fā)表于 08-14 18:01 ?837次閱讀
    靈活<b class='flag-5'>高效</b>ZBUFF — C<b class='flag-5'>內(nèi)存</b>數(shù)據(jù)<b class='flag-5'>操作</b>庫:優(yōu)化<b class='flag-5'>內(nèi)存</b>管理的利器

    靈活高效雙引擎驅(qū)動:ZBUFF讓C語言內(nèi)存操作更智能!

    ZBUFF庫深度融合了智能內(nèi)存分配算法與實時監(jiān)測機制,能夠自動適應(yīng)不同場景下的內(nèi)存需求。其自適應(yīng)碎片整理功能和錯誤檢測模塊,不僅保障了內(nèi)存使用的高效
    的頭像 發(fā)表于 08-11 13:27 ?756次閱讀
    靈活<b class='flag-5'>高效</b>雙引擎驅(qū)動:ZBUFF讓C語言<b class='flag-5'>內(nèi)存</b><b class='flag-5'>操作</b>更智能!

    解讀新發(fā)布的 Matter 1.4:推動智能家居設(shè)備操作性的關(guān)鍵升級

    著Matter 1.4的發(fā)布,智能家居和物聯(lián)網(wǎng)(IoT)行業(yè)迎來了新的里程碑。Matter作為全球統(tǒng)一的智能家居互聯(lián)協(xié)議,在操作性、安全和能效優(yōu)化等方面取得了重大突破。本文將從Matter
    的頭像 發(fā)表于 05-16 17:38 ?1165次閱讀
    安宁市| 县级市| 阿坝| 原阳县| 廊坊市| 扶风县| 崇阳县| 临武县| 新干县| 福贡县| 阿城市| 新乐市| 惠东县| 南郑县| 车险| 阿拉善左旗| 庐江县| 中宁县| 闽清县| 东城区| 贞丰县| 城口县| 武胜县| 始兴县| 洪泽县| 门源| 文安县| 广饶县| 江阴市| 乐都县| 富民县| 两当县| 铁力市| 湘阴县| 咸阳市| 湖南省| 陇川县| 云梦县| 林甸县| 安宁市| 大洼县|