MPT-7B 是一种解码器风格的变换器,从头开始预训练于 1 万亿个英文文本和代码标记。 该模型由 MosaicML 训练。
MPT-7B 是 MosaicPretrainedTransformer (MPT) 模型家族的一部分,这些模型采用了一种经过修改的变换器架构,旨在优化训练和推理效率。
这些架构变化包括性能优化的层实现,并通过用线性偏置注意力 (ALiBi) 替换位置嵌入来消除上下文长度限制。 得益于这些修改,MPT 模型可以在高吞吐量效率和稳定收敛的情况下进行训练。MPT 模型还可以通过标准 HuggingFace 管道和 NVIDIA 的 FasterTransformer 高效提供服务。
该模型使用了 MosaicML 的 LLM 代码库,可以在 llm-foundry 仓库 中找到。它由 MosaicML 的 NLP 团队在 MosaicML 平台 上进行 LLM 预训练、微调和推理训练。
MPT-7B 是
以下模型是基于 MPT-7B 微调的:
MPT-7B-StoryWriter-65k+:一种专为阅读和写作超长上下文长度的虚构故事而设计的模型。 通过在 books3 数据集 的筛选虚构子集上微调 MPT-7B 并设置 65k 的上下文长度构建。 在推理时,得益于 ALiBi,MPT-7B-StoryWriter-65k+ 可以外推至超过 65k 个标记。 我们在 博客文章 中展示了在单个 A100-80GB GPU 上生成长达 80k 个标记的示例。
MPT-7B-Instruct:一种用于短格式指令跟随的模型。 通过在我们也发布的 数据集 上微调 MPT-7B 构建,该数据集源自 Databricks Dolly-15k 和 Anthropic Helpful and Harmless (HH-RLHF) 数据集。
MPT-7B-Chat:一种用于对话生成的聊天机器人模型。 通过在 ShareGPT-Vicuna、HC3、 Alpaca、HH-RLHF 和 Evol-Instruct 数据集上微调 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 等。
要使用 FlashAttention 的优化 triton 实现,您可以在 GPU (cuda:0) 上加载模型,并设置 attn_impl='triton' 和 bfloat16 精度:
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' # For fast initialization directly on GPU!
model = transformers.AutoModelForCausalLM.from_pretrained(
name,
config=config,
torch_dtype=torch.bfloat16, # Load model weights in 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 # (input + output) tokens can now be up to 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 进行了修改:
| 超参数 | 值 |
|---|---|
| n_parameters | 6.7B |
| n_layers | 32 |
| n_heads | 32 |
| d_model | 4096 |
| vocab size | 50432 |
| sequence length | 2048 |
数据使用 MosaicML 的 StreamingDataset 库进行格式化,以便在对象存储中托管数据,并在训练期间高效地将其流式传输到计算集群。StreamingDataset 消除了在开始训练前下载整个数据集的需求,并允许从数据集的任何点即时恢复训练。
该模型在 1T 个 token(批量大小为 1760,序列长度为 2048)上进行了训练。训练数据混合如下:
| 数据来源 | 来源中的 token 数量 | 比例 | 有效 token 数量 | 轮次 |
|---|---|---|---|---|
| mC4 3.1.0 - 英语 | 417.99 B | 0.33 | 330 B | 0.14 |
| C4 - 英语 - SemDedup 80% | 100.42 B | 0.299 | 299 B | 2.98 |
| RedPajama - CommonCrawl | 878.45 B | 0.1 | 100 B | 0.11 |
| The Stack - 选定语言 | 463.78 B | 0.1 | 100 B | 0.22 |
| RedPajama - Wikipedia - 英语 | 4.87 B | 0.04 | 40 B | 8.21 |
| The Stack - Markdown | 107.07 B | 0.035 | 35 B | 0.33 |
| S2ORC | 48.85 B | 0.033 | 33 B | 0.68 |
| RedPajama - 书籍 | 26.02 B | 0.03 | 30B | 1.15 |
| RedPajama - arXiv | 28.10 B | 0.019 | 19 B | 0.68 |
| RedPajama - StackExchange | 20.54 B | 0.014 | 14 B | 0.68 |
每个批次中的样本根据上述概率从其中一个数据集中选择。每个数据集内的示例进行了洗牌,每个示例由该数据集中足够填充 2048 序列长度的多个序列构成。
数据使用 EleutherAI/gpt-neox-20b 分词器进行分词。该 BPE 分词器具有许多理想的特性,其中大多数与代码分词相关: (1) 它在包含代码(The Pile)的多样化数据混合上进行了训练 (2) 它应用了一致的空格分隔,与 GPT2 分词器不同,后者根据前缀空格的存在与否进行不一致的分词 (3) 它包含重复空格字符的 token,这使得能够更好地压缩包含大量重复空格字符的文本。
模型词汇量 50432 被设置为 128 的倍数(如 MEGATRON-LM 中所示),模型浮点运算利用率(MFU)提高了多达四个百分点。
该模型在 440 个 A100-40GB 上训练了约 9.5 天,使用的是 MosaicML 平台。模型使用 FSDP 进行分片数据并行训练,并使用了 LION 优化器。
以下语言修改自 EleutherAI's GPT-NeoX-20B
MPT-7B(基础版)不旨在未经微调就进行部署。在未进一步设置防护栏和用户同意的情况下,不应将其用于面向人类的交互。
MPT-7B 可能产生事实错误的输出,不应依赖其生成事实准确的信息。MPT-7B 在各种公开数据集上进行了训练。尽管在预训练数据清理方面付出了巨大努力,但该模型仍可能生成粗俗、偏见或其他令人不快的输出。
如果您有兴趣在 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}
}当然,我会遵循您的要求,提供高质量的翻译服务。请提供您希望翻译的英文文本,我将会以通俗、专业、优雅且流畅的中文呈现给您。记得,只需要文本内容,并保持Markdown格式。