您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

LeCun转推,PyTorch GPU内存分配有了火焰图可视化工具

时间:2022-10-24 15:57:59  来源:网易号  作者:机器之心Pro

机器之心报道

编辑:杜伟

 

想要了解自己的 PyTorch 项目在哪些地方分配 GPU 内存以及为什么用完吗?不妨试试这个可视化工具。

 

近日,PyTorch 核心开发者和 FAIR 研究者 Zachary DeVito 创建了一个新工具(添加实验性 API),通过生成和可视化内存快照(memory snapshot)来可视化 GPU 内存的分配状态。这些内存快照记录了内存分配的堆栈跟踪以及内存在缓存分配器状态中的位置。

接下来,通过将这些内存快照可视化为火焰图(flamegraphs),内存的使用位置也就能一目了然地看到了。

图灵奖得主 Yann Lecun 也转推了这个工具。

Twitter@Zachary DeVito

下面我们来看这个工具的实现原理(以第一人称「我们」描述)。

生成快照

首先,我们必须记录每次分配的堆栈帧信息。

记录这些堆栈跟踪的速度非常快(每次分配约 1 us,正常的 PyTorch 内核调用需要至少 8 us),但我们默认将其关闭。而启用之后,我们可以分配一些内存并拍摄快照。

快照记录了整个分配器的状态,如下所示。

快照是具有以下结构的 Segment 字典列表。

Segments 是直接从 cudaMalloc 请求并由分配器缓存的内存。因此,我们可以只使用这些 segments 中的一部分,缓存分配器将它们分为一个或更多个 Block。所有的块始终保持相同的分配状态。同时,使用_record_memory_history,每个块还将记录一个 History 对象,该对象会记住块中最后一次分配的位置,包括作为 Frames 列表的堆栈跟踪。

对于 active_allocated 块,它其中存在的内容和当前分配的内容将有一个历史记录。对于 inactive 块,可能会有多个条目来记录块内存中最后存在的内容。可能不止一个条目的原因在于分配器在空闲时会合并分割块,并记录下两次拆分的历史。为了避免出现大量的历史记录,我们只保留不与任何更新块重合的块的历史记录。

保存快照

快照因自身设计而可以之后离线查看。

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

可视化快照

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

可视化图将分配器中所有的字节(byte)按不同的类来分割成段,如下图所示(原文为可交互视图)。

火焰图可视化是一种将资源(如内存)使用划分为不同类的方法,然后可以进一步细分为更细粒度的类别。

memory 视图很好地展现了内存的使用方式。但对于具体地调试分配器问题,首先将内存分类为不同的 Segment 对象是有用的,而这些对象是分配轨迹的单个 cudaMalloc 段。

比较快照

该可视化器还可以生成显示在两个快照之间添加和删除的段的可视化。例如,我们可以使用更大的输入重新运行模型,并查看分配器如何为更大的临时对象请求更多内存。

比较视图仅显示新段,这有助于找出哪些代码路径提示分配更多内存。

$ Python/ target=_blank class=infotextkey>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]

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



Tags:PyTorch   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
机器之心报道编辑:杜伟 想要了解自己的 PyTorch 项目在哪些地方分配 GPU 内存以及为什么用完吗?不妨试试这个可视化工具。 近日,PyTorch 核心开发者和 FAIR 研究者 Zachary DeV...【详细内容】
2022-10-24  Tags: PyTorch  点击:(0)  评论:(0)  加入收藏
作者 | 锦恢@知乎 (已授权)来源 | https://zhuanlan.zhihu.com/p/220403674编辑 | 极市平台一、网络结构的可视化我们训练神经网络时,除了随着step或者epoch观察损失函数的走势...【详细内容】
2022-09-19  Tags: PyTorch  点击:(68)  评论:(0)  加入收藏
出品 | OSC开源社区(ID:oschina2013)在 Meta (原 Facebook)、AMD、AWS、谷歌云、微软和 NVIDIA 等大厂的联合推动下,PyTorch 基金会成立了。PyTorch 基金会隶属于 Linux 基金会...【详细内容】
2022-09-13  Tags: PyTorch  点击:(35)  评论:(0)  加入收藏
本文分享自华为云社区《AnimeGANv2 照片动漫化:如何基于 PyTorch 和神经网络给 GirlFriend 制作漫画风头像?【秋招特训】-云社区-华为云》,作者:白鹿第一帅 。前言将现实世界场...【详细内容】
2022-09-13  Tags: PyTorch  点击:(44)  评论:(0)  加入收藏
MNIST 这里就不多展开了,我们上几期的文章都是使用此数据集进行的分享。手写字母识别EMNIST数据集Extended MNIST (EMNIST), 因为 MNIST 被大家熟知,所以这里就推出了 EMNIST...【详细内容】
2021-09-08  Tags: PyTorch  点击:(1134)  评论:(0)  加入收藏
在处理监督机器学习任务时,最重要的东西是数据——而且是大量的数据。当面对少量数据时,特别是需要深度神经网络的任务时,该怎么办?如何创建一个快速高效的数据管道...【详细内容】
2021-03-31  Tags: PyTorch  点击:(363)  评论:(0)  加入收藏
近年来,基于深度学习的人脸识别技术取得了重要进展。但是人脸识别模型的实际部署和深入研究都需要相应的公众支持。例如生产级人脸表示网络需要模块化的训练机制,以配合不同 SOTA 骨干网络、训练监督主题再到现实世界人...【详细内容】
2021-01-26  Tags: PyTorch  点击:(268)  评论:(0)  加入收藏
代码的基本结构还是延续我通过深度学习神经网络,基于MNIST实现手写数字识别 的结构,只是神经网络部分使用了Pytorch的API。有一些地方要多说一点,但是不展开:1、激活函数选用了R...【详细内容】
2020-09-27  Tags: PyTorch  点击:(187)  评论:(0)  加入收藏
一、前言论文地址:http://arxiv.org/abs/1602.072612014年,GoogLeNet和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLeNet获得了第一名、VGG获得了第二名,这两类模型结构的共...【详细内容】
2020-08-17  Tags: PyTorch  点击:(134)  评论:(0)  加入收藏
介绍深度学习是机器学习的一个分支。深度学习的独特之处在于它带来的准确性和效率。经过大量数据训练后,深度学习系统可以匹配甚至超过人脑的认知能力。PyTorch和TensorFlow...【详细内容】
2020-08-07  Tags: PyTorch  点击:(240)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是皮皮。一、前言前几天在Python最强王者交流群【WYM】问了一个pandas处理的问题,提问截图如下:原始数据如下图所示:后来还提供了一个小文件。二、实现过程这里【郑煜...【详细内容】
2022-10-25  Python学习交流     Tags:json   点击:(0)  评论:(0)  加入收藏
机器之心报道编辑:杜伟 想要了解自己的 PyTorch 项目在哪些地方分配 GPU 内存以及为什么用完吗?不妨试试这个可视化工具。 近日,PyTorch 核心开发者和 FAIR 研究者 Zachary DeV...【详细内容】
2022-10-24  机器之心Pro   网易号  Tags:PyTorch   点击:(0)  评论:(0)  加入收藏
本文分享自华为云社区《群主发红包带你深入了解继承和super、this关键字》,作者:共饮一杯无 。需求群主发随机红包或者普通红包。某群有多名成员,群主给成员发普通红包。 随机...【详细内容】
2022-10-21  华为云开发者联盟    Tags:   点击:(4)  评论:(0)  加入收藏
在IT程序员的开发工作过程中,无论是使用Java还是Python,或是其他的编程语言,都可以选择各种各样的开发编译工具。工欲善其事必先利其器。IT程序员要想提高自己的工作效率,选择一...【详细内容】
2022-10-21   青烟小生x   网易号  Tags:编译工具   点击:(2)  评论:(0)  加入收藏
本文从客户端的视角,分享客户端如何协同服务端进行接口时间的优化。Compose是什么接口性能优化对于客户端的同学来讲涉及可能不是很多,但是接口的性能对于客户端的体验影响是...【详细内容】
2022-10-20  马啟超  微信公众号  Tags:接口优化   点击:(8)  评论:(0)  加入收藏
【写在最前】我们在平时的编程学习中,经常会接触到“版本控制”这个概念。目前业界的开发团队,基本都会从 GIT 、 SVN 两种主流版本控制系统中选择一个在团队内部使用。两个软...【详细内容】
2022-10-20  5分钟IT入门   网易号  Tags:git   点击:(4)  评论:(0)  加入收藏
原创:微观技术作为后端研发同学为了几两碎银,没日没夜周旋于各种人、各种事上。如果你要想成长的更快,就要学会归纳总结,找到规律,并且善用这些规律。就比如工作,虽然事情很多、也...【详细内容】
2022-10-18  马士兵教育  今日头条  Tags:接口   点击:(7)  评论:(0)  加入收藏
大家知道,在Springboot+Spring Data Jpa的项目里,dao层只需要继承JpaRepository接口,就可以实现Mybatis中@Repository+mapper的效果,不需要任何多余的配置,就可以将dao层注入bean...【详细内容】
2022-10-17  活在信息时代    Tags:Spring Data Jpa   点击:(20)  评论:(0)  加入收藏
01常收到一些在校非计算机软件学生的提问,编程难吗?我也想学编程?编程难吗?对于这个问题,我想大多数人都会认为难,我也不例外。但难在哪里?不同的人有不同的理解,因为编程本身的维度...【详细内容】
2022-10-17  阿谊小梦  搜狐号  Tags:编程   点击:(6)  评论:(0)  加入收藏
jupyter lab作为jupyter notebook的升级版,增加了很多功能。其支持python、R、java等多种编程语言及markdown、letex等写作语言及公式输入,可以集编程与写作于一身,非常适合于...【详细内容】
2022-10-14  ruiwango  今日头条  Tags:jupyter   点击:(20)  评论:(0)  加入收藏
站内最新
站内热门
站内头条