自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

LeCun轉(zhuǎn)推,PyTorch GPU內(nèi)存分配有了火焰圖可視化工具

新聞 開發(fā)
想要了解自己的 PyTorch 項目在哪些地方分配 GPU 內(nèi)存以及為什么用完嗎?不妨試試這個可視化工具。

近日,PyTorch 核心開發(fā)者和 FAIR 研究者 Zachary DeVito 創(chuàng)建了一個新工具(添加實驗性 API),通過生成和可視化內(nèi)存快照(memory snapshot)來可視化 GPU 內(nèi)存的分配狀態(tài)。這些內(nèi)存快照記錄了內(nèi)存分配的堆棧跟蹤以及內(nèi)存在緩存分配器狀態(tài)中的位置。

接下來,通過將這些內(nèi)存快照可視化為火焰圖(flamegraphs),內(nèi)存的使用位置也就能一目了然地看到了。

圖靈獎得主 Yann Lecun 也轉(zhuǎn)推了這個工具。

圖片Twitter@Zachary DeVito

下面我們來看這個工具的實現(xiàn)原理(以第一人稱「我們」描述)。

生成快照

首先,我們必須記錄每次分配的堆棧幀信息。

圖片

記錄這些堆棧跟蹤的速度非??欤看畏峙浼s 1 us,正常的 PyTorch 內(nèi)核調(diào)用需要至少 8 us),但我們默認(rèn)將其關(guān)閉。而啟用之后,我們可以分配一些內(nèi)存并拍攝快照。


圖片

快照記錄了整個分配器的狀態(tài),如下所示。

圖片

快照是具有以下結(jié)構(gòu)的 Segment 字典列表。

圖片

Segments 是直接從 cudaMalloc 請求并由分配器緩存的內(nèi)存。因此,我們可以只使用這些 segments 中的一部分,緩存分配器將它們分為一個或更多個 Block。所有的塊始終保持相同的分配狀態(tài)。同時,使用_record_memory_history,每個塊還將記錄一個 History 對象,該對象會記住塊中最后一次分配的位置,包括作為 Frames 列表的堆棧跟蹤。

對于 active_allocated 塊,它其中存在的內(nèi)容和當(dāng)前分配的內(nèi)容將有一個歷史記錄。對于 inactive 塊,可能會有多個條目來記錄塊內(nèi)存中最后存在的內(nèi)容??赡懿恢挂粋€條目的原因在于分配器在空閑時會合并分割塊,并記錄下兩次拆分的歷史。為了避免出現(xiàn)大量的歷史記錄,我們只保留不與任何更新塊重合的塊的歷史記錄。

保存快照

快照因自身設(shè)計而可以之后離線查看。

圖片

文件_memory_viz.py 可以直接用作交互式命令來處理保存的快照。

圖片

可視化快照

_memory_viz.py 工具也可以生成內(nèi)存的可視化火焰圖。

圖片

可視化圖將分配器中所有的字節(jié)(byte)按不同的類來分割成段,如下圖所示(原文為可交互視圖)。

圖片

火焰圖可視化是一種將資源(如內(nèi)存)使用劃分為不同類的方法,然后可以進(jìn)一步細(xì)分為更細(xì)粒度的類別。

memory 視圖很好地展現(xiàn)了內(nèi)存的使用方式。但對于具體地調(diào)試分配器問題,首先將內(nèi)存分類為不同的 Segment 對象是有用的,而這些對象是分配軌跡的單個 cudaMalloc 段。

圖片

圖片?

比較快照

該可視化器還可以生成顯示在兩個快照之間添加和刪除的段的可視化。例如,我們可以使用更大的輸入重新運行模型,并查看分配器如何為更大的臨時對象請求更多內(nèi)存。

圖片

圖片

圖片

比較視圖僅顯示新段,這有助于找出哪些代碼路徑提示分配更多內(nèi)存。

$ python _memory_viz.py compare snapshot.pickle snapshot2.pickle  -o compare.svgonly_before = []only_after = [140636932014080, 140636827156480, 140634912456704, 140634839056384, 140634843250688, 140634841153536, 140634866319360, 140634811793408, 140634845347840, $ 140636806184960, 140636778921984, 140634878902272]

圖片

責(zé)任編輯:張燕妮 來源: 機器之心
相關(guān)推薦

2021-03-30 10:10:37

PyTorch可視化工具命令

2018-02-08 14:57:22

對象內(nèi)存分配

2017-07-03 16:44:10

數(shù)據(jù)庫MongoDBNoSQL

2020-07-16 15:10:46

工具可視化Python

2017-07-27 09:49:37

Python工具Matplotlib

2021-04-11 09:51:25

Redis可視化工具

2015-12-02 09:44:04

Python視化工具

2017-07-04 16:00:16

PythonMatplotlib可視化工具

2021-03-18 09:07:13

日志可視化工具Devops

2022-10-21 15:47:59

測試工具鴻蒙

2018-05-31 08:25:13

誤區(qū)工具可視化

2017-07-25 13:42:00

大數(shù)據(jù)可視化工具

2020-04-20 08:22:41

SOC安全工具網(wǎng)絡(luò)攻擊

2019-10-14 15:51:40

可視化技術(shù)微軟數(shù)據(jù)庫

2022-11-15 15:14:05

2022-05-07 09:02:27

數(shù)據(jù)可視化工具庫

2019-12-23 14:17:46

數(shù)據(jù)可視化工具

2023-03-06 08:03:10

Python可視化工具

2024-11-28 14:20:08

2017-09-01 10:11:04

深度學(xué)習(xí)可視化工具
點贊
收藏

51CTO技術(shù)棧公眾號