英文

# 使用Ctranslate2进行快速推断

使用C++在CPU或GPU上进行int8推断,加速推断速度同时减少内存使用量2倍至4倍。

mosaicml/mpt-30b-instruct 的量化版本

pip install hf-hub-ctranslate2>=2.12.0 ctranslate2>=3.16.0
# from transformers import AutoTokenizer
model_name = "michaelfeil/ct2fast-mpt-30b-instruct"


from hf_hub_ctranslate2 import GeneratorCT2fromHfHub
model = GeneratorCT2fromHfHub(
        # load in int8 on CUDA
        model_name_or_path=model_name,
        device="cuda",
        compute_type="int8_float16",
        # tokenizer=AutoTokenizer.from_pretrained("{ORG}/{NAME}")
)
outputs = model.generate(
    text=["def fibonnaci(", "User: How are you doing? Bot:"],
    max_length=64,
    include_prompt_in_result=False
)
print(outputs)

兼容于 ctranslate2>=3.16.0 hf-hub-ctranslate2>=2.12.0 的检查点

  • 对于device="cuda",compute_type=int8_float16
  • 对于device="cpu",compute_type=int8

2023-06-23转换

ct2-transformers-converter --model mosaicml/mpt-30b-instruct --output_dir ~/tmp-ct2fast-mpt-30b-instruct --force --copy_files tokenizer.json README.md tokenizer_config.json generation_config.json special_tokens_map.json .gitattributes --quantization int8_float16 --trust_remote_code

许可和其他说明:

这只是一个量化版本。许可条件旨在与原始的huggingface repo相同。

原始描述

MPT-30B-Instruct

MPT-30B-Instruct是一个用于短程指令跟随的模型。它是通过在数据集 Databricks Dolly-15k Anthropic Helpful and Harmless (HH-RLHF) 上微调 MPT-30B 得到的,数据集衍生自数据集 Dolly HHRLHF 。它还在 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,让她为她的财富500强公司使用MosaicML平台来训练一个自定义的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
)

要使用优化后的 triton implementation 的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.01%
cot_gsm8k 3.36 M 6.32%
dialogsum 0.1 M 0.19%
dolly_hhrlhf 5.89 M 11.07%
duorc 8.2 M 15.51%
qasper 10.97 M 20.63%
quality 11.31 M 21.28%
scrolls/summ_screen_fd 11.56 M 21.82%
spider 0.089 M 0.16%

预训练数据

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

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

训练配置

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

局限性和偏见

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

MPT-30B-Instruct可能会产生事实不准确的输出,不应依赖它来产生事实准确的信息。MPT-30B-Instruct是根据各种公共数据集训练的。尽管我们已经努力清理了预训练数据,但是这个模型可能会生成淫秽、偏见或其他令人不悦的输出。

致谢

这个模型是由Sam Havens、Alex Trott和MosaicML NLP团队进行微调的

MosaicML平台

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

免责声明

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

引用

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

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