🚀 MPT-7B-Instruct-8k
MPT-7B-Instruct-8k 是一款用于长格式指令遵循的模型,尤其擅长对较长文档进行问答和总结。它通过在 Dolly HHRLHF 上微调 MPT-7B-8k 构建而成,其中 Dolly HHRLHF 源自 Databricks Dolly-15k 和 Anthropic Helpful and Harmless (HH-RLHF) 数据集。此外,该模型还在 Competition Math、Duorc、CoT GSM8k、Qasper、Quality、Summ Screen FD 和 Spider 上进行了训练。这与 MPT-30B-Instruct 的训练数据集相同。
该模型由 MosaicML 训练,采用了经过修改的仅解码器变压器架构。
🚀 快速开始
模型信息
属性 |
详情 |
模型类型 |
MPT-7B-Instruct-8k 是用于长格式指令遵循的模型,尤其适用于较长文档的问答和总结。 |
训练数据 |
该模型在多个数据集上进行训练,包括 Competition Math、Databricks Dolly-15k、Anthropic HH-RLHF、Duorc、CoT GSM8k、Qasper、Quality、Summ Screen FD 和 Spider 等。 |
使用示例
基础用法
import transformers
model = transformers.AutoModelForCausalLM.from_pretrained(
'mosaicml/mpt-7b-instruct-8k',
trust_remote_code=True
)
注意:此模型要求在调用 from_pretrained
方法时传入 trust_remote_code=True
。这是因为我们使用了自定义的 MPT
模型架构,该架构尚未包含在 Hugging Face 的 transformers
包中。MPT
包含许多训练效率特性选项,如 FlashAttention、ALiBi、QK LayerNorm 等。
高级用法
若要使用 triton 实现 的优化版 FlashAttention,可以在 GPU (cuda:0
) 上以 attn_impl='triton'
和 bfloat16
精度加载模型:
import torch
import transformers
name = 'mosaicml/mpt-7b-instruct-8k'
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-7b-instruct-8k'
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-7B-chat 分词器,并包含额外的 ChatML 令牌。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('mosaicml/mpt-7b-8k')
然后可以在文本生成管道中使用该模型。
注意:在以较低精度运行 Torch 模块时,最佳做法是使用 torch.autocast 上下文管理器。
from transformers import pipeline
with torch.autocast('cuda', dtype=torch.bfloat16):
inputs = tokenizer('以下是一份纯素香蕉面包的食谱:\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('以下是一份纯素香蕉面包的食谱:\n',
max_new_tokens=100,
do_sample=True,
use_cache=True))
📚 详细文档
🔧 技术细节
模型架构
该架构是对标准仅解码器变压器的修改。
模型在以下方面对标准变压器进行了修改:
超参数 |
值 |
参数数量 |
67 亿 |
层数 |
32 |
头数 |
32 |
模型维度 |
4096 |
词汇表大小 |
50432 |
序列长度 |
2048 |
数据混合
该模型在以下数据混合上进行训练:
数据源 |
源中的令牌数量 |
比例 |
competition_math |
160 万 |
3.66% |
cot_gsm8k |
336 万 |
7.67% |
dialogsum |
10 万 |
0.23% |
dolly_hhrlhf |
589 万 |
13.43% |
duorc |
780 万 |
17.80% |
qasper |
872 万 |
19.90% |
quality |
1129 万 |
25.78% |
scrolls/summ_screen_fd |
497 万 |
11.33% |
spider |
8.9 万 |
0.20% |
训练配置
该模型使用 MosaicML 平台 在 8 块 80GB 的 A100 GPU 上训练了约 6.3 小时。
模型使用 FSDP 进行分片数据并行训练,并使用 AdamW 优化器。
🚫 局限性和偏差
以下内容改编自 EleutherAI 的 GPT-NeoX-20B
MPT-7B-Instruct-8k 可能会产生事实错误的输出,因此不应依赖它来提供事实准确的信息。
MPT-7B-Instruct-8k 在各种公共数据集上进行了训练。
尽管在清理预训练数据方面付出了巨大努力,但该模型仍有可能生成低俗、有偏见或其他冒犯性的输出。
🙏 致谢
该模型由 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}
}
📄 许可证
Apache 2.0