英文

MPT-7B-Instruct

MPT-7B-Instruct是用于短格式指导的模型。它是通过在 dataset 派生数据集和 Anthropic Helpful and Harmless (HH-RLHF) 数据集上微调 MPT-7B 而构建的。

此模型由 MosaicML 进行训练,采用改进的仅解码器transformer架构。

模型日期

2023年5月5日

模型许可证

CC-By-SA-3.0

文档

示例问题/指令

Longboi24:

什么是袋猫?

MPT-7B-Instruct:

袋猫(发音为“cool”)是澳大利亚的一种本土食肉有袋类哺乳动物,也被称为大袋鼠或其他亚洲和南美洲地区的袋鼠。

使用方法

注意:此模型要求将trust_remote_code=True传递给from_pretrained方法。这是因为我们使用了不属于transformers库的自定义模型架构。

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

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

注意:此模型要求将trust_remote_code=True传递给from_pretrained方法。这是因为我们使用了不属于Hugging Face transformers库的自定义MPT模型架构。MPT包括许多用于训练效率的选项,如 FlashAttention ALiBi QK LayerNorm 等。

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

import torch
import transformers

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

config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.attn_config['attn_impl'] = 'triton'
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的序列长度上进行了训练,但ALiBi可以在微调和/或推理过程中增加最大序列长度。例如:

import transformers

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

config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.max_seq_len = 4096 # (input + output) tokens can now be up to 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 context manager

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))

格式化

此模型使用dolly-15k格式的数据进行训练:

INSTRUCTION_KEY = "### Instruction:"
RESPONSE_KEY = "### Response:"
INTRO_BLURB = "Below is an instruction that describes a task. Write a response that appropriately completes the request."
PROMPT_FOR_GENERATION_FORMAT = """{intro}
{instruction_key}
{instruction}
{response_key}
""".format(
    intro=INTRO_BLURB,
    instruction_key=INSTRUCTION_KEY,
    instruction="{instruction}",
    response_key=RESPONSE_KEY,
)

example = "James decides to run 3 sprints 3 times a week. He runs 60 meters each sprint. How many total meters does he run a week? Explain before answering."
fmt_ex = PROMPT_FOR_GENERATION_FORMAT.format(instruction=example)

在上面的示例中,fmt_ex已经准备好进行标记化并发送到模型中。

模型描述

该架构是标准解码器-自注意力transformer的改进版。

该模型已经通过以下方式进行了修改:

Hyperparameter Value
n_parameters 6.7B
n_layers 32
n_heads 32
d_model 4096
vocab size 50432
sequence length 2048

预训练数据

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

数据使用 EleutherAI/gpt-neox-20b 令牌器进行标记化。

训练配置

此模型使用8个A100-40GB进行了约2.3小时的训练,使用了 MosaicML Platform 。模型使用了 FSDP 进行分片数据并行处理,并使用了AdamW优化器。

限制和偏见

以下语言经过了 EleutherAI's GPT-NeoX-20B 的修改。

MPT-7B-Instruct可能会产生事实上不正确的输出,不应依赖它产生事实准确的信息。MPT-7B-Instruct是基于各种公共数据集进行训练的。虽然已经进行了大量清洁预训练数据的工作,但该模型可能生成淫秽、有偏见或其他冒犯性的输出。

鸣谢

此模型由Sam Havens和MosaicML NLP团队进行了微调。

MosaicML平台

如果您对在MosaicML平台上自己开发 training deploying 自己的MPT或LLMs感兴趣,请 sign up here

免责声明

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

引用

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

@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}, % change this date
    urldate   = {2023-03-28} % change this date
}