语言:
- 中文
许可证: llama3
库名称: transformers
数据集:
- prince-canuma/fineweb-CC-MAIN-2024-10-1B-en
- HuggingFaceFW/fineweb
标签:
- Llama-3-6B
- 6B
基础模型:
- prince-canuma/Llama-3-6B-v0
模型概述
这是全球首个拥有60亿参数的Llama-3基础模型。该模型是基于prince-canuma/Llama-3-6B-v0的预训练版本,通过降级循环技术从Meta-Llama-3-8B创建而来。模型在fineweb的10亿纯英文文本标记上进行了持续预训练,在评估集上取得了令人印象深刻的成果:
模型描述
这是发布在Hub上的🤗 transformers模型卡片,内容为自动生成。
模型来源
- 代码仓库: https://github.com/Blaizzy/Coding-LLMs-from-scratch/tree/main/Llama-3
- 视频介绍: https://youtube.com/playlist?list=PLDn_JsyofyfTH5_5V1MNb8UYKxMl6IMNy&si=5Y4cm-6wrMOD1Abr
用途
您可以使用该模型创建适用于多种场景的指令和对话版本,例如:编程助手、RAG、函数调用等。
局限性
该模型继承了基础模型的部分限制以及其创建过程中的一些额外限制:
- 编码和数学能力有限:根据基准测试,该模型需要更多关于代码和数学数据的预训练/微调才能擅长推理任务。
- 语言限制:该模型仅在英文数据上进行了持续预训练。如果您计划用于多语言场景,建议进行微调或持续预训练。
快速开始
使用以下代码快速体验模型:
from transformers import AutoModelForCausalLM, AutoConfig, AutoTokenizer
model_name = "prince-canuma/Llama-3-6B-v0.1"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
inputs = tokenizer(
[
"Python是谁创造的?"
], return_tensors = "pt")
from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
_ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 200)
输出示例:
<|begin_of_text|>Python是谁创造的?Python有哪些用途?Python 2和Python 3有什么区别?Python和Python 3有什么区别?
Python是由Guido van Rossum于1991年创造的编程语言。它被广泛用于Web开发、数据科学和机器学习领域。Python还用于创建软件应用程序和游戏。
Python是一门功能强大且易于学习和使用的语言。它拥有丰富的内置函数库和软件包,使得编写代码变得简单。Python在Web开发领域也非常流行,许多知名Web框架如Django和Flask都是用Python编写的。
Python还应用于数据科学和机器学习领域。它拥有大量用于数据分析、机器学习和人工智能的软件包。Python也被用于开发软件应用程序和游戏。
Python 2和Python 3是Python语言的两个不同版本。Python 2是最初的...
训练详情
降级循环技术

图1. 降级循环工作流程,详见[arxiv.org/abs/2404.08634](https://arxiv.org/abs/2404.08634)。
这项技术允许您从大型预训练模型的检查点创建不同规模的新LLM。具体方法是:选取参考模型(如Llama-3-8B),复制其32层中的24层权重以及嵌入层和预测头;然后初始化一个具有24层的较小目标模型并加载这些预训练权重。
这个新模型很可能仍能输出可读内容,但要获得良好性能需要继续进行预训练。

图2. 降级模型与参考模型对比(未经持续预训练)。
训练数据
为了持续预训练,我从Huggingface的FineWeb CC-Main-2024-10数据集中提取了10亿标记。
训练超参数
训练过程中使用了以下超参数:
- 学习率:0.0002
- 训练批次大小:2
- 评估批次大小:2
- 随机种子:42
- 分布式类型:多GPU
- 设备数量:4
- 梯度累积步数:8
- 总训练批次大小:64
- 总评估批次大小:8
- 优化器:带beta=(0.9,0.999)和epsilon=1e-08的Adam
- 学习率调度器类型:余弦
- 学习率预热步数:100
- 训练轮次:2

查看axolotl配置
axolotl版本:0.4.0
基础模型:prince-canuma/Llama-3-6B-v0.1
模型类型:AutoModelForCausalLM
分词器类型:AutoTokenizer
8bit加载:false
4bit加载:true
严格模式:false
数据集:
- 路径:prince-canuma/fineweb-CC-MAIN-2024-10-1B-en
类型:completion
分割:train
数据集准备路径:last_run_prepared
验证集比例:0.001
输出目录:./llama-3-6b
保存安全张量:true
适配器:qlora
lora模型目录:
序列长度:8192
样本打包:false
填充至序列长度:false
lora_r:128
lora_alpha:128
lora_dropout:0.05
lora_target_modules:
lora_target_linear:true
lora_fan_in_fan_out:
wandb项目:llama-3-6b
wandb实体:
wandb监控:
wandb名称:
wandb记录模型:
梯度累积步数:8
微批次大小:2
训练轮次:2
优化器:paged_adamw_32bit
学习率调度器:cosine
学习率:2e-4
训练输入:false
按长度分组:false
bf16:auto
fp16:
tf32:false
梯度检查点:true
早停耐心:
从检查点恢复:
本地排名:
日志步长:1
xformers注意力:
闪光注意力:true
预热步数:100
每轮评估次数:4
评估表大小:
保存步数:4000
调试:
深度速度:
权重衰减:0.0
fsdp:
fsdp配置:
特殊标记:
pad_token:"<|reserved_special_token_0|>"
训练结果
共进行了3组独立实验。由于预算限制,这些实验使用了QLoRA而非全参数微调。
- v0:进行了1000步测试运行,检验模型是否能通过QLoRA参数改进。
- v1:调整了QLoRA参数(Rank和Alpha)。
- v2:主要实验,在FineWeb的10亿标记上进行了2轮训练。
所有细节可在我的Wandb面板查看:https://wandb.ai/prince-canuma/llama-3-6b?nw=nwuserprincecanuma

图3. 实验训练损失曲线(Wandb)。
总体指标:
训练损失 |
轮次 |
步数 |
验证损失 |
7.1562 |
0.0 |
1 |
7.1806 |
2.7339 |
0.25 |
5867 |
2.6266 |
2.6905 |
0.5 |
11734 |
2.5872 |
2.6134 |
0.75 |
17601 |
2.5549 |
2.532 |
1.0 |
23468 |
2.5235 |
2.5319 |
1.25 |
29335 |
2.5067 |
2.3336 |
1.5 |
35202 |
2.4968 |
2.3486 |
1.75 |
41069 |
2.4942 |
框架版本
- PEFT 0.10.0
- Transformers 4.40.0.dev0
- Pytorch 2.2.0+cu121
- Datasets 2.15.0
- Tokenizers 0.15.0
硬件配置
- 4块RTX6000显卡(由General Catalyst通过JarvisLabs赞助提供)
评估
基准测试
- Hellaswag:研究基础常识推理的数据集
- ARC:来自3至9年级科学考试的多选题数据集
- MMLU:包含57项任务的测试,衡量文本模型的多任务准确性
- TruthfulQA:评估模型重现网络常见错误倾向的测试
- Winogrande:常识推理测试
- GSM8k:多样化的小学数学应用题,衡量模型解决多步数学推理问题的能力
结果

图4. Llama-3-8B、Llama-3-6B和Llama-3-6B(持续预训练后)的性能对比
在10亿标记上进行2轮预训练带来了全面积极影响。新基础模型现在与其参考模型(Llama-3-8B)性能相当,同时体积缩小了1.3倍。

图5. Llama-3-8B、Llama-2-13B、Yi-1.5-6B和Llama-3-6B的性能对比
Llama-3-6B在其规模类别中具有竞争力,在6个多样化基准测试中与比自身大2倍的模型表现相当。
总结与未来方向
本次实验取得了成功!运用这项技术,我将能够构建多种变体。这是计划创建的众多新基础模型中的第一个。
接下来,我计划探索不同的数据混合方案并进行全参数微调,这些都将有助于开发其他小型模型以及更大更强大的模型。
引用
BibTeX格式:
@misc{prince2024downcycling,
title={高效LLM降级循环:从预训练巨模生成多样化规模模型},
author={Prince Canuma},
year={2024},
}
致谢
衷心感谢社区提供的宝贵专业知识和坚定支持。
特别感谢General Catalyst(GC)的Viet为我提供了急需的计算资源。
这是我迄今为止最雄心勃勃的项目,没有了不起的开源ML社区就不可能实现!
开发者们,我期待看到并了解你们创造的创新微调和应用。
用户们,我很高兴了解你们的使用体验和场景。
感谢你们的关注与支持!
参考文献:
@misc{komatsuzaki2023sparse,
title={稀疏升级:从密集检查点训练混合专家},
author={Aran Komatsuzaki等},
year={2023},
eprint={2212.05055},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
@misc{sanyal2024pretraining,
title={用更少标记预训练小型基础语言模型},
author={Sunny Sanyal等},
year={2024},
eprint={2404.08634},
archivePrefix={arXiv},
primaryClass={cs.CL}
}