项目技术路线指导-3
该部分主要指导微调方式、保存方式和该过程中量化的优化方式
LORA
LoRA 是一种微调技术,旨在在预训练模型的基础上添加低秩结构,以实现高效的参数化微调。与传统的微调不同,LoRA 不需要修改原始预训练模型的参数,而是添加一个低秩适应层,这使得微调更为参数高效。
模型结构中的 LoRA: 在这段代码中,我们可以看到检查模型是否具有 pretrained_model 属性。如果模型具有这个属性(并且有一个名为 v_head 的属性),这意味着它使用了 LoRA 或某种类似的技术,其中 pretrained_model 可能代表的是预训练的主模型,而其他属性(如 v_head)可能是该模型上的附加头部或部分。
if hasattr(model, "pretrained_model"): # for models with valuehead (currently using LoRA only)
backbone_model = getattr(model, "pretrained_model")
LoRA 微调类型的检查: 在另一段代码中,我们可以看到检查微调类型是否为 “lora”。根据微调类型,代码执行不同的保存或加载逻辑。
if self.finetuning_args.finetuning_type == "lora":
backbone_model.save_pretrained(output_dir, state_dict=get_state_dict(backbone_model))
和
if self.finetuning_args.finetuning_type == "lora":
backbone_model.load_adapter(self.state.best_model_checkpoint, getattr(backbone_model, "active_adapter"))
这些代码段提供了关于如何在此特定实现中使用 LoRA 的一些信息。具体来说,它们描述了如何在保存和加载模型时处理与 LoRA 相关的组件。
量化
量化 在深度学习中主要是指将模型的参数从浮点数转化为更小范围、更低精度的表示,例如从32位浮点数转为8/4位整数。量化的主要目的是减少模型的大小和推理时间,同时保持精度损失在可接受范围内。
量化过程中涉及两个主要步骤:
训练:在模型训练阶段,可以使用模拟量化,即在前向传播时使用低精度数值,但在反向传播和权重更新时仍使用原始的高精度数值。
推理:在模型推理阶段,模型使用量化后的低精度数值。