0


【Datawhale AI 夏令营第三期 Task 3 学习笔记】


本期此项目手册:
https://datawhaler.feishu.cn/wiki/NOVDw5OtLiKJhlkbmoXc8nCinMf

我按照task3 上的引导成功保通baseline2 然后提交结果,得分如下。
在这里插入图片描述

可以发现该分数相较baseline1提分显著。

由于我是小白,在学习lora原理的过程中着重参考了下面的文章。

深入浅出剖析 LoRA 技术原理
https://mp.weixin.qq.com/s/jk1qBRjiq80nK0e04LQqiw
也遇到了很多陌生的技术概念,打算一一记录在下面。

1.PeftModel

PeftModel

是参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)框架中的一个核心组件,它被设计用来在不改变预训练模型大部分参数的情况下进行微调。这样做的目的是为了减少计算资源的需求,并且避免灾难性遗忘的问题,即模型在新任务上训练时可能会忘记之前学到的知识。

PeftModel

是一个用于封装预训练模型并添加特定于任务的可训练参数的类。这些可训练参数通常是较小的附加模块,它们可以与预训练模型的主要参数解耦。这样,在微调过程中只更新这些附加模块的参数,而预训练模型的主要参数保持不变或被冻结。

这样,即使是在资源有限的情况下,我们也能够有效地利用预训练模型的强大能力来解决具体的应用问题。

2.模型训练中的显存消耗和训练开销
在深度学习模型训练中,显存消耗是一个非常重要的考虑因素,因为它直接影响到模型训练的速度和可行性。显存消耗主要包括几个方面,下面我将详细解释这些组成部分以及它们是如何影响整体训练开销的。

显存消耗的主要组成部分

  1. 模型参数 (Parameters)- 这包括模型的所有权重和偏置项。- 模型参数的大小取决于模型的架构和层数。- 对于较大的模型,即使是使用半精度浮点数 (fp16 或 bf16),模型参数也可能占据相当大的显存空间。
  2. 模型参数的梯度 (Gradients)- 在反向传播过程中,每个参数都会有一个对应的梯度,用于更新参数。- 梯度的大小与参数相同,因此对于较大的模型来说,这也会占据大量的显存。
  3. 优化器状态 (Optimizer States)- 这包括优化器(如Adam、SGD等)在训练过程中存储的额外状态,例如动量和二阶矩等。- 对于某些优化器(如Adam),每个参数可能有两个额外的状态(动量和二阶矩),这会进一步增加显存消耗。
  4. 中间激活值 (Intermediate Activations)- 这些是在前向传播过程中产生的中间结果,例如每一层的输出。- 中间激活值需要被保存下来以便在反向传播时计算梯度。- 激活值的大小与输入数据的批量大小 (batch size) 和模型结构有关,特别是对于卷积层和全连接层。
  5. 临时缓冲区 (Temporary Buffers)- 在训练过程中,还会有一些临时的缓冲区用于存储计算过程中的中间结果。- 这些缓冲区虽然不是模型训练的核心部分,但在某些情况下也会占用显存。
  6. 框架开销 (Framework Overhead)- 深度学习框架本身也会占用一定的显存,例如PyTorch的CUDA上下文管理等。

显存消耗的影响

  • 显存不足会导致训练速度变慢,因为GPU需要不断地将数据交换到CPU内存中,这种频繁的数据交换称为显存溢出 (out-of-memory, OOM)。
  • 显存不足可能导致训练失败,如果显存完全耗尽,训练将无法继续。
  • 显存限制了模型的规模,更大的模型往往需要更多的显存来进行训练。

训练开销

除了显存消耗之外,模型训练还涉及到其他开销,比如计算时间和电力消耗。

  • 计算时间:显存不足会导致更多的数据交换,从而增加训练时间。
  • 电力消耗:GPU运行需要消耗大量电力,显存不足导致的频繁数据交换会进一步增加电力消耗。
  • 硬件成本:为了满足大型模型训练的需求,可能需要更高级别的GPU,这会增加硬件成本。


本文转载自: https://blog.csdn.net/qq_58281383/article/details/140882070
版权归原作者 TradingYesterday 所有, 如有侵权,请联系我们删除。

“【Datawhale AI 夏令营第三期 Task 3 学习笔记】”的评论:

还没有评论