🚀 全量微调自定义大语言模型
本项目基于Meta-Llama-3.1-8B架构实现了一个自定义训练的语言模型。与之前使用高秩适配器的版本不同,该模型采用全量微调的方式,以增强其在各种任务中的学习能力。
🚀 快速开始
环境安装
pip install -U transformers accelerate trl wandb wheel packaging peft bitsandbytes liger-kernel flash_attn
训练命令
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"
✨ 主要特性
- 全量微调:更新所有模型参数,以实现全面学习。
- 8位AdamW优化器:使用
adamw_bnb_8bit
进行内存高效训练。
- Flash Attention 2:实现
flash_attention_2
以加快训练速度。
- 梯度检查点:支持在有限GPU内存下进行训练。
- Liger和打包技术:利用
use_liger=true
和packing=true
进行高效数据处理。
- BFloat16精度:使用
bfloat16
以平衡精度和性能。
📦 安装指南
pip install -U transformers accelerate trl wandb wheel packaging peft bitsandbytes liger-kernel flash_attn
💻 使用示例
中间填充(FIM)功能使用示例
FIM允许模型在给定前缀和后缀的情况下完成文本,这对于代码补全、文本填充和上下文感知生成等任务特别有用。
要使用FIM功能,请使用特殊标记来构造输入:
<|fim_start|>
:标记FIM输入的开始
<|fim_marker|>
:将前缀与后缀分开
<|fim_gen|>
:指示生成内容应开始的位置
<|fim_end|>
:标记FIM输入的结束
示例FIM输入:
<|fim_start|>{前缀}<|fim_marker|>{后缀}<|fim_gen|>
模型将生成内容替换<|fim_gen|>
,填充前缀和后缀之间的中间部分。
反向预测和指令反向翻译示例
此技术通过训练模型预测对话或文本的前一部分来增强其上下文理解能力,也称为指令反向翻译。
工作原理:
- 给模型一段对话或文本片段。
- 要求它预测此片段之前的内容。
- 此过程有助于模型理解上下文、对话流程和思想的逻辑进展。
优点:
- 提高上下文理解能力
- 增强保持连贯、上下文合适对话的能力
- 更好地掌握文本中的因果关系
示例用例:
输入:
人类:感谢你提供关于巴黎的信息。你能推荐一些那里受欢迎的旅游景点吗?
任务:预测此对话中的上一次交流。
可能的模型输出:
人类:法国的首都是什么?
助手:法国的首都是巴黎。它被称为“光之城”,以其艺术、文化和历史地标而闻名。
人类:感谢你提供关于巴黎的信息。你能推荐一些那里受欢迎的旅游景点吗?
Meta - FIM示例
<|fim_start|>人类:今天天气怎么样?
助手:很抱歉,我无法获取实时天气信息。你能提供一下你的位置吗?<|fim_marker|>人类:谢谢你提供关于巴黎的信息。你能推荐一些那里受欢迎的旅游景点吗?<|fim_gen|>人类:我在法国巴黎。
助手:啊,巴黎!虽然我不能提供实时天气信息,但我可以告诉你,巴黎的气候通常比较温和。我建议你查看当地的天气网站或应用程序以获取最新信息。
人类:这是个好主意,谢谢。既然我们在谈论巴黎,你能告诉我一些著名的地标吗?
助手:当然可以!巴黎以其标志性的地标而闻名。以下是一些著名的地标:
1. 埃菲尔铁塔
2. 卢浮宫博物馆
3. 巴黎圣母院大教堂
4. 凯旋门
5. 圣心大教堂<|fim_end|>
在这个示例中,模型需要理解并生成一个连贯的对话,使其适合给定的起点和终点之间。
📚 详细文档
模型概述
- 开发者: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:苹果的预训练语料库,用于文本补全/预测。
- 英语、西班牙语和法语维基百科:用于广泛的语言理解。
- Starcoder:专注于Python的高质量代码数据集,用于代码补全任务。
训练过程
上述已给出安装和训练命令相关内容。
评估
任务 |
版本 |
过滤器 |
少样本数量 |
指标 |
值 |
标准误差 |
tinyBenchmarks |
N/A |
|
|
|
|
|
- tinyArc |
0 |
none |
25 |
acc_norm |
↑ |
0.5821 |
- tinyGSM8k |
0 |
flexible - extract |
5 |
exact_match |
↑ |
0.4989 |
|
|
strict - match |
5 |
exact_match |
↑ |
0.4867 |
- tinyHellaswag |
0 |
none |
10 |
acc_norm |
↑ |
0.8307 |
- tinyMMLU |
0 |
none |
0 |
acc_norm |
↑ |
0.6651 |
- tinyTruthfulQA |
0 |
none |
0 |
acc |
↑ |
0.4991 |
- tinyWinogrande |
0 |
none |
5 |
acc_norm |
↑ |
0.7558 |
预期用途
该模型旨在用于以下方面:
- 文本补全和生成
- 代码补全(特别是Python)
- 指令遵循
- 通用语言理解
- 上下文感知文本填充(使用FIM)
局限性和偏差
- 模型可能表现出训练数据中存在的偏差。
- 它缺乏超出训练数据的实时知识。
- 在没有人工监督的情况下,不应将其用于关键决策。
技术规格
- 基础模型:meta - llama/Meta - Llama - 3.1 - 8B
- 训练方法:全量微调
- 库:Hugging Face Transformers和TRL
🔧 技术细节
本模型采用全量微调的方式对Meta-Llama-3.1-8B架构进行训练,在训练过程中运用了多种先进技术,如8位AdamW优化器、Flash Attention 2、梯度检查点等,以提高训练效率和性能。同时,通过多样化的数据集混合、多格式指令调整、上下文数据前缀和FIM训练等方法,增强了模型的语言理解和上下文处理能力。
📄 许可证
本模型使用Apache - 2.0许可证。
联系信息
如需咨询有关此模型的问题,请通过模型仓库联系Eric Florenzano。