DL-cuda相关学习笔记

本文介绍了GPU、CUDA和显卡的基础知识,包括GPU在计算机图形处理中的作用,CUDA作为并行计算平台的角色。在PyTorch中,模型和数据可以从CPU迁移到GPU,通过`.cuda()`方法。变量在计算过程中生成计算图,用于反向传播。模型迁移时,只将模型参数存储到显存,并非所有Tensor。显存占用包括模型参数、优化器状态和输入输出。节省显存策略包括减小batch-size和优化模型结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、显卡、GPU、CUDA的定义和联系

说起来是很基础的东西,但是因为上手就是matlab/python编程起步,一直对这些概念似懂非懂。这次做一个比较全面的调研。

  • 显卡:电脑进行数模信号转换的设备,承担输出显示图形的任务
  • GPU这个概念是由Nvidia公司于1999年提出的。GPU是显卡上的一块芯片,就像CPU是主板上的一块芯片。
  • CUDA(Compute Unified Device Architecture),通用并行计算架构,是一种运算平台。它包含CUDA指令集架构以及GPU内部的并行计算引擎。使用GPU计算需要把数据运算包装成图形渲染任务,CUDA就帮我们完成了这一步。

 

二、 从CPU到GPU的迁移

数据迁移:主要是两种,TensorVariable。variable通常用作存储模型参数,可以反向转播求导。迁移后就占用的显存。

这边展开学习一下variable

variable = Variable(tensor, requires_grad=True)

Variable计算时,会逐渐地生成计算图,将所有的计算节点都连接起来,最后进行误差反向传递的时候一次性将所有Variable里面的梯度都计算出来,而tensor就没有这个能力。 

这里具体的计算过程并不太理解,还是要结合backward代码。

模型迁移:可迁移torch.nn下面的一些网络模型以及自己创建的模型,比如 nn.CrossEntropyLoss() 也可以(这边不懂,交叉熵的计算里明明没有tensor权重参数?)

模型迁移的是什么:

所谓的模型,也就是对输入参数做了一些基本的矩阵运算。所以我们对模型.cuda()实际上也相当于将模型使用到的参数存储到了显存上去。查看model.weight会看到tensor的存储发生变化。

对模型存储到显存后,这个模型中的方法后面创建出的Tensor是否都会默认变成cuda类型?—— 否。

 

 三、显存的占用包括哪些

神经网络模型占用的显存包括:

  • 模型自身的参数(与输入无关的显存占用)
    • 优化器的动量(普通 SGD 没有动量,momentum-SGD 动量与梯度一样,Adam 优化器动量的数量是梯度的两倍)
    • 梯度 dW(一般与参数一样)
    • 参数 W
  • 模型的输入输出
    • 需要计算每一层的feature map的形状
    • 需要保存输出对应的梯度用以反向传播
    • 此部分显存占用与 batch size 成正比
    • 模型输出不需要存储相应的动量信息
  •  节省显存的方法
    • 降低batch-size
    • 下采样(NCHW -> (1/4)*NCHW)
    • 减少全连接层(一般只留最后一层分类用的全连接层)

 


* 参考资料

浅谈将Pytorch模型从CPU转换成GPU_陈诚的博客-优快云博客

显卡、GPU和CUDA简介_wu_nan_nan的专栏-优快云博客_gpu显卡

科普帖:深度学习中GPU和显存分析 - 知乎 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值