HuggingFace镜像/mpt-7b
模型介绍文件和版本分析

MPT-7B

MPT-7B 是一种解码器风格的变换器,从头开始预训练于 1 万亿个英文文本和代码标记。 该模型由 MosaicML 训练。

MPT-7B 是 MosaicPretrainedTransformer (MPT) 模型家族的一部分,这些模型采用了一种经过修改的变换器架构,旨在优化训练和推理效率。

这些架构变化包括性能优化的层实现,并通过用线性偏置注意力 (ALiBi) 替换位置嵌入来消除上下文长度限制。 得益于这些修改,MPT 模型可以在高吞吐量效率和稳定收敛的情况下进行训练。MPT 模型还可以通过标准 HuggingFace 管道和 NVIDIA 的 FasterTransformer 高效提供服务。

该模型使用了 MosaicML 的 LLM 代码库,可以在 llm-foundry 仓库 中找到。它由 MosaicML 的 NLP 团队在 MosaicML 平台 上进行 LLM 预训练、微调和推理训练。

该模型有何不同?

MPT-7B 是

  • 可用于商业用途的许可(不同于 LLaMA)。
  • 在大规模数据上训练(与 LLaMA 一样为 1 万亿个标记,而 Pythia 为 3000 亿个,OpenLLaMA 为 3000 亿个,StableLM 为 8000 亿个)。
  • 能够处理极长的输入 得益于 ALiBi(我们微调了 MPT-7B-StoryWriter-65k+ 以处理最多 65k 的输入,并能处理最多 84k,而其他开源模型为 2k-4k)。
  • 能够快速训练和推理(通过 FlashAttention 和 FasterTransformer)
  • 配备了高效的开源训练代码 通过 llm-foundry 仓库

基于 MPT-7B 微调的模型:

以下模型是基于 MPT-7B 微调的:

  • MPT-7B-StoryWriter-65k+:一种专为阅读和写作超长上下文长度的虚构故事而设计的模型。 通过在 books3 数据集 的筛选虚构子集上微调 MPT-7B 并设置 65k 的上下文长度构建。 在推理时,得益于 ALiBi,MPT-7B-StoryWriter-65k+ 可以外推至超过 65k 个标记。 我们在 博客文章 中展示了在单个 A100-80GB GPU 上生成长达 80k 个标记的示例。

    • 许可证:Apache 2.0
  • MPT-7B-Instruct:一种用于短格式指令跟随的模型。 通过在我们也发布的 数据集 上微调 MPT-7B 构建,该数据集源自 Databricks Dolly-15k 和 Anthropic Helpful and Harmless (HH-RLHF) 数据集。

    • 许可证:Apache 2.0
  • MPT-7B-Chat:一种用于对话生成的聊天机器人模型。 通过在 ShareGPT-Vicuna、HC3、 Alpaca、HH-RLHF 和 Evol-Instruct 数据集上微调 MPT-7B 构建。

    • 许可证:CC-By-NC-SA-4.0

模型日期

2023年5月5日

模型许可证

Apache-2.0

文档

  • 博客文章:介绍 MPT-7B:一种新的开源、商业可用 LLM 标准
  • 代码库(mosaicml/llm-foundry 仓库)
  • 问题:欢迎通过 MosaicML 社区 Slack 联系我们!

如何使用

该模型最好与 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 进行了修改:

  • 使用 FlashAttention
  • 使用 ALiBi(带线性偏差的注意力),不使用位置嵌入
  • 不使用偏差
超参数值
n_parameters6.7B
n_layers32
n_heads32
d_model4096
vocab size50432
sequence length2048

训练数据

流式数据集

数据使用 MosaicML 的 StreamingDataset 库进行格式化,以便在对象存储中托管数据,并在训练期间高效地将其流式传输到计算集群。StreamingDataset 消除了在开始训练前下载整个数据集的需求,并允许从数据集的任何点即时恢复训练。

数据混合

该模型在 1T 个 token(批量大小为 1760,序列长度为 2048)上进行了训练。训练数据混合如下:

数据来源来源中的 token 数量比例有效 token 数量轮次
mC4 3.1.0 - 英语417.99 B0.33330 B0.14
C4 - 英语 - SemDedup 80%100.42 B0.299299 B2.98
RedPajama - CommonCrawl878.45 B0.1100 B0.11
The Stack - 选定语言463.78 B0.1100 B0.22
RedPajama - Wikipedia - 英语4.87 B0.0440 B8.21
The Stack - Markdown107.07 B0.03535 B0.33
S2ORC48.85 B0.03333 B0.68
RedPajama - 书籍26.02 B0.0330B1.15
RedPajama - arXiv28.10 B0.01919 B0.68
RedPajama - StackExchange20.54 B0.01414 B0.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 平台

如果您有兴趣在 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格式。