🚀 MPT-30B
MPT-30B是一个从无到有在1万亿个英文文本和代码标记上预训练的解码器式变换器模型。该模型由 MosaicML 训练。
MPT-30B是Mosaic预训练变换器(MPT)模型家族的一部分,该家族使用经过修改的变换器架构,针对高效训练和推理进行了优化。
🚀 快速开始
MPT-30B模型最好结合MosaicML的 llm-foundry仓库 进行训练和微调。以下是使用该模型的一些示例代码:
基础用法
import transformers
model = transformers.AutoModelForCausalLM.from_pretrained(
'mosaicml/mpt-30b',
trust_remote_code=True
)
⚠️ 重要提示
此模型要求在调用 from_pretrained
方法时传入 trust_remote_code=True
。这是因为我们使用了自定义的 MPT
模型架构,该架构目前还不是Hugging Face transformers
包的一部分。MPT
包含许多训练效率特性选项,如 FlashAttention、ALiBi、QK LayerNorm 等。
高级用法
若要使用FlashAttention的优化 triton实现,可以按以下方式在GPU(cuda:0
)上以 bfloat16
精度加载模型:
import torch
import transformers
name = 'mosaicml/mpt-30b'
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的情况下进行训练,并进行了额外的预训练阶段以适应长达8192的序列长度。不过,ALiBi允许用户在微调或推理期间进一步增加最大序列长度,示例如下:
import transformers
name = 'mosaicml/mpt-30b'
config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.max_seq_len = 16384
model = transformers.AutoModelForCausalLM.from_pretrained(
name,
config=config,
trust_remote_code=True
)
此模型使用的MPT-30B分词器与 EleutherAI/gpt-neox-20b 分词器相同:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('mosaicml/mpt-30b')
然后可以在文本生成管道中使用该模型。注意:在以较低精度运行Torch模块时,最好使用 torch.autocast上下文管理器。
from transformers import pipeline
with torch.autocast('cuda', dtype=torch.bfloat16):
inputs = tokenizer('Here is a recipe for vegan banana bread:\n', return_tensors="pt").to('cuda')
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.batch_decode(outputs, skip_special_tokens=True))
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))
✨ 主要特性
MPT-30B具有一些使其区别于其他大语言模型的特殊特性,包括:
- 8k标记上下文窗口:通过微调还可以进一步扩展(参见 MPT-7B-StoryWriter)。
- 支持上下文长度外推:通过 ALiBi 实现。
- 高效推理和训练:借助FlashAttention实现。
- 强大的编码能力:得益于其预训练数据的混合。
- 易于部署:MPT-30B的规模经过特别选择,便于在单个GPU上部署,既可以是1个16位精度的A100 - 80GB GPU,也可以是1个8位精度的A100 - 40GB GPU。
📦 安装指南
文档未提及具体安装步骤,可参考MosaicML的 llm-foundry仓库 进行安装和配置。
📚 详细文档
🔧 技术细节
模型架构
该架构是对标准仅解码器式变换器的修改。模型在以下方面对标准变换器进行了修改:
属性 |
详情 |
模型参数数量 |
299.5亿 |
层数 |
48 |
头数 |
64 |
模型维度 |
7168 |
词汇表大小 |
50432 |
序列长度 |
8192 |
训练数据
流式数据集
数据使用MosaicML的 StreamingDataset 库进行格式化,以便将数据存储在对象存储中,并在训练期间将其高效地流式传输到计算集群。StreamingDataset无需在训练开始前下载整个数据集,并且允许从数据集中的任何点立即恢复训练。
数据混合
该模型在以下数据混合上进行了1万亿个标记的训练:
数据源 |
数据源中的标记数量 |
比例 |
有效标记数量 |
轮数 |
mC4 3.1.0 - 英文(200个以上单词) |
24179.9亿 |
33.50% |
3350亿 |
0.14 |
c4 - 英文 - 语义去重80% |
1004.2亿 |
29.90% |
2990亿 |
2.98 |
RedPajama - 通用爬虫数据 |
8784.5亿 |
8.50% |
850亿 |
0.097 |
The Stack - 选定语言 |
4637.8亿 |
10.00% |
1000亿 |
0.22 |
RedPajama - 维基百科 |
48.7亿 |
4.00% |
400亿 |
8.21 |
The Stack - Markdown |
1070.7亿 |
4.50% |
450亿 |
0.42 |
语义学者ORC |
489.5亿 |
3.30% |
330亿 |
0.67 |
RedPajama - 书籍 |
260.2亿 |
3.00% |
300亿 |
1.15 |
RedPajama - arXiv |
281.0亿 |
1.90% |
190亿 |
0.68 |
RedPajama - StackExchange |
205.4亿 |
1.40% |
140亿 |
0.68 |
每个批次的样本从上述数据集中以指定的概率进行选择。每个数据集中的示例会进行打乱,并且每个示例由该数据集中足够多的序列构成,以填满序列长度。为了高效地为MPT-30B构建8k支持,我们首先使用长度为2k标记的序列进行了1万亿个标记的预训练,然后使用长度为8k标记的序列进行了额外500亿个标记的训练。
数据使用 EleutherAI/gpt-neox-20b 分词器进行分词。这个BPE分词器具有许多理想的特性,其中大部分与代码分词相关:
- 它在包含代码的多样化数据混合(The Pile)上进行训练。
- 它应用一致的空格分隔,不像GPT2分词器那样根据前缀空格的存在情况进行不一致的分词。
- 它包含重复空格字符的标记,这允许对包含大量重复空格字符的文本进行更好的压缩。
模型词汇表大小设置为50432,是128的倍数(如 MEGATRON-LM 中所述)。
训练配置
该模型在 MosaicML平台 上分三个阶段进行训练:
- 首先在440个A100 - 40GB GPU上以1760的批次大小进行训练。
- 然后在216个A100 - 40GB GPU上以1728的批次大小进行训练。
- 最后在256个H100 - 80GB GPU上以512的批次大小完成训练,上下文长度为8k,训练标记数为500亿。
模型使用 FSDP 进行分片数据并行训练,并使用 LION 优化器。
📄 许可证
本模型采用Apache - 2.0许可证。
基于MPT - 30B微调的模型
模型日期
2023年6月22日
局限性和偏差
MPT - 30B(基础模型)不适合在未进行微调的情况下部署。在没有进一步的防护措施和用户同意的情况下,不应将其用于面向人类的交互。
MPT - 30B可能会产生事实错误的输出,因此不应依赖它来提供事实准确的信息。MPT - 30B在各种公共数据集上进行训练。尽管在清理预训练数据方面付出了巨大努力,但该模型仍有可能生成淫秽、有偏见或其他冒犯性的输出。
MosaicML平台
如果您有兴趣在MosaicML平台上 训练 和 部署 自己的MPT或大语言模型,请 在此注册。
免责声明
本模型的许可证不构成法律建议。我们不对使用此模型的第三方的行为负责。在将此模型用于商业目的之前,请咨询律师。
引用
请使用以下格式引用此模型:
@online{MosaicML2023Introducing,
author = {MosaicML NLP Team},
title = {Introducing MPT-30B: Raising the bar
for open-source foundation models},
year = {2023},
url = {www.mosaicml.com/blog/mpt-30b},
note = {Accessed: 2023-06-22},
urldate = {2023-06-22}
}