🚀 MPT-30B-Chat
MPT-30B-Chat 是一个类似聊天机器人的对话生成模型。它通过在 ShareGPT-Vicuna、Camel-AI、GPTeacher、Guanaco、Baize 以及一些生成数据集上对 MPT-30B 进行微调而构建。该模型遵循 CC-By-NC-SA-4.0 许可协议(仅用于非商业用途)。
🚀 快速开始
此模型最适合与 MosaicML 的 llm-foundry 仓库 配合使用,用于训练和微调。
import transformers
model = transformers.AutoModelForCausalLM.from_pretrained(
'mosaicml/mpt-30b-chat',
trust_remote_code=True
)
注意:此模型需要在 from_pretrained
方法中传入 trust_remote_code=True
。这是因为我们使用了自定义的 MPT
模型架构,该架构尚未包含在 Hugging Face 的 transformers
包中。MPT
包含许多训练效率特性的选项,如 FlashAttention、ALiBi、QK LayerNorm 等。
若要使用 triton 实现 的优化版 FlashAttention,可以在 GPU (cuda:0
) 上以 bfloat16
精度加载模型:
import torch
import transformers
name = 'mosaicml/mpt-30b-chat'
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 的序列长度进行训练,并进行了额外的预训练阶段以适应长达 8192 的序列长度。不过,ALiBi 允许用户在微调或推理期间进一步增加最大序列长度。例如:
import transformers
name = 'mosaicml/mpt-30b-chat'
config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.max_seq_len = 16384
model = transformers.AutoModelForCausalLM.from_pretrained(
name,
config=config,
trust_remote_code=True
)
此模型使用基于 EleutherAI/gpt-neox-20b 分词器的 MPT-30B 分词器,并包含额外的填充和结束标记。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('mosaicml/mpt-30b')
然后可以在文本生成管道中使用该模型。注意:在以较低精度运行 Torch 模块时,最好使用 torch.autocast 上下文管理器。
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))
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))
✨ 主要特性
- 对话生成能力:能够生成自然流畅的对话内容。
- 多数据集微调:在多个公开数据集上进行微调,提升模型的泛化能力。
- 训练效率特性:采用了如 FlashAttention、ALiBi 等训练效率特性。
📚 详细文档
示例对话
ksreenivasan:
我希望你根据这篇文章的摘要创作一条推文:
我们很高兴通过 MPT-30B 扩展 MosaicML 基础模型系列,这是一个新的商业许可开源模型,功能更强大,性能优于原始的 GPT-3。此外,我们还发布了两个基于 MPT-30B 构建的微调模型,MPT-30B-Instruct 和 MPT-30B-Chat,分别在短格式指令遵循和多轮对话方面表现出色。所有 MPT-30B 模型都具有使其与其他大语言模型区分开来的特殊功能,包括 8k 标记上下文窗口(可通过微调进一步扩展;参见 MPT-7B-StoryWriter)、通过 ALiBi 支持上下文长度外推,以及通过 FlashAttention 实现高效推理和训练性能。由于其预训练数据混合,它还具有强大的编码能力。
MPT-30B-Chat:
"借助 MosaicML 的最新产品 MPT-30B 革新你的人工智能能力!该模型性能优于 GPT-3,功能更强大,并且配有微调模型,可实现出色的指令遵循和多轮对话。释放 8k 标记上下文窗口、ALiBi 支持和 FlashAttention 的潜力。与 MosaicML 一同体验人工智能的未来!#AI #ML #创新"
ksreenivasan:
对于这个令人兴奋的消息,你想对 MosaicML 说些什么吗?
MPT-30B-Chat:
作为你的人工智能营销助手,我想说这对人工智能社区来说真是个令人兴奋的消息!MosaicML 的最新产品 MPT-30B 凭借其强大的开源能力和用于指令遵循及多轮对话的微调模型,有望革新该行业。包括 8k 标记上下文窗口、ALiBi 支持和 FlashAttention 在内的特殊功能,肯定会使 MosaicML 的 MPT-30B 与其他大语言模型区分开来。祝贺 MosaicML 团队取得这一了不起的成就!
🔧 技术细节
模型架构
该架构是标准的仅解码器变压器的修改版本。该模型在以下方面对标准变压器进行了修改:
超参数 |
值 |
参数数量 |
299.5 亿 |
层数 |
48 |
头数 |
64 |
模型维度 |
7168 |
词汇表大小 |
50432 |
序列长度 |
8192 |
数据混合
该模型在以下数据混合上进行训练:
数据源 |
源中的标记数量 |
比例 |
Airoboros/GPT4-1.2 |
2640 万 |
1.71% |
Baize |
5500 万 |
3.57% |
Camel |
3.01 亿 |
19.54% |
GPTeacher |
756 万 |
0.49% |
Guanaco |
1560 万 |
1.02% |
LongCoversations |
1840 万 |
1.19% |
ShareGPT |
8.21 亿 |
53.24% |
WizardLM |
2.97 亿 |
19.23% |
“LongConversations” 是一个由 GPT3.5/4 生成的数据集,具体细节将在稍后公布。
训练配置
该模型在 64 个 H100 GPU 上使用 MosaicML 平台 训练了约 7.6 小时。该模型使用 FSDP 进行分片数据并行训练,并使用 AdamW 优化器。
📄 许可证
本模型采用 CC-By-NC-SA-4.0 许可协议(仅用于非商业用途)。
⚠️ 局限性和偏差
以下内容改编自 EleutherAI 的 GPT-NeoX-20B
MPT-30B-Chat 可能会产生事实错误的输出,因此不应依赖它来提供事实准确的信息。MPT-30B-Chat 在各种公开数据集上进行训练。尽管在清理预训练数据方面已付出巨大努力,但该模型仍有可能生成低俗、有偏见或其他冒犯性的输出。
🙏 致谢
该模型由 Sam Havens 和 MosaicML NLP 团队进行微调。
⚠️ 免责声明
本模型的许可证不构成法律建议。我们不对使用此模型的第三方的行为负责。在将此模型用于商业目的之前,请咨询律师。
🎉 MosaicML 平台
如果您有兴趣在 MosaicML 平台上 训练 和 部署 自己的 MPT 或大语言模型,请 在此注册。
📖 引用
请使用以下格式引用此模型:
@online{MosaicML2023Introducing,
author = {MosaicML NLP Team},
title = {Introducing MPT-30B: Raising the bar
for open-source foundation models},
year = {2023},
url = {www.mosaicml.com/blog/mpt-30b},
note = {Accessed: 2023-06-22},
urldate = {2023-06-22}
}