什么是LongLoRA?
LongLoRA(Long Low-Rank Adaptation)是一种高效的微调方法,可以显著扩展预训练大语言模型的上下文长度,同时保持较低的计算成本。它主要包含两个关键技术:
-
稀疏局部注意力(Shifted Sparse Attention): 在微调阶段使用稀疏局部注意力机制,大幅降低计算成本。
-
改进的LoRA: 通过开放嵌入层和归一化层进行训练,弥补了原始LoRA在长上下文扩展中的不足。
LongLoRA能够将Llama2-7B模型的上下文从4k扩展到100k,或将Llama2-70B扩展到32k,仅需要单台8 GPU的机器即可完成。
相关资源
论文
代码实现
预训练模型
数据集
- Yukang/LongAlpaca-12k: 用于监督微调的长上下文问答数据集
博客文章
- Papers Explained: LongLoRA - 对论文的详细解读
使用教程
- 克隆代码库:
git clone https://github.com/dvlab-research/LongLoRA.git
cd LongLoRA
- 安装依赖:
pip install -r requirements.txt
- 下载预训练模型并进行微调:
python train.py --model_name_or_path meta-llama/Llama-2-7b-hf \
--output_dir ./output \
--num_train_epochs 1 \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 16 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 2000 \
--save_total_limit 1 \
--learning_rate 2e-5 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--fsdp "full_shard auto_wrap" \
--fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \
--tf32 True \
--model_max_length 8192 \
--gradient_checkpointing True \
--dataloader_num_workers 1
更多详细使用说明请参考GitHub README。
总结
LongLoRA为扩展大语言模型的上下文长度提供了一种高效的解决方案。通过本文提供的资源,读者可以深入了解LongLoRA的原理,并快速上手使用这一技术。随着长上下文处理能力的提升,LLM将在更多复杂任务中发挥重要作用。