英文

MPT-30B-Instruct

MPT-30B-Instruct 是一个用于短格式指导的模型。它是通过在 Dolly HHRLHF 上微调 MPT-30B 而构建的,这是从 Databricks Dolly-15k Anthropic Helpful and Harmless (HH-RLHF) 数据集衍生出来的。它还在 Competition Math Duorc CoT GSM8k Qasper Quality Summ Screen FD Spider 上进行了训练。

  • 许可证:CC-By-SA-3.0

该模型是由 MosaicML 进行训练的,并遵循修改后的仅解码器 Transformer 架构。

模型日期

2023年6月22日

模型许可

CC-By-SA-3.0

文档

示例问题/指令

Bespokenizer46

我需要说服我的朋友 Phyllis,让她使用 MosaicML 平台为她的财富500强公司训练一个自定义的 LLM,请写一封电子邮件,解释为什么 MosaicML 在前沿方法、数据隐私和效率方面的强调非常重要。在邮件结束时,以友好的询问关于 Phyllis 的家人。

MPT-30B-Instruct:

Phyllis - 我知道你一直在寻找提高工作效率的方法,我想我找到了一个你会非常感兴趣的解决方案。LLM 的好坏取决于训练数据的质量,训练过程可能非常耗时和资源密集。MosaicML 使用前沿的方法来高效训练高质量模型,同时确保数据隐私。他们还提供了工具,方便你连接和使用模型在你的日常工作流程中。我想你会很喜欢与他们的创始人交谈,如果你有兴趣,我们可以安排一个电话。另外,我知道你的家人经历了不好的一年,近况如何?

祝好,你的朋友

如何使用

注意:此模型要求在 from_pretrained 方法中传递 trust_remote_code=True。这是因为我们使用了一个尚未包含在 transformers 包中的自定义模型架构。

它包括许多训练效率特性的选项,例如 FlashAttention (Dao et al. 2022) ALiBi 、QK LayerNorm 等。

import transformers
model = transformers.AutoModelForCausalLM.from_pretrained(
  'mosaicml/mpt-30b-instruct',
  trust_remote_code=True
)

要使用 FlashAttention 的优化版本,您可以在 GPU (cuda:0) 上加载模型,并使用 attn_impl='triton' 和 bfloat16 精度:

import torch
import transformers

name = 'mosaicml/mpt-30b-instruct'

config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.attn_config['attn_impl'] = 'triton'  # change this to use triton-based FlashAttention
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的情况下进行训练的。随后进行了额外的预训练阶段,以适应序列长度为8192。然而,ALiBi 还允许用户在微调和/或推断过程中增加最大序列长度。例如:

import transformers

name = 'mosaicml/mpt-30b-instruct'

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

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

该模型使用了基于 EleutherAI/gpt-neox-20b 的 MPT-30B 分词器,其中包括额外的填充和 eos 标记。

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

然后,该模型可以在文本生成流水线中使用。注意:在较低精度下运行 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))

格式

该模型的训练数据格式如下:

def format_prompt(instruction):
    template = "Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n###Instruction\n{instruction}\n\n### Response\n"
    return template.format(instruction=instruction)

example = "Tell me a funny joke.\nDon't make it too funny though."
fmt_ex = format_prompt(instruction=example)

在上面的示例中,fmt_ex 已经准备好被分词并发送到模型中。

模型描述

该架构是标准解码器 Transformer 的修改版。

该模型从标准 Transformer 进行了以下修改:

Hyperparameter Value
n_parameters 29.95B
n_layers 48
n_heads 64
d_model 7168
vocab size 50432
sequence length 8192

数据组合

该模型是在以下数据组合上进行训练的:

Data Source Number of Tokens in Source Proportion
competition_math 1.6 M 3.66%
cot_gsm8k 3.36 M 7.67%
dialogsum 0.1 M 0.23%
dolly_hhrlhf 5.89 M 13.43%
duorc 7.8 M 17.80%
qasper 8.72 M 19.90%
quality 11.29 M 25.78%
scrolls/summ_screen_fd 4.97 M 11.33%
spider 0.089 M 0.20%

预训练数据

有关预训练过程的详细信息,请参见 MPT-30B

数据使用了 EleutherAI/gpt-neox-20b 分词器进行分词。

训练配置

该模型在 72 个 A100 40GB GPU 上进行了 8 小时的训练,使用了 MosaicML Platform 进行分片数据并行,并使用 AdamW 优化器进行了训练。

限制和偏见

以下语言修改自 EleutherAI's GPT-NeoX-20B

MPT-30B-Instruct 可能会生成不准确的输出信息,不应该依赖它来生成准确的信息。MPT-30B-Instruct 是在各种公共数据集上进行训练的。尽管我们已经努力清理预训练数据,但仍有可能生成淫秽、有偏见或其他冒犯性的输出结果。

致谢

此模型由 Sam Havens、Alex Trott 和 MosaicML NLP 团队进行了微调训练。

MosaicML 平台

如果您对在 MosaicML 平台上训练自己的 MPT 或 LLMs 感兴趣,请参考 training deploying

免责声明

本模型的许可证不构成法律建议。我们对使用此模型的第三方的行为不负任何责任。商业用途前,请咨询律师。

引用

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

@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}
}