pytorch搭建深度学习模型,哪些步骤占用显存

pytorch的显存机制,一直不明白,今天看了两篇文章,终于有些明白了,这两篇文章如下:
https://zhuanlan.zhihu.com/p/424512257
https://blog.csdn.net/qq_43827595/article/details/115722953

根据第一篇知乎文章及其评论,我自己写了一套代码来记录各个步骤中显存的占用情况,以下是通过jupyter notebook中转化而来得到的markdown文件内容:

import torch
import torch.nn as nn
class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear1 = nn.Linear(1024,1024, bias=False)
        self.linear2 = nn.Linear(1024, 1, bias=False)
    
    def forward(self, x):
        x = self.linear1(x)
        x = self.linear2(x)
        out = sum(x)
        return out
# 输入数据
inputs = torch.tensor([[1.0]*1024]*1024).cuda() # +4194304 
print(torch.cuda.memory_allocated())
4194304
# 模型初始化
net = Net().cuda()  # +4194304+4096 前者是第一个线性层的参数所占显存,后者是第二个线性层所占显存
print(torch.cuda.memory_allocated())
8392704
# 正向传播
out = net(inputs)  # +4194304+512,4194304是模型第一层输出所占显存之和,512是out所占显存
                    # 这里之所以不需要第二层的输出,是因为求导的时候用不到,pytorch在维护计算图的时候将其释放
                    # 每一层的输出,是否被舍弃,关键要看输出的结果是否在求导的表达式中
print(torch.cuda.memory_allocated())
12587520
# 后向传播
out.backward()     # +4096,这个4096,是模型第二层中每个参数的梯度,
                    # 因为第二层的输出被舍弃掉了,需要新开辟显存来存储梯度
print(torch.cuda.memory_allocated())
12591616
from torch.optim import Adam
optimizer = Adam(net.parameters(), lr=1e-3) # +4198912  优化器参数所占显存
print(torch.cuda.max_memory_allocated()) 
16790528
optimizer.step() # +16785408 优化器相关参数所占显存
print(torch.cuda.max_memory_allocated()) 
29377024
16790528 - 12591616
4198912

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TensorFlow和PyTorch是目前最流行的深度学习框架,它们都有自己的优点和缺点。 TensorFlow的优点: 1.广泛的应用:TensorFlow是被广泛应用的深度学习框架,很多公司和研究机构都在使用它。 2.可视化工具:TensorFlow提供了可视化工具TensorBoard,方便用户查看模型的运行情况和调试。 3.高效的分布式计算:TensorFlow可以支持分布式计算,在大规模数据集上训练模型效率更高。 4.支持多平台:TensorFlow支持多种平台,包括CPU、GPU、TPU等。 TensorFlow的缺点: 1.学习曲线陡峭:由于TensorFlow的设计复杂,学习曲线较陡峭,需要一定的学习成本。 2.代码繁琐:TensorFlow的代码较为繁琐,需要编写大量的代码才能完成相同的任务。 3.不太灵活:TensorFlow的设计较为死板,有些自定义的操作需要使用TensorFlow的底接口才能实现。 PyTorch的优点: 1.易于学习:PyTorch的设计比较简洁,学习曲线较为平缓,容易上手。 2.动态计算图:PyTorch使用动态计算图,可以更灵活地构建模型,方便调试和优化。 3.代码简洁:PyTorch的代码相对TensorFlow来说较为简洁,可以减少编写代码的工作量。 4.支持动态图像:PyTorch可以支持动态图像数据,方便处理一些特殊的数据类型。 PyTorch的缺点: 1.不够稳定:PyTorch相对于TensorFlow来说较为不稳定,有时会出现一些意外错误。 2.不好的分布式计算:PyTorch的分布式计算功能相对较弱,不如TensorFlow效率高。 3.不太适合大规模数据集:由于PyTorch使用动态计算图,不太适合处理超大规模的数据集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值