🚀 TinyLlama-1.1B-v1.1
TinyLlama-1.1B-v1.1采用了与Llama 2完全相同的架构和分词器,可无缝集成到众多基于Llama的开源项目中。此外,它仅拥有1.1B参数,体积小巧,适用于对计算和内存要求较低的各种应用场景。
🚀 快速开始
你需要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的开源项目中直接使用。
- 模型仅含1.1B参数,体积小巧,适用于对计算和内存要求较低的应用。
📦 安装指南
你需要安装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模型,而是先在包含1.5万亿个标记的语料库上训练TinyLlama,以获得基础语言能力。随后,通过三种不同的数据采样方式进行持续预训练,将该模型转化为三个不同的模型。具体过程可参考下图。

预训练
由于一些问题(bug1,bug2),我们尝试重新训练TinyLlama以提供更好的模型。我们使用2T标记对模型进行训练,并将预训练分为三个不同阶段:
- 基础预训练:在此初始阶段,我们仅使用
slimpajama
语料库训练模型,以培养其常识推理能力。在这个基础预训练阶段,模型使用了1.5T标记进行训练。由于我们使用的集群每个节点配备4个A100 - 40G GPU,且仅在节点内对模型权重进行分片,因此此时只能将批量大小设置为约1.8M。
- 特定领域的持续预训练:在此预训练阶段,我们引入了三种不同的语料库:
slimpajama
(与第一阶段相同)、Math&Code
(starcoder
和proof pile
)和Chinese
(skypile
)。这种方法使我们能够开发出具有特定能力的三种变体模型。在这个阶段的前约6B标记中,我们线性增加特定领域语料库(不包括Slimpajama
,因为它与第一阶段保持不变)的采样比例。这种预热采样增加策略旨在逐步调整预训练数据的分布,确保训练过程更加稳定。在采样增加阶段之后,我们继续使用稳定的采样策略对模型进行预训练,直到达到约1.85T标记。
- 冷却阶段:在预训练结束时,实施冷却阶段已成为实现更好模型收敛的关键技术。然而,由于我们在开始时已经使用了余弦学习率策略,因此像MiniCPM或deepseek那样为冷却阶段更改学习率变得具有挑战性。因此,我们尝试通过调整批量大小来进行冷却。具体而言,在冷却阶段,我们将批量大小从1.8M增加到7.2M,同时保持原有的余弦学习率调度。
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 |
📄 许可证
本项目采用Apache - 2.0许可证。