首页
/
每日頭條
/
科技
/
pytorch提速方法
pytorch提速方法
更新时间:2025-12-05 05:10:46

機器之心報道

編輯:杜偉

想要了解自己的 PyTorch 項目在哪些地方分配 GPU 内存以及為什麼用完嗎?不妨試試這個可視化工具。

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

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

圖靈獎得主 Yann Lecun 也轉推了這個工具。

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)1

Twitter@Zachary DeVito

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

生成快照

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

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)2

記錄這些堆棧跟蹤的速度非常快(每次分配約 1 us,正常的 PyTorch 内核調用需要至少 8 us),但我們默認将其關閉。而啟用之後,我們可以分配一些内存并拍攝快照。

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)3

快照記錄了整個分配器的狀态,如下所示。

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)4

快照是具有以下結構的 Segment 字典列表。

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)5

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

對于 active_allocated 塊,它其中存在的内容和當前分配的内容将有一個曆史記錄。對于 inactive 塊,可能會有多個條目來記錄塊内存中最後存在的内容。可能不止一個條目的原因在于分配器在空閑時會合并分割塊,并記錄下兩次拆分的曆史。為了避免出現大量的曆史記錄,我們隻保留不與任何更新塊重合的塊的曆史記錄。

保存快照

快照因自身設計而可以之後離線查看。

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)6

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

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)7

可視化快照

_memory_viz.py 工具也可以生成内存的可視化火焰圖。

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)8

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

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)9

火焰圖可視化是一種将資源(如内存)使用劃分為不同類的方法,然後可以進一步細分為更細粒度的類别。

memory 視圖很好地展現了内存的使用方式。但對于具體地調試分配器問題,首先将内存分類為不同的 Segment 對象是有用的,而這些對象是分配軌迹的單個 cudaMalloc 段。

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)10

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)11

比較快照

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

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)12

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)13

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)14

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

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

pytorch提速方法(LeCun轉推PyTorchGPU内存分配有了火焰圖可視化工具)15

原文鍊接:https://zdevito.github.io/2022/08/16/memory-snapshots.html

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
電子廠能帶手機上班嗎
電子廠能帶手機上班嗎
現如今,很多人對手機的依賴越來越大,一天不玩手機就渾身難受。所以,很多人在進電子廠打工之前,幾乎都會問:“能不能帶手機進工作區”。但幾乎所有的電子廠都是禁止把手機帶進去的。這就苦了這些小年輕們,手機如氧氣一般的存在,沒有手機就渾身不舒服。手...
2025-12-05
陰陽師裡食靈禦魂搭配
陰陽師裡食靈禦魂搭配
作者:NGA-眼中星河萬千有啥沒說到的歡迎大夥來讨論。陣容:離吞食帝醜,醜狂荒攻命暴招财/火靈高攻帝釋天晴明星滅食靈(塗佛)酒吞狂骨不知火遺念火(阿離配上遺念火可以一直做到0火續結界)。具體操作:帝釋天挂完金蓮就普攻食靈除了幫清海坊主和小猴...
2025-12-05
手機益處和危害
手機益處和危害
經常看到一些文章說“大家一定要懂得節制不要對手機小視頻或者是遊戲上瘾,去尋找生活中更有意義的事情”。可是這些事情說起來很簡單,但是大多數人并不能找到比手機更能帶來快樂的事物。生活已經有很多不容易的事情,不管對于什麼樣的身份,什麼樣的角色的人...
2025-12-05
手機拍添加字幕操作過程
手機拍添加字幕操作過程
出門玩時,好多人喜歡用微信拍視頻給朋友看,隻是發視頻那就太無趣了,其實微信拍的視頻可以添加字幕,很多人都還不知道,大家快和小編一起來看看吧。手機拍視頻先打開微信,選擇聊天的對象,點擊右下角的号,再選擇拍攝,我們現在隻需正常的拍東西就可以。選...
2025-12-05
手機提高遊戲流暢度
手機提高遊戲流暢度
不知道小夥伴們平時玩不玩手遊,現在的手遊,内存那叫一個大,也越來越炫酷了,但是對手機的要求也越來越高了。小雷就有這種感覺,玩王者榮耀的時候,一打團就會掉幀卡頓,玩起來賊難受。為了讓大家的老手機煥發青春,新手機玩遊戲加倍流暢,小雷今天給大家推...
2025-12-05
Copyright 2023-2025 - www.tftnews.com All Rights Reserved