记录——深度学习、大模型常见问题

  1. 问:为什么数据类型必须是tensor张量,numpy为什么不行?
    答:因为现代深度学习框架(PyTorch、Tensorflow)主要数据结构是张量(Tensor),它们的计算都是基于张量进行的,且张量支持自动求导,这对于训练神经网络至关重要。在反向传播算法中,需要计算损失函数关于模型参数的梯度,张量的自动求导机制简化了这一过程。
    张量是一种多维数组,它可以在GPU上运行,支持自动微分,是深度学习中的基本数据结构。CPU张量存在内存中,而GPU张量存在显存中。NumPy 本身是专门为 CPU 设计的,并不直接支持 GPU 计算。且NumPy 数组(即 numpy.ndarray 对象)默认在 CPU 上运行,不能直接在 GPU 上运行。

  2. 问:模型加载和模型推理的区别是什么?在模型推理时,输入一段文本后,为什么模型所占据的显存会上升好几G?
    答:模型加载是指将模型的结构(层数、每层的神经元)和参数(权重、偏置)加载到显存中,以便后续训练、推理。模型加载所占据的显存是固定的。
    模型推理是指使用加载好的模型对输入数据进行前向传播计算,得到预测结果。模型推理所占据的显存包括模型加载时的缓存,除此之外,还会受输入的大小和复杂性增加显存的使用,例如长输入会导致更多的中间结果和激活值被计算和存储(大多数答模型都是transformer-decoder的结构,Transformer的计算复杂度和空间复杂度随输入长度N呈二次方增长,序列长度N -> 2N,所需的计算资源和内存就会变为4N,增长4倍;N -> 4N,所需的计算资源和内存就会变为16N,增长16倍)

  3. 问:加载模型并完成推理后,为什么显存没有降下来?如何清除不需要的显存?
    答:模型推理时的中间结果和激活值仍然存储在显存中,没有明确的清除,需要手动清除。

def torch_gc() -> None:
    # 手动触发垃圾回收机制,以回收无法访问的对象所占用的内存。
    gc.collect()
    # 检测当前系统是否能使用CUDA
    if torch.cuda.is_available():
        # 清空GPU缓存,防止已释放的显存被旧数据占用。
        torch.cuda.empty_cache()
        # 释放GPU显存中被其他进程占用但是未使用的部分
        torch.cuda.ipc_collect()
  1. 为什么LLM每一次推理完,当使用torch.cuda.empty_cache()清理显存时,显存的状态仍然无法恢复到最初加载模型时的状态?
    答:1. pytorch在管理显存时会保留一些缓存,以便在下一次分配内存时更快的获取。所以即使你调用empty_cache()函数,显存的使用量可能看起来仍然较高。2. 内存的碎片化导致即使释放了一部分显存,实际可用的显存也会减少。3. 如果在推理过程中创建了新的张量、变量,这些也会占用显存,需要使用 del 对象名 手动清除。
    总结:torch.cuda.empty_cache()是一种有用的工具,但它并不会完全的重置显存使用!!!

  2. 问:什么是内存碎片化?
    答:torch.cuda.memory_summary()函数可以显示当前显存的使用情况,包括缓存和碎片信息
    (内存碎片化(Memory Fragmentation)是指内存中存在一些不连续的、未被充分利用的小块空闲内存,这些小块内存虽然总量可能足够,但由于它们分散在内存中,无法被有效利用,从而导致整体内存利用效率降低的现象。)

  3. 问:什么是计算图,模型训练和推理时计算图如何被构建
    答:计算图是一种用于表示计算过程的数据结构。在深度学习框架中,将计算操作(加法、乘法等)与数据(张量)以图的形式组织起来。节点表达一个操作/一个张量。边表示这些操作或数据之间的传递或依赖关系。
    前向传播:在模型的训练和推理过程中,计算图用于执行前向传播,计算输出
    反向传播:在训练过程中,计算图还用于1反向传播,计算梯度并更新模型参数
    训练时,计算图在每次前向传播i时动态构建,记录每一个操作和其输入,以便在反向传播时计算参数。
    推理时,可以选择构建计算图,也可以选择不构建(推荐)。通常使用torch.no_grad()来避免构建计算图,从而提高效率和降低显存使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值