语言:
- 英文
标签:
- llama
- 大语言模型
- 微调
- 中间填充
- 指令跟随
许可证: Apache-2.0
数据集:
- mlabonne/FineTome-100k
- mlfoundations/dclm-baseline-1.0-parquet
- wikimedia/wikipedia
- bigcode/starcoderdata
管道标签: 文本生成
全参数微调定制大语言模型
模型概述
本项目基于Meta-Llama-3.1-8B架构实现了一个定制训练的语言模型。与之前使用高秩适配器的版本不同,本模型采用全参数微调以增强各类任务的学习能力。
- 开发者: Eric Florenzano
- 模型类型: 大语言模型(LLM)
- 支持语言: 英语(侧重Python代码相关任务)
- 许可证: Apache-2.0
- 基础模型: meta-llama/Meta-Llama-3.1-8B
独特训练方法
本模型直接混合训练了高质量通用文本/代码补全数据集和指令跟随数据集,主要特点包括:
- 全参数微调: 不同于之前的LoRA方法,本版本更新所有模型参数
- 多样化数据混合: 结合预训练和指令数据集实现全面语言理解
- 多格式指令调优: 交替使用ChatML和Llama Chat模板实现灵活指令跟随
- 上下文数据前缀: 使用来源信息解决训练数据不平衡问题
- 中间填充训练(FIM): 引入FIM任务增强上下文理解
训练数据
混合使用的高质量数据源包括:
- FineTome-100k: 通用语言任务的高质量指令调优数据
- dclm-baseline-1.0-parquet: Apple的文本补全/预测预训练语料库
- 维基百科(英/西/法语): 扩展语言理解广度
- Starcoder: 专注Python代码的高质量代码补全数据集
训练流程
环境配置
pip install -U transformers accelerate trl wandb wheel packaging peft bitsandbytes liger-kernel flash_attn
核心特性
- 全参数微调: 更新所有模型参数实现全面学习
- 8-bit AdamW优化器: 使用
adamw_bnb_8bit
实现内存高效训练
- Flash Attention 2: 采用
flash_attention_2
加速训练
- 梯度检查点: 支持有限GPU内存下的训练
- Liger与数据打包: 使用
use_liger=true
和packing=true
提升数据处理效率
- BFloat16精度: 采用
bfloat16
平衡精度与性能
高级训练技术
本模型整合了多项先进训练技术:
1. 中间填充(FIM)能力
FIM使模型能在给定前缀和后缀时完成文本填充,特别适用于代码补全、文本插值和上下文感知生成等任务。
使用方法
使用特殊标记构建输入:
<|fim_start|>
: FIM输入起始标记
<|fim_marker|>
: 分隔前缀与后缀
<|fim_gen|>
: 生成内容起始位置
<|fim_end|>
: FIM输入结束标记
示例:
<|fim_start|>{前缀}<|fim_marker|>{后缀}<|fim_gen|>
2. 逆向预测与指令回译
通过预测对话/文本的前序内容增强上下文理解能力。
技术原理:
- 给定对话/文本片段
- 预测该片段之前的交互内容
- 增强上下文连贯性与逻辑关系理解
优势:
- 提升上下文理解
- 增强对话连贯性
- 更好掌握文本因果关系
应用示例:
输入:
用户:感谢关于巴黎的介绍。能推荐些热门景点吗?
任务:预测前序对话
可能输出:
用户:法国首都是?
助手:法国首都是巴黎,这座"光之城"以艺术文化和历史地标闻名。
用户:感谢关于巴黎的介绍。能推荐些热门景点吗?
3. 元FIM技术
将FIM应用于更大文本单元(完整对话/文档),提升处理复杂嵌套上下文的能力。
优势:
- 增强长距离依赖理解
- 提升长文本连贯性
- 优化多段落信息整合能力
示例:
<|fim_start|>用户:今天天气如何?
助手:我无法获取实时天气,请提供您的位置。<|fim_marker|>用户:感谢巴黎景点推荐<|fim_gen|>用户:我在巴黎
助手:巴黎通常气候温和,建议查看当地天气网站获取实时信息...
<|fim_end|>
评估结果
任务 |
版本 |
过滤 |
n-shot |
指标 |
|
数值 |
|
误差 |
tinyBenchmarks |
N/A |
|
|
|
|
|
|
|
- tinyArc |
0 |
无 |
25 |
acc_norm |
↑ |
0.5821 |
± |
N/A |
- tinyGSM8k |
0 |
灵活提取 |
5 |
精确匹配 |
↑ |
0.4989 |
± |
N/A |
|
|
严格匹配 |
5 |
精确匹配 |
↑ |
0.4867 |
± |
N/A |
- tinyHellaswag |
0 |
无 |
10 |
acc_norm |
↑ |
0.8307 |
± |
N/A |
- tinyMMLU |
0 |
无 |
0 |
acc_norm |
↑ |
0.6651 |
± |
N/A |
- tinyTruthfulQA |
0 |
无 |
0 |
准确率 |
↑ |
0.4991 |
± |
N/A |
- tinyWinogrande |
0 |
无 |
5 |
acc_norm |
↑ |
0.7558 |
± |
N/A |
训练命令
python sft_14.py \
--run_name="llama3.1-8b-continued2" \
--model_name_or_path="meta-llama/Meta-Llama-3.1-8B" \
--dataset_name="mlfoundations/dclm-baseline-1.0-parquet,mlabonne/FineTome-100k" \
--report_to="wandb" \
--optim="adamw_bnb_8bit" \
--lr_scheduler_type="cosine" \
--max_steps=100000 \
--max_seq_length=64000 \
--learning_rate=0.00001 \
--attn_implementation="flash_attention_2" \
--save_strategy="steps" \
--save_steps 50 \
--save_total_limit=10 \
--per_device_train_batch_size=1 \
--per_device_eval_batch_size=1 \
--gradient_accumulation_steps=8 \
--logging_steps=1 \
--num_train_epochs=1 \
--push_to_hub \
--hub_model_id="ericflo/Llama-3.1-8B-ContinuedTraining2-FFT" \
--hub_strategy="all_checkpoints" \
--gradient_checkpointing \
--use_liger=true \
--packing=true \
--torch_dtype="bfloat16" \
--output_dir="continuedtraining2_output"
应用场景
本模型适用于:
- 文本补全与生成
- 代码补全(特别是Python)
- 指令跟随
- 通用语言理解
- 上下文感知文本填充(FIM)
局限性
- 可能反映训练数据中的偏见
- 缺乏训练时点后的实时知识
- 关键决策需配合人工审核
技术规格
- 基础模型: meta-llama/Meta-Llama-3.1-8B
- 训练方法: 全参数微调
- 实现库: Hugging Face Transformers和TRL
联系方式
通过模型仓库联系Eric Florenzano。