🚀 MPT-7B-StoryWriter-65k+
MPT-7B-StoryWriter-65k+ 是一款专为读写超长上下文长度的虚构故事而设计的模型。它通过在 books3 数据集 的过滤小说子集上对上下文长度为 65k 个标记的 MPT-7B 进行微调而构建。在推理时,借助 ALiBi,MPT-7B-StoryWriter-65k+ 甚至可以外推到 65k 标记以上。我们在 博客文章 中展示了在 8 个 A100-80GB GPU 的单节点上生成长达 84k 标记的内容。
该模型由 MosaicML 训练,采用了经过修改的仅解码器变压器架构。
🚀 快速开始
本模型需要在 from_pretrained
方法中传入 trust_remote_code=True
。这是因为我们使用了一种尚未包含在 transformers
包中的自定义模型架构。
它包含了许多训练效率特性的选项,例如 FlashAttention (Dao 等人,2022)、ALiBi、QK LayerNorm 等等。
import transformers
model = transformers.AutoModelForCausalLM.from_pretrained(
'mosaicml/mpt-7b-storywriter',
trust_remote_code=True
)
若要使用 FlashAttention 的优化 triton 实现,可以在 GPU (cuda:0
) 上以 bfloat16
精度加载模型:
import torch
import transformers
name = 'mosaicml/mpt-7b-storywriter'
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 的情况下进行训练,并在序列长度为 65536 的情况下进行微调,但 ALiBi 允许用户在微调或推理期间增加最大序列长度。例如:
import transformers
name = 'mosaicml/mpt-7b'
config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.max_seq_len = 83968
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))
✨ 主要特性
- 专为读写超长上下文长度的虚构故事而设计。
- 借助 ALiBi 技术,推理时可外推到 65k 标记以上。
- 采用经过修改的仅解码器变压器架构。
- 包含多种训练效率特性,如 FlashAttention、ALiBi、QK LayerNorm 等。
📚 详细文档
🔧 技术细节
模型架构
该模型的架构是对标准仅解码器变压器的修改。具体修改如下:
超参数
属性 |
详情 |
模型类型 |
经过修改的仅解码器变压器 |
训练数据 |
books3 数据集 的过滤小说子集 |
参数量 |
67 亿 |
层数 |
32 |
头数 |
32 |
模型维度 |
4096 |
词表大小 |
50432 |
序列长度 |
65536 |
训练配置
该模型在 8 个 A100-80GB GPU 上使用 MosaicML 平台 训练了约 2 天。训练采用了分片数据并行性,使用 FSDP 并使用 LION 优化器。
📄 许可证
本模型采用 Apache 2.0 许可证。
社区创建的资源
以下资源并非由 MosaicML 创建,但您可能会发现它们很有用。这些链接并不代表对创建者或其内容的认可。
示例尾声
将《了不起的盖茨比》的全文(67873 个标记)输入模型,随后输入文本“EPILOGUE”。
TheRealFitzgerald233:
...
于是我们奋力向前划,逆流而上的小舟,不停地被浪潮推回,推向过去
尾声
MPT-7B-StoryWriter:
我在这个梦想的阴影下生活了太久,也许永远都看不到现实的灿烂阳光了。也许某天早晨我一抬头,就会发现自己已经入土六英尺,而给了我梦想和一切的盖茨比,也会在我身后消失不见。
事情就是这样。我刚跨进旧世界的门槛,目光就落在了一份报纸的头条上,我立刻就知道我的梦想破灭了。我知道盖茨比死了。
那天我就知道我不爱她了。
那天晚上我乘最后一班火车去了西卵村,到家后我径直上了阁楼,把盖茨比的信都拿了下来。
我按日期把它们整理好,按写信的顺序摆放好。信的数量很少。
这些信的日期从 1918 年 4 月到 1919 年 1 月,我这里的最后一封信告诉我他死了。
最后一封信里有某种让我害怕的东西。那是一种终结感,一种圆满感。从那以后我再也没有他的消息,我很高兴。
但几个月前我在某处读到他在纽约出现过。他成了一个了不起的人。
我知道他一点都没变。
⚠️ 局限性和偏差
以下内容改编自 EleutherAI 的 GPT-NeoX-20B
MPT-7B-StoryWriter 可能会产生事实错误的输出,因此不应依赖它来提供事实准确的信息。
MPT-7B-StoryWriter 在各种公共数据集上进行了训练。
尽管在清理预训练数据方面已经付出了巨大努力,但该模型仍有可能生成淫秽、有偏见或其他冒犯性的输出。
🙏 致谢
该模型由 Alex Trott 和 MosaicML NLP 团队进行微调。
MosaicML 平台
如果您有兴趣在 MosaicML 平台上 训练 和 部署 自己的 MPT 或大语言模型,请 在此注册。
📢 免责声明
本模型的许可证不构成法律建议。我们不对使用此模型的第三方的行为负责。在将此模型用于商业目的之前,请咨询律师。
📝 引用
请使用以下格式引用此模型:
@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-03-28}, % 更改此日期
urldate = {2023-03-28} % 更改此日期
}