🚀 TinyLlama-1.1B-v1.1
TinyLlama-1.1B-v1.1采用了与Llama 2完全相同的架构和分词器,可无缝融入众多基于Llama的开源项目。此外,它仅具有11亿个参数,体积小巧,能够满足对计算和内存要求较低的各类应用需求。
🚀 快速开始
你需要transformers>=4.31
,更多信息请查看 TinyLlama 的GitHub页面。
from transformers import AutoTokenizer
import transformers
import torch
model = "TinyLlama/TinyLlama_v1.1"
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = transformers.pipeline(
"text-generation",
model=model,
torch_dtype=torch.float16,
device_map="auto",
)
sequences = pipeline(
'The TinyLlama project aims to pretrain a 1.1B Llama model on 3 trillion tokens. With some proper optimization, we can achieve this within a span of "just" 90 days using 16 A100-40G GPUs 🚀🚀. The training has started on 2023-09-01.',
do_sample=True,
top_k=10,
num_return_sequences=1,
repetition_penalty=1.5,
eos_token_id=tokenizer.eos_token_id,
max_length=500,
)
for seq in sequences:
print(f"Result: {seq['generated_text']}")
✨ 主要特性
- 架构兼容:采用与Llama 2相同的架构和分词器,可在许多基于Llama的开源项目中直接使用。
- 模型小巧:仅11亿个参数,适合对计算和内存要求较低的应用。
- 多领域能力:通过不同阶段的预训练,生成了具有不同专长的模型版本,如数学代码能力、中文理解能力等。
📦 安装指南
你需要确保transformers
库的版本大于等于4.31,可使用以下命令进行安装:
pip install transformers>=4.31
💻 使用示例
基础用法
from transformers import AutoTokenizer
import transformers
import torch
model = "TinyLlama/TinyLlama_v1.1"
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = transformers.pipeline(
"text-generation",
model=model,
torch_dtype=torch.float16,
device_map="auto",
)
sequences = pipeline(
'The TinyLlama project aims to pretrain a 1.1B Llama model on 3 trillion tokens. With some proper optimization, we can achieve this within a span of "just" 90 days using 16 A100-40G GPUs 🚀🚀. The training has started on 2023-09-01.',
do_sample=True,
top_k=10,
num_return_sequences=1,
repetition_penalty=1.5,
eos_token_id=tokenizer.eos_token_id,
max_length=500,
)
for seq in sequences:
print(f"Result: {seq['generated_text']}")
📚 详细文档
概述
在本项目中,我们并非只训练一个TinyLlama模型,而是先在包含15万亿个标记的语料库上训练TinyLlama,以获得基础语言能力。随后,通过三种不同的数据采样方式进行持续预训练,将该模型转化为三种不同的模型。具体过程请参考下图。

预训练
由于一些问题(bug1,bug2),我们尝试重新训练TinyLlama以提供更好的模型。我们使用2万亿个标记对模型进行训练,并将预训练分为三个不同阶段:1)基础预训练;2)特定领域的持续预训练;3)冷却阶段。
基础预训练
在初始阶段,我们仅使用slimpajama
语料库训练模型,以培养其常识推理能力。在此基础预训练期间,模型使用1.5万亿个标记进行训练。由于我们使用的集群每个节点有4个A100 - 40G GPU,且仅在节点内分片模型权重,因此此次只能将批量大小设置为约180万个标记。
特定领域的持续预训练
在此预训练阶段,我们引入了三种不同的语料库:slimpajama
(与第一阶段相同)、数学与代码语料库(starcoder
和proof pile
)以及中文语料库(Skypile
)。这种方法使我们能够开发出具有特定能力的三种变体模型。
在该阶段的前约60亿个标记训练中,我们线性增加特定领域语料库(不包括slimpajama
,因为它与第一阶段保持不变)的采样比例。这种预热采样增加策略旨在逐渐调整预训练数据的分布,确保训练过程更加稳定。在采样增加阶段之后,我们继续使用稳定的采样策略对模型进行预训练,直到达到约18.5万亿个标记。
冷却阶段
在预训练结束时,实施冷却阶段已成为实现更好模型收敛的关键技术。然而,由于我们在开始时已经使用了余弦学习率策略,因此像MiniCPM或DeepSeek那样调整冷却阶段的学习率变得具有挑战性。因此,我们尝试通过调整批量大小来进行冷却。具体而言,在冷却阶段,我们将批量大小从180万个标记增加到720万个标记,同时保持原有的余弦学习率调度。
Tinyllama模型家族
经过广泛而详细的预训练过程,我们现在发布三种专门版本的模型:
- TinyLlama_v1.1:标准版本,用于通用目的。
- TinyLlama_v1.1_Math&Code:具备更好的数学和代码处理能力。
- TinyLlama_v1.1_Chinese:对中文有良好的理解能力。
数据
以下是各阶段的数据分布情况:
TinyLlama_v1.1
语料库 |
基础预训练 |
特定领域的持续预训练 |
冷却阶段 |
Slimpajama |
100.0 |
100.0 |
100.0 |
TinyLlama_v1.1_math_code
语料库 |
基础预训练 |
特定领域的持续预训练 |
冷却阶段 |
Slimpajama |
100.0 |
75.0 |
75.0 |
starcoder |
- |
15.0 |
15.0 |
proof_pile |
- |
10.0 |
10.0 |
TinyLlama_v1.1_chinese
语料库 |
基础预训练 |
特定领域的持续预训练 |
冷却阶段 |
Slimpajama |
100.0 |
50.0 |
50.0 |
skypile |
- |
50.0 |
50.0 |
评估
模型 |
预训练标记数 |
HellaSwag |
Obqa |
WinoGrande |
ARC_c |
ARC_e |
boolq |
piqa |
平均 |
Pythia - 1.0B |
300B |
47.16 |
31.40 |
53.43 |
27.05 |
48.99 |
60.83 |
69.21 |
48.30 |
TinyLlama - 1.1B - intermediate - step - 1431k - 3T |
3T |
59.20 |
36.00 |
59.12 |
30.12 |
55.25 |
57.83 |
73.29 |
52.99 |
TinyLlama - 1.1B - v1.1 |
2T |
61.47 |
36.80 |
59.43 |
32.68 |
55.47 |
55.99 |
73.56 |
53.63 |
TinyLlama - 1.1B - v1_math_code |
2T |
60.80 |
36.40 |
60.22 |
33.87 |
55.20 |
57.09 |
72.69 |
53.75 |
TinyLlama - 1.1B - v1.1_chinese |
2T |
58.23 |
35.20 |
59.27 |
31.40 |
55.35 |
61.41 |
73.01 |
53.41 |
🔧 技术细节
- 架构:采用与Llama 2相同的架构和分词器。
- 训练数据:使用
cerebras/SlimPajama - 627B
等语料库,不同阶段使用不同的语料组合。
- 训练策略:分基础预训练、特定领域的持续预训练和冷却阶段,在不同阶段调整采样比例和批量大小。
📄 许可证
本项目采用Apache - 2.0
许可证。