模型:
eluzhnica/mpt-30b-peft-compatible
这是MPT-30B,但是添加了peft的支持进行微调(使用qlora进行了测试)。它没有进行进一步的微调,权重与原始的MPT-30B相同。
我没有追踪整个huggingface的堆栈以确定它是否正常工作,但它确实可以使用qlora进行微调,输出是合理的。受到此处实现的启发 https://huggingface.co/cekal/mpt-7b-peft-compatible/commits/main https://huggingface.co/mosaicml/mpt-7b/discussions/42
以下是MosaicML团队对MPT-30B的原始描述:
MPT-30B是一种解码器风格的Transformer,是从头开始在1T个英文文本和代码标记上进行预训练的。这个模型是由 MosaicML 进行训练的。
MPT-30B是Mosaic预训练转换器(MPT)模型系列的一部分,它使用了优化的变压器架构,以实现高效的训练和推断。
MPT-30B具有与其他LLMs有所不同的特色,包括8k个标记的上下文窗口(可以通过微调进一步扩展;请参阅 MPT-7B-StoryWriter ),通过 ALiBi 支持上下文长度外推,以及通过FlashAttention实现高效推断+训练。由于其预训练混合,它还具有强大的编码功能。MPT模型还可以通过标准的HuggingFace pipeline和NVIDIA的 FasterTransformer 进行高效部署。MPT-30B的大小也是特意选择的,以便在单个GPU上轻松部署,可以使用1个A100-80GB(16位精度)或1个A100-40GB(8位精度)。
这个模型使用了MosaicML LLM代码库,该代码库可以在 llm-foundry repository 中找到。它由MosaicML的NLP团队在 MosaicML platform 上进行了LLM的预训练、微调和推断的训练。
MPT-30B具有以下特点:
以下模型是在MPT-30B上进行微调的:
MPT-30B-Instruct :用于短格式指令追踪的模型。通过在多个精心策划的数据集上进行MPT-30B的微调构建而成。
MPT-30B-Chat :类似于聊天机器人的对话生成模型。通过在 ShareGPT-Vicuna 、 Camel-AI 、 GPTeacher 、 Guanaco 、 Baize 和一些生成数据集上对MPT-30B进行微调构建而成。
2023年6月22日
Apache-2.0
这个模型最好与MosaicML的 llm-foundry repository 一起使用进行训练和微调。
import transformers model = transformers.AutoModelForCausalLM.from_pretrained( 'mosaicml/mpt-30b', trust_remote_code=True )
注意:此模型需要在from_pretrained方法中传递trust_remote_code=True。这是因为我们使用的自定义MPT模型架构尚未包含在Hugging Face transformers软件包中。MPT包括许多训练效率功能选项,例如 FlashAttention 、 ALiBi 、 QK LayerNorm 等。
要使用FlashAttention的优化版本,您可以使用attn_impl='triton'将模型加载到GPU(cuda:0)上,并使用bfloat16精度:
import torch import transformers name = 'mosaicml/mpt-30b' 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' 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分词器进行训练的。
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained('mosaicml/mpt-30b')
然后,该模型可以在文本生成流水线中使用,例如:使用 torch.autocast context manager 在更低的精度下运行Torch模块是最佳实践。
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))
这个架构是标准解码器Transformer的修改版。
该模型从标准变压器中进行了以下修改:
Hyperparameter | Value |
---|---|
n_parameters | 29.95B |
n_layers | 48 |
n_heads | 64 |
d_model | 7168 |
vocab size | 50432 |
sequence length | 8192 |
使用MosaicML的 StreamingDataset 库格式化数据,以在对象存储中托管数据,并在训练期间有效地将数据流式传输到计算集群。StreamingDataset使得在开始训练之前不需要下载整个数据集,并且可以从数据集中的任何点立即恢复训练。
该模型使用以下数据组合进行了1T个标记的训练:
Data Source | Number of Tokens in Source | Proportion | Effective Number of Tokens | Epochs |
---|---|---|---|---|
mC4 3.1.0 - English (200+ words) | 2417.99 B | 33.50% | 335 B | 0.14 |
c4 - English - SemDedup 80% | 100.42 B | 29.90% | 299 B | 2.98 |
RedPajama - CommonCrawl | 878.45 B | 8.50% | 85 B | 0.097 |
The Stack - Selected Languages | 463.78 B | 10.00% | 100 B | 0.22 |
RedPajama - Wikipedia | 4.87 B | 4.00% | 40 B | 8.21 |
The Stack - Markdown | 107.07 B | 4.50% | 45 B | 0.42 |
Semantic Scholar ORC | 48.95 B | 3.30% | 33 B | 0.67 |
RedPajama - Books | 26.02 B | 3.00% | 30 B | 1.15 |
RedPajama - arXiv | 28.10 B | 1.90% | 19 B | 0.68 |
RedPajama - StackExchange | 20.54 B | 1.40% | 14 B | 0.68 |
每个批次的样本从上述数据集中的一个中选择,选择的概率如上所述。在每个数据集内进行洗牌,每个示例由来自该数据集的尽可能多的序列构成,以填充序列长度。为了将8k的支持高效地构建到MPT-30B中,我们首先使用长度为2k的序列进行了1T个标记的预训练,然后使用长度为8k的序列进行了额外的500B个标记的训练。
数据使用 EleutherAI/gpt-neox-20b 分词器进行分词。这个BPE分词器具有许多可取的特性,其中大部分与分词代码有关:(1)它是在包括代码的多样化数据混合上进行训练的(The Pile);(2)它应用一致的空格分隔,不像GPT2分词器那样,根据前缀空格的存在而分词不一致;(3)它包含用于重复空格字符的标记,这允许更好地压缩具有大量重复空格字符的文本。
模型的词汇大小设置为50432的倍数(与 MEGATRON-LM 相同)。
该模型使用 MosaicML Platform 在三个阶段进行训练:(i)首先,在440个A100-40GB上进行训练,批量大小为1760;(ii)然后,在216个A100-40GB上进行训练,批量大小为1728;(iii)在256个H100-80GB上进行训练,批量大小为512,上下文长度为8k,标记数量为50B。该模型使用 FSDP 进行分片数据并行,并使用 LION 优化器进行训练。
以下语言修改自 EleutherAI's GPT-NeoX-20B
MPT-30B(基础版)不适用于未经微调的部署。在没有进一步的保护措施和用户许可的情况下,不应将其用于面向人的交互。
MPT-30B可能会产生事实上不正确的输出,不应依赖它来产生事实准确的信息。MPT-30B是在各种公共数据集上进行训练的。尽管采取了极大的努力来清理预训练数据,但该模型可能会生成淫秽、有偏见或其他令人不悦的输出。
如果您有兴趣在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} }