license: apache-2.0
tags:
- Composer
- MosaicML
- llm-foundry
- StreamingDatasets
datasets:
- mc4
- c4
- togethercomputer/RedPajama-Data-1T
- bigcode/the-stack
- allenai/s2orc
inference: false
MPT-7B
MPT-7B 是一款基于解码器架构的Transformer模型,从头开始在1万亿个英文文本和代码标记上进行预训练。该模型由MosaicML训练完成。
MPT-7B属于MosaicPretrainedTransformer(MPT)模型系列,采用经过优化的改进Transformer架构,以实现高效的训练和推理。
这些架构改进包括性能优化的层实现,以及通过用线性偏置注意力(ALiBi)替换位置嵌入来消除上下文长度限制。得益于这些改进,MPT模型能够实现高吞吐效率和稳定的收敛性。MPT模型还可以通过标准的HuggingFace流水线和NVIDIA的FasterTransformer高效部署。
该模型使用了MosaicML LLM代码库,代码可在llm-foundry仓库中找到。它由MosaicML的NLP团队在MosaicML平台上完成LLM预训练、微调和推理。
该模型有何不同?
MPT-7B具有以下特点:
基于MPT-7B微调的模型:
以下模型基于MPT-7B微调:
模型日期
2023年5月5日
模型许可证
Apache-2.0
文档
使用方法
该模型最适合与MosaicML的llm-foundry仓库配合进行训练和微调。
import transformers
model = transformers.AutoModelForCausalLM.from_pretrained(
'mosaicml/mpt-7b',
trust_remote_code=True
)
注意:此模型需要在from_pretrained
方法中传递trust_remote_code=True
参数。这是因为我们使用了自定义的MPT
模型架构,该架构尚未集成到Hugging Face的transformers
包中。MPT
包含多种训练效率优化选项,例如FlashAttention、ALiBi、QK LayerNorm等。
要使用优化的triton实现的FlashAttention,可以以bfloat16
精度在GPU(cuda:0
)上加载模型,并设置attn_impl='triton'
:
import torch
import transformers
name = 'mosaicml/mpt-7b'
config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.attn_config['attn_impl'] = 'triton'
config.init_device = 'cuda:0'
model = transformers.AutoModelForCausalLM.from_pretrained(
name,
config=config,
torch_dtype=torch.bfloat16,
trust_remote_code=True
)
尽管模型训练时的序列长度为2048,但ALiBi允许用户在微调和/或推理时增加最大序列长度。例如:
import transformers
name = 'mosaicml/mpt-7b'
config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.max_seq_len = 4096
model = transformers.AutoModelForCausalLM.from_pretrained(
name,
config=config,
trust_remote_code=True
)
该模型使用EleutherAI/gpt-neox-20b的分词器。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('EleutherAI/gpt-neox-20b')
随后,该模型可用于文本生成流水线等场景。
注意:在以低精度运行Torch模块时,最佳实践是使用torch.autocast上下文管理器。
from transformers import pipeline
pipe = pipeline('text-generation', model=model, tokenizer=tokenizer, device='cuda:0')
with torch.autocast('cuda', dtype=torch.bfloat16):
print(
pipe('Here is a recipe for vegan banana bread:\n',
max_new_tokens=100,
do_sample=True,
use_cache=True))
模型描述
该架构是对标准仅解码器Transformer的改进。
模型在以下方面对标准Transformer进行了修改:
超参数 |
值 |
参数量 |
67亿 |
层数 |
32 |
注意力头数 |
32 |
模型维度 |
4096 |
词表大小 |
50432 |
序列长度 |
2048 |
训练数据
流式数据集
数据使用MosaicML的StreamingDataset库格式化,将数据存储在对象存储中,并在训练期间高效流式传输到计算集群。StreamingDataset避免了在训练前下载整个数据集的需求,并允许从数据集任意点即时恢复训练。
数据混合
模型训练了1万亿标记(批量大小1760,序列长度2048)。训练数据混合如下:
数据源 |
源标记数量 |
比例 |
有效标记数量 |
训练轮数 |
mC4 3.1.0 - 英文 |
4179.9亿 |
0.33 |
3300亿 |
0.14 |
C4 - 英文 - SemDedup 80% |
1004.2亿 |
0.299 |
2990亿 |
2.98 |
RedPajama - CommonCrawl |
8784.5亿 |
0.1 |
1000亿 |
0.11 |
The Stack - 选定语言 |
4637.8亿 |
0.1 |
1000亿 |
0.22 |
RedPajama - 维基百科 - 英文 |
48.7亿 |
0.04 |
400亿 |
8.21 |
The Stack - Markdown |
1070.7亿 |
0.035 |
350亿 |
0.33 |
S2ORC |
488.5亿 |
0.033 |
330亿 |
0.68 |
RedPajama - 书籍 |
260.2亿 |
0.03 |
300亿 |
1.15 |
RedPajama - arXiv |
281.0亿 |
0.019 |
190亿 |
0.68 |
RedPajama - StackExchange |
205.4亿 |
0.014 |
140亿 |
0.68 |
每批样本按上述比例从各数据集中选取。样本在各数据集内打乱,每个样本由该数据集中填充2048序列长度所需的多个序列构成。
数据使用EleutherAI/gpt-neox-20b分词器进行分词。该BPE分词器具有多项优势,尤其适用于代码分词:
(1) 训练数据多样,包含代码(The Pile)
(2) 应用一致的空格分隔,不同于GPT2分词器会根据前缀空格不一致地分词
(3) 包含重复空格字符的标记,可高效压缩含大量重复空格的文本。
模型词表大小设为50432,是128的倍数(如MEGATRON-LM),模型浮点运算利用率(MFU)最高提升4个百分点。
训练配置
该模型在440块A100-40GB GPU上训练约9.5天,使用MosaicML平台。模型通过FSDP分片数据并行训练,并采用LION优化器。
局限性与偏差
以下内容改编自EleutherAI的GPT-NeoX-20B
MPT-7B(基础版)不适合未经微调直接部署。不应在未经进一步防护措施和用户同意的情况下用于人机交互。
MPT-7B可能生成事实错误的输出,不应依赖其提供事实准确的信息。MPT-7B基于多种公开数据集训练。尽管已尽力清理预训练数据,该模型仍可能生成低俗、偏见或其他冒犯性内容。
MosaicML平台
如果您有兴趣在MosaicML平台上训练和部署自己的MPT或LLM,请在此注册。
免责声明
本模型的许可证不构成法律建议。我们对第三方使用该模型的行为不承担责任。在将本模型用于商业用途前,请咨询律师。
引用
请按以下格式引用本模型:
@online{MosaicML2023Introducing,
author = {MosaicML NLP Team},
title = {Introducing MPT-7B: A New Standard for Open-Source,
Commercially Usable LLMs},
year = {2023},
url = {www.mosaicml.com/blog/mpt-7b},
note = {Accessed: 2023-05-05},
urldate = {2023-05-05}
}