模型:
eluzhnica/mpt-30b-instruct-peft-compatible
这是MPT-30B-Instruct模型,但添加了对使用peft进行微调的支持(在qlora上进行了测试)。它没有进一步微调,权重与原始的MPT-30B-Instruct模型相同。
我没有追踪整个huggingface堆栈,看这个是否正常工作,但它可以在qlora上进行微调,并且输出是合理的。受以下实现的启发 https://huggingface.co/cekal/mpt-7b-peft-compatible/commits/main https://huggingface.co/mosaicml/mpt-7b/discussions/42 .
MosaicML团队的原始描述如下:
MPT-30B-Instruct是一个用于短格式指令跟随的模型。它是通过将 MPT-30B 在 Dolly HHRLHF 的基础上进行微调的结果,这些数据集来自 Databricks Dolly-15k 和 Anthropic Helpful and Harmless (HH-RLHF) 。它还使用了 Competition Math 、 Duorc 、 CoT GSM8k 、 Qasper 、 Quality 、 Summ Screen FD 和 Spider 进行了训练。
此模型是由 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 )
要使用优化的 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 tokenizer 的 MPT-30B tokenizer,其中包含额外的填充和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相比进行了以下修改:
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 tokenizer 进行标记化。
此模型在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平台上训练您自己的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} }