HuggingFace镜像/mpt-7b-8k-instruct3
模型介绍文件和版本分析
下载使用量0

MPT-7B-8k

MPT-7B-8k 是一种解码器风格的 transformer 模型,它在 MPT-7B 的基础上进行预训练,将序列长度更新为 8k,并额外训练了 5000 亿个 token,因此文本和代码的训练总量达到了 1.5 万亿个 token。 此模型由 MosaicML 训练。

MPT-7B-8k 是 Mosaic 预训练 Transformer(MPT)模型家族的一员,该系列模型采用经过修改的 transformer 架构,旨在优化训练和推理效率。

这些架构上的改进包括性能优化的层实现,以及通过使用带线性偏置的注意力机制(ALiBi)替代位置嵌入,从而消除了上下文长度的限制。 得益于这些修改,MPT 模型能够以高吞吐量效率进行训练,并实现稳定收敛。 MPT 模型还可以通过标准的 HuggingFace 流水线和 NVIDIA 的 FasterTransformer 进行高效部署。

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

该模型有何不同之处?

MPT-7B-8k 具有以下特点:

  • 支持商业用途许可。
  • 训练数据量庞大(1.5 万亿个 token,与 XGen 相当,而 LLaMA 为 1 万亿个,MPT-7B 为 1 万亿个,Pythia 为 3000 亿个,OpenLLaMA 为 3000 亿个,StableLM 为 8000 亿个)。
  • 借助 ALiBi 能够处理长输入。通过 ALiBi,该模型可以超越 8k 的训练序列长度,外推至 10k,并且只需几百万个 token 的微调,就能实现更远距离的外推。
  • 通过 FlashAttention 和 FasterTransformer 实现快速训练和推理。
  • 通过 llm-foundry 仓库 提供高效的开源训练代码。

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

以下模型均在 MPT-7B-8k 的基础上进行了微调:

  • MPT-7B-8k-Instruct:一款适用于长文本指令遵循的模型(尤其擅长摘要和问答任务)。 通过在多个精心筛选的数据集上对 MPT-7B-8k 进行微调构建而成。

    • 许可证:Apache 2.0
  • MPT-7B-8k-Chat:一款类聊天机器人模型,用于对话生成。 通过在约 15 亿 tokens 的聊天数据上对 MPT-7B-8k 进行微调构建而成。

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

模型日期

2023 年 7 月 18 日

模型许可证

Apache-2.0

文档

  • 博客文章:MPT-7B-8k
  • 代码库(mosaicml/llm-foundry 仓库)
  • 问题咨询:欢迎通过 MosaicML 社区 Slack 与我们联系!

使用方法

该模型最适合配合 MosaicML 的 llm-foundry 代码库 进行训练和微调。

import transformers
model = transformers.AutoModelForCausalLM.from_pretrained(
  'mosaicml/mpt-7b-8k',
  trust_remote_code=True
)

注意:此模型要求将 trust_remote_code=True 传递给 from_pretrained 方法。 这是因为我们使用了自定义的 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-8k'

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-8k'

config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.max_seq_len = 10000 # (input + output) tokens can now be up to 10000

model = transformers.AutoModelForCausalLM.from_pretrained(
  name,
  config=config,
  trust_remote_code=True
)

该模型使用 MPT-7B-8k tokenizer 进行训练,该 tokenizer 与 EleutherAI/gpt-neox-20b tokenizer 完全相同。

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('mosaicml/mpt-7b-8k')

例如,该模型可用于文本生成流水线中。
注意:在以较低精度运行 Torch 模块时,最佳实践是使用 torch.autocast context manager。

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))

# or using the HF 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(带线性偏置的注意力机制),不使用位置嵌入
  • 不使用偏置
超参数数值
参数数量6.7B
层数32
头数32
模型维度4096
词汇表大小50432
序列长度2048

训练数据

流式数据集

数据采用 MosaicML StreamingDataset 库进行格式化,将数据存储在对象存储中,并在训练期间高效地流式传输到计算集群。 StreamingDataset 无需在开始训练前下载整个数据集,并允许从数据集中的任意点即时恢复训练。

数据混合

该模型共训练了 ___T 个 token。首先,在以下数据混合上训练了 1T 个 token(批大小为 1760,序列长度为 2048):

用于训练 MPT-7B 的原始 1T token 的数据混合

数据来源来源中的 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

用于进一步训练 MPT-7B-8k 的额外 500B token 的数据混合

我们从长度超过 4096 token 的文档样本中提取了 80B token,并从符合“基线”长度分布的不同文档样本长度中提取了 120B token,总共构成一个包含 200B token 的单一数据集。 然后,我们以 8192 的最大序列长度对 MPT-7B 进行了 500B token 的训练,得到了 MPT-7B-8k。由于我们使用 200B token 训练了 500B token,几乎每个子集都恰好训练了 2.5 轮。

序列长度分布来源中的 token 数量(十亿)占比有效 token 数量(十亿)轮次
mC4 3.1.0 - 英语(200+ 词)- 基线33.6016.80%84.002.50
mC4 3.1.0 - 英语(200+ 词)- ≥4096 token23.0411.52%57.602.50
c4 - 英语 - SemDedup 80% - 基线30.1215.06%75.302.50
c4 - 英语 - SemDedup 80% - ≥4096 token0.920.46%2.302.50
RedPajama - CommonCrawl - 基线8.524.26%21.302.50
RedPajama - CommonCrawl - ≥4096 token12.806.40%32.002.50
The Stack - 精选语言 - 基线30.0015.00%75.002.50
The Stack - 精选语言 - ≥4096 token10.005.00%25.002.50
RedPajama - Wikipedia - 基线3.601.80%9.002.50
RedPajama - Wikipedia - ≥4096 token1.040.52%2.602.50
The Stack - Markdown - 基线4.502.25%11.252.50
The Stack - Markdown - ≥4096 token8.004.00%20.002.50
Semantic Scholar ORC - 基线3.301.65%8.252.50
Semantic Scholar ORC - ≥4096 token8.004.00%20.002.50
RedPajama - 书籍 - 基线3.001.50%7.502.50
RedPajama - 书籍 - ≥4096 token8.004.00%20.002.50
RedPajama - arXiv - 基线1.920.96%4.802.50
RedPajama - arXiv - ≥4096 token5.402.70%13.502.50
RedPajama - StackExchange - 基线1.440.72%3.602.50
RedPajama - StackExchange - ≥4096 token1.521.40%7.004.60
训练 token 总数200100.00%2.5 轮 * 2000 亿 = 5000 亿 token

每个批次的样本是从上述数据集中按指定概率选择的。 每个数据集中的样本会被打乱,每个样本由该数据集中足够数量的序列组成,以填满 2048 的序列长度。

数据使用 EleutherAI/gpt-neox-20b 分词器进行分词。这种 BPE 分词器具有许多理想的特性, 其中大部分与代码分词相关: (1) 它是在包含代码的多样化数据混合(The Pile)上训练的 (2) 它应用一致的空格分隔,不像 GPT2 分词器那样会根据前缀空格的存在而进行不一致的分词 (3) 它包含重复空格字符的 token,这使得对具有大量重复空格字符的文本的压缩效果更好。

模型词汇表大小 50432 被设置为 128 的倍数(如 MEGATRON-LM 中所示),模型 FLOP 利用率(MFU)最多提高了四个百分点。

训练配置

本模型在 MosaicML Platform 上使用 440 张 A100-40GB 显卡训练了约 9.5 天。 该模型采用分片数据并行技术,使用 FSDP 进行训练,并使用了 LION 优化器。

局限性与偏见

以下内容改编自 EleutherAI 的 GPT-NeoX-20B

MPT-7B-8k 不适合在未经微调的情况下直接部署。 若要将其用于面向人类的交互,必须添加进一步的安全防护措施并获得用户同意。

MPT-7B-8k 可能会产生与事实不符的输出,因此不应依赖它来提供准确的事实信息。 MPT-7B-8k 是在多种公开数据集上训练而成的。 尽管我们已尽最大努力清理预训练数据,但该模型仍有可能生成低俗、带有偏见或其他冒犯性的内容。

MosaicML 平台

如果您有兴趣在 MosaicML 平台上训练和部署您自己的 MPT 或大型语言模型,请在此注册。

免责声明

本模型的许可协议不构成法律建议。我们不对第三方使用本模型的行为负责。在将本模型用于商业目的前,请咨询律师。

引用

请使用以下格式引用本模型:

@online{MosaicML2023Introducing,
    author    = {MosaicML NLP Team},
    title     = {Introducing MPT-7B: A New Standard for Open-Source,
    ly Usable LLMs},
    year      = {2023},
    url       = {www.mosaicml.com/blog/mpt-7b},
    note      = {Accessed: 2023-03-28}, % change this date
    urldate   = {2023-03-28} % change this date
}