LongLoRA:高效扩展大语言模型上下文长度的微调方法

论文地址:https://arxiv.org/abs/2309.12307
github地址:https://github.com/dvlab-research/LongLoRA

1. 背景与挑战

大语言模型(LLMs)通常在预定义的上下文长度下进行训练,例如 LLaMA 的 2048 个 token 和 Llama2 的 4096 个 token。然而,这种预定义的上下文长度限制了模型在处理长文档或回答长问题时性能。

主要挑战:

  • 计算成本高昂: 扩展上下文长度会导致自注意力机制的计算成本呈二次增长,显著增加训练时间和 GPU 内存需求。例如,将上下文长度从 2048 扩展到 8192 会使自注意力层的计算成本增加 16 倍。
  • 现有微调方法的局限性:
    • 全量微调: 虽然效果最佳,但计算成本过高,普通研究者难以承受。例如,Position Interpolation 需要 32 个 A100 GPU 来将 LLaMA 模型从 2k 扩展到 8k 上下文长度,更长的上下文则需要 128 个 A100 GPU。
    • 低秩适应(LoRA): 虽然比全量微调更高效,但在长上下文扩展方面效果不佳,困惑度较高。

2. LongLoRA:高效扩展上下文长度的解决方案

LongLoRA 旨在以更低的计算成本高效地扩展预训练 LLMs 的上下文长度,同时保持与全量微调相近的性能。

<
### 不同比特数下的模型微调方法及其优化算法 #### 6-bit Full Parameter Fine-Tuning (FPFT) 全参数微调是一种常见的技术,在任务性能至关重要的情况下能提供最佳效果[^1]。然而,对于量化到较低位宽(如6-bit)的模型而言,这种微调方式可能会面临梯度消失或爆炸的问题。因此,为了实现有效的6-bit FPFT,通常会结合一些先进的优化器和技术来稳定训练过程。 ```python import torch.nn as nn from transformers import Trainer, TrainingArguments def six_bit_fpft(model, dataset): optimizer = BAdam(model.parameters(), lr=0.001) # 使用BAdam作为优化器 training_args = TrainingArguments(output_dir="./results", num_train_epochs=3) trainer = Trainer( model=model, args=training_args, train_dataset=dataset, optimizers=(optimizer,) ) trainer.train() ``` #### Frozen Fine-Tuning 冻结微调是指仅更新部分网络层权重的方法。这种方法特别适合资源受限场景下运行大语言模型的任务。尽管如此,它可能无法充分利用整个模型的能力,尤其是在处理复杂任务时。 ```python for param in model.base_model.parameters(): param.requires_grad = False # 只解冻分类头或其他特定模块 model.classifier.weight.requires_grad = True ``` #### Low-Rank Adapter Tuning (LoRA) 低秩适配微调通过引入额外的小规模矩阵分解结构来减少计算开销并保持良好的泛化能力。相比传统全量调整策略,它可以显著降低内存消耗和推理延迟时间。 ```python config.lora_rank = 8 lora_config = LoRAConfig(r=config.lora_rank, loras={}) apply_lora(lora_config, model) trainer = Trainer(...) trainer.add_callback(LogCallback()) ``` #### Quantized LoRA (QLoRA) 基于量化的大规模预训练模型上应用LoRA技术被称为Quantized LoRA(QLoRA)[^3]。此方案允许我们利用诸如AQLM、AWQ等高效压缩框架进一步缩小模型尺寸而不损失太多精度。 ```python quantization_method='awq' template_fn, _ = get_template_and_fix_tokenizer(quantization_method) model = template_fn(load_model('llama'), **kwargs).to(device) run_sft(model, ...) ``` 上述四种主要类型的细粒度调节各有千秋,具体选择取决于实际应用场景需求以及硬件条件限制等因素。与此同时,还有多种新型优化算法被开发出来用于加速收敛速度或者改善最终结果质量: - **GaLore**: 集成全局与局部信息的学习率调度机制; - **DoRA**: 动态对象关系注意机制辅助序列建模; - **LongLoRA**: 扩展长度支持超长上下文输入; - ...等等其他创新性解决方案不断涌现。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值