模型简介
模型特点
模型能力
使用案例
🚀 MPT-7B
MPT-7B 是一个基于解码器架构的 Transformer 模型,它在 1 万亿个英文文本和代码的 token 上从头开始预训练。该模型由 MosaicML 训练。
MPT-7B 是 MosaicPretrainedTransformer (MPT) 模型家族的一员,该家族模型采用了经过优化的改良 Transformer 架构,可实现高效的训练和推理。
这些架构改进包括性能优化的层实现,以及通过使用带线性偏置的注意力机制(ALiBi)取代位置嵌入来消除上下文长度限制。得益于这些改进,MPT 模型能够实现高吞吐量的高效训练和稳定收敛。同时,MPT 模型还可以通过标准的 HuggingFace 管道和 NVIDIA 的 FasterTransformer 进行高效推理。
此模型使用了 MosaicML 的大语言模型代码库,该代码库可在 llm-foundry 仓库 中找到。它由 MosaicML 的自然语言处理团队在 MosaicML 平台 上进行大语言模型的预训练、微调及推理。
🚀 快速开始
本模型最适合搭配 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
) 上以 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' # 直接在 GPU 上快速初始化!
model = transformers.AutoModelForCausalLM.from_pretrained(
name,
config=config,
torch_dtype=torch.bfloat16, # 以 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 # (输入 + 输出) token 现在可以达到 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))
✨ 主要特性
与其他模型的区别
MPT-7B 具有以下特点:
- 具备商业使用许可:与 LLaMA 不同,MPT-7B 允许商业使用。
- 在大量数据上进行训练:与 Pythia 的 3000 亿 token、OpenLLaMA 的 3000 亿 token 以及 StableLM 的 8000 亿 token 相比,MPT-7B 与 LLaMA 一样在 1 万亿 token 上进行训练。
- 能够处理超长输入:借助 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 token。在推理时,借助 ALiBi,MPT-7B-StoryWriter-65k+ 甚至可以处理超过 65k token 的输入。我们在 博客文章 中展示了在单个 A100-80GB GPU 上生成长达 80k token 的内容。
- 许可证: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
📚 详细文档
- 博客文章:Introducing MPT-7B: A New Standard for Open-Source, Commercially Usable LLMs
- 代码库 (mosaicml/llm-foundry 仓库)
- 如有疑问,请通过 MosaicML 社区 Slack 与我们联系!
🔧 技术细节
模型描述
该模型架构是对标准的仅解码器 Transformer 架构的改进。
该模型在以下方面对标准 Transformer 架构进行了修改:
- 使用 FlashAttention
- 使用 ALiBi (Attention with Linear Biases),不使用位置嵌入
- 不使用偏置
属性 | 详情 |
---|---|
模型参数数量 | 67 亿 |
层数 | 32 |
头数 | 32 |
模型维度 | 4096 |
词表大小 | 50432 |
序列长度 | 2048 |
训练数据
流式数据集
数据使用 MosaicML 的 StreamingDataset 库进行格式化,以便将数据存储在对象存储中,并在训练期间将其高效地流式传输到计算集群。StreamingDataset 无需在训练开始前下载整个数据集,并且允许从数据集中的任意点立即恢复训练。
数据混合
该模型在 1 万亿 token 上进行训练(批量大小为 1760,序列长度为 2048)。它在以下数据混合上进行训练:
数据源 | 数据源中的 token 数量 | 比例 | 有效 token 数量 | 轮数 |
---|---|---|---|---|
mC4 3.1.0 - 英文 | 4179.9 亿 | 0.33 | 3300 亿 | 0.14 |
C4 - 英文 - 语义去重 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.019 | 190 亿 | 0.68 |
RedPajama - StackExchange | 205.4 亿 | 0.014 | 140 亿 | 0.68 |
每个批次的样本从上述数据集中按照指定的概率进行选择。每个数据集中的样本会进行打乱,并且每个样本由来自该数据集的足够多的序列组成,以填充 2048 的序列长度。
数据使用 EleutherAI/gpt-neox-20b 分词器进行分词。这个 BPE 分词器具有许多理想的特性,其中大部分与代码分词相关:
- 它在包含代码的多样化数据集(The Pile)上进行训练。
- 它应用一致的空格分隔,与 GPT2 分词器不同,后者根据前缀空格的存在情况进行不一致的分词。
- 它包含重复空格字符的 token,这允许对包含大量重复空格字符的文本进行更好的压缩。
模型词表大小设置为 50432,是 128 的倍数(如 MEGATRON-LM 中所示),模型浮点运算利用率(MFU)提高了多达四个百分点。
训练配置
该模型在 440 个 A100-40GB GPU 上使用 MosaicML 平台 进行了约 9.5 天的训练。模型使用 FSDP 进行分片数据并行训练,并使用 LION 优化器。
📄 许可证
模型日期
2023 年 5 月 5 日
模型许可证
Apache-2.0
免责声明
本模型的许可证不构成法律建议。我们不对使用此模型的第三方的行为负责。在将此模型用于商业目的之前,请咨询律师。
引用
请使用以下格式引用此模型:
@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}
}
⚠️ 重要提示
MPT-7B(基础模型)不适合在未进行微调的情况下直接部署。在没有进一步的防护措施和用户同意的情况下,不应将其用于面向人类的交互。
MPT-7B 可能会产生事实错误的输出,因此不应依赖它来生成事实准确的信息。MPT-7B 在各种公共数据集上进行训练。尽管在清理预训练数据方面已经付出了巨大努力,但此模型仍有可能生成低俗、有偏见或其他冒犯性的输出。
💡 使用建议



