3万亿token训练的小型1.1B参数语言模型
TinyLlama是一个使用3万亿token预训练的1.1B参数语言模型。它与Llama 2架构兼容,可集成到现有Llama项目中。TinyLlama体积小巧,适用于计算和内存受限的场景。该项目开源了预训练和微调代码,具有高效的训练和推理性能。TinyLlama可应用于推测解码、边缘计算和实时对话等领域。
English | 中文
</div>TinyLlama项目旨在预训练一个1.1B参数的Llama模型,训练数据量为3万亿个token。通过一些适当的优化,我们可以在"仅仅"90天内使用16个A100-40G GPU完成这一目标🚀🚀。训练已于2023年9月1日开始。
<div align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/2f437da0-584e-4e25-ad18-485dc8da343c.png" width="300"/> </div>我们采用了与Llama 2完全相同的架构和分词器。这意味着TinyLlama可以即插即用于许多基于Llama的开源项目。此外,TinyLlama仅有1.1B参数,非常紧凑。这种紧凑性使其能够满足许多对计算和内存占用有严格限制的应用需求。
您可以在EVAL.md中找到TinyLlama的评估结果。
我们将按照以下计划发布中间检查点。
基础模型:
日期 | HF 检查点 | Token数 | 步骤 | 常识平均分 |
---|---|---|---|---|
2023-09-01 | Pythia-1.0B | 300B | 143k | 48.30 |
2023-09-04 | TinyLlama-1.1B-intermediate-step-50k-105b | 105B | 50k | 46.11 |
2023-09-16 | TinyLlama-1.1B-intermediate-step-240k-503b | 503B | 240K | 48.28 |
2023-10-01 | TinyLlama-1.1B-intermediate-step-480k-1T | 1T | 480k | 50.22 |
2023-11-04 | TinyLlama-1.1B-intermediate-step-715k-1.5T | 1.5T | 715k | 51.28 |
2023-11-20 | TinyLlama-1.1B-intermediate-step-955k-2T | 2T | 955k | 51.64 |
2023-12-11 | TinyLlama-1.1B-intermediate-step-1195k-2.5T | 2.5T | 1195k | 53.86 |
2023-12-28 | TinyLlama-1.1B-intermediate-step-1431k-3T | 3T | 1431k | 52.99 |
我们正在撰写一份说明,提供从2T到2.5T检查点显著改进的可能解释(这与bos_id问题有关)
聊天模型:
日期 | HF 检查点 | Token数 | 步骤 | 常识平均分 |
---|---|---|---|---|
2023-09-16 | TinyLlama-1.1B-Chat-V0.1 | 503B | 240K | 49.57 |
2023-10-1 | TinyLlama-1.1B-Chat-V0.3 | 1T | 480K | 51.36 |
2023-11-04 | TinyLlama-1.1B-Chat-V0.4 | 1.5T | 715K | 52.30 |
请注意,基础模型的学习率尚未降低,因此我们建议您也使用微调后的聊天模型。
同时,您可以在这里实时跟踪交叉熵损失。
小而强大的语言模型在许多应用中都很有用。以下是一些潜在用途:
此外,我们的代码可以作为对预训练5亿以下参数语言模型感 兴趣的爱好者的参考,无需过早深入研究Megatron-LM。
以下是我们训练设置的一些详细信息:
设置 | 描述 |
---|---|
参数 | 1.1B |
注意力变体 | 分组查询注意力 |
模型大小 | 层数: 22, 头数: 32, 查询组数: 4, 嵌入大小: 2048, 中间大小 (Swiglu): 5632 |
序列长度 | 2048 |
批量大小 | 200万个token (2048 * 1024) |
学习率 | 4e-4 |
学习率调度 | 余弦退火,2000步预热。参见Issue 27了解一个小bug |
训练数据 | Slimpajama & Starcoderdata |
数据预处理 | 排除了Slimpajama的GitHub子集;从Starcoderdata中抽样所有代码 |
合并数据集大小 | 约950B个token |
训练期间的总token数 | 3万亿(略多于3个周期/1430k步) |
自然语言与代码比例 | 7:3 |
硬件 | 16个A100-40G GPU |
我们的代码库支持以下功能:
致谢:flash attention 2、融合层归一化、融合交叉熵损失和融合旋转位置编码来自FlashAttention仓库。融合swiglu来自xformers。
得益于这些优化,我们在 每个A100-40G GPU上实现了每秒24k个token的吞吐量,这相当于56%的模型浮点运算利用率,且不使用激活检查点(我们预计在A100-80G上MFU会更高)。这意味着您可以在32小时内用8个A100训练一个符合chinchilla最优的TinyLlama(1.1B参数,22B token)。这些优化还大大减少了内存占用,让我们能够将1.1B参数的模型塞进40GB的GPU内存,并以每GPU 16k token的批量大小进行训练。您也可以在3090/4090 GPU上预训练TinyLlama,只需使用更小的每GPU批量大小。 下面是我们代码库与Pythia和MPT训练速度的比较。
模型 | 在300B token上花费的A100 GPU小时数 |
---|---|
TinyLlama-1.1B | 3456 |
Pythia-1.0B | 4830 |
MPT-1.3B | 7920 |
<small> Pythia的数据来自他们的论文。MPT的数据来自这里,其中他们说MPT-1.3B"在440个A100-40GB上训练了大约半天",处理了200B个token。 </small>
TinyLlama是一个相对较小的模型,使用分组查询注意力,这意味着它在推理时也很快。以下是我们测量的一些吞吐量:
框架 | 设备 | 设置 | 吞吐量(token/秒) |
---|---|---|---|
Llama.cpp | Mac M2 16GB RAM | 批量大小=1; 4位推理 | 71.8 |
vLLM | A40 GPU | 批量大小=100, n=10 | 7094.5 |
有关如何预训练TinyLlama的说 明,请参阅PRETRAIN.md。
我们在 sft 中包含了一个简单的全参数微调和推理脚本。我们的 V0.1 聊天模型就是使用这个脚本进行微调的。我们使用的微调数据集是 openassistant-guanaco。 对于 RAM 小于 4GB 的微调,我们建议您参考 Qlora 和 bitsandbytes 仓库。 我们没有进行广泛的超参数调优,也没有选择更高性能的微调数据集。我们希望社区能够探索 TinyLlama 的微调,并开发出更好的聊天模型。我将在此仓库中包含社区微调的模型。
本项目仍在积极开发中。我们是一个非常小的团队。非常感谢社区的反馈和贡献。以下是我们计划进行的一些工作:
本仓库基于 lit-gpt 和 flash-attention 构建。如果您还不了解这些优秀的开源项目,一定要去探索一下!
@online{lit-gpt,
author = {Lightning AI},
title = {Lit-GPT},
url = {https://github.com/Lightning-AI/lit-gpt},
year = {2023},
}
@article{dao2023flashattention2,
title ={Flash{A}ttention-2: Faster Attention with Better Parallelism and Work Partitioning},
author ={Dao, Tri},
year ={2023}
}
本项目目前由新加坡科技设计大学 StatNLP 研究组的 Peiyuan Zhang *、Guangtao Zeng *、Tianduo Wang 和 Wei Lu 共同贡献。
如果您认为我们的工作有价值,请引用:
@misc{zhang2024tinyllama,
title={TinyLlama: An Open-Source Small Language Model},
author={Peiyuan Zhang and Guangtao Zeng and Tianduo Wang and Wei Lu},
year={2024},
eprint={2401.02385},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
上图是 Llama 2 论文中的训练损失曲线。这里我引用该论文的一段话:"我们观察到,在 2T 个 Token 的预训练之后,模型仍然没有显示出任何饱和的迹象"。这就是为什么我们认为对一个 1.1B 的模型进行 3T 个 Token 的预训练是合理的。即使损失曲线最终不会下降,我们仍然可以研究饱和现象并从中学到一些东西。
这张图来自 Pythia 论文,显示了 LAMBADA 准确率随总训练 Token 数(300B)的变化。"饱和"一词特 指 70M 和 160M 模型。值得注意的是,即使是 410M 模型在 300B Token 时也没有饱和,它仍然呈现上升趋势,类似于更大模型的趋势。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场 分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它 为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号