ModuleFormer
ModuleFormer是一种基于MoE的架构,包含两种不同类型的专家:粘性断裂注意力头和前馈专家。在训练和推理过程中,不同的专家会根据输入token稀疏激活。 在我们的实验中,我们发现这种稀疏架构为大型预训练语言模型带来了三个重要能力:
- 效率,由于ModuleFormer只为每个输入token激活部分专家,因此它能以两倍以上的吞吐量达到与密集型大语言模型相同的性能;
- 可扩展性,ModuleFormer比密集型大语言模型更不易发生灾难性遗忘,可以轻松通过添加新专家来学习训练数据中未包含的新知识;
- 专门化,微调ModuleFormer可以使部分专家专门适应微调任务,而与任务无关的专家可以轻松剪枝以实现轻量级部署。
MoLM是一系列基于ModuleFormer的语言模型,参数规模从40亿到80亿不等。
模型使用 要加载模型,你需要安装此软件包:
pip install -e .
然后你可以用以下代码加载模型:
from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig, AutoModelForSequenceClassification
from moduleformer import ModuleFormerForCausalLM, ModuleFormerConfig, ModuleFormerForSequenceClassification
AutoConfig.register("moduleformer", ModuleFormerConfig)
AutoModelForCausalLM.register(ModuleFormerConfig, ModuleFormerForCausalLM)
AutoModelForSequenceClassification.register(ModuleFormerConfig, ModuleFormerForSequenceClassification)
tokenizer = AutoTokenizer.from_pretrained('ibm/MoLM-350M-4B')
model = AutoModelForCausalLM.from_pretrained('ibm/MoLM-350M-4B')
模型详情 MoLM-350M-4B是一个基于MoE的语言模型。它有40亿参数,但每个输入token只激活3.5亿参数。因此,它在计算上相当于一个3.5亿参数的密集模型。 MoLM-700M-4B有40亿参数,在计算上相当于一个7亿参数的密集模型。 MoLM-700M-8B有80亿参数,在计算上相当于一个7亿参数的密集模型。所有模型都在来自公开来源的3000亿个token上训练。 所有模型都在来自公开来源的3000亿个token上训练,学习率为3.0 x 10-4,全局批量大小为300万个token。
模型开发者 IBM
变体 MoLM有两种不同的参数规模 — 40亿和80亿。40亿参数模型有两个变体,计算成本不同 — 3.5亿和7亿。
输入 模型仅输入文本。
输出 模型仅生成文本。
模型架构 MoLM是一个使用ModuleFormer架构的自回归语言模型。每个注意力层有16个注意力模块,每个MLP层有32个MLP模块。在推理过程中,MoLM-350M-4B和MoLM-700M-8B在每一层为每个token激活2个模块,而MoLM-700M-4B激活4个模块。MoLM-350M-4B和MoLM-700M-4B有24个块,MoLM-700M-8B有48个块。
状态 这是一个在离线数据集上训练的静态模型。我们将根据社区反馈改进模型安全性,并发布未来版本的调优模型。
研究论文 "ModuleFormer: 从专家混合中涌现的模块化"
训练数据
MoLM模型在来自公开来源的3000亿个token的数据上进行预训练。
评估结果
在本节中,我们报告MoLM模型在标准学术基准测试上的结果。对于所有评估,我们使用LM evaluations Harness。
模型 | 延迟 | 内存 | 吞吐量 | Hellaswag | PIQA | ARC-e | ARC-c | OBQA |
---|---|---|---|---|---|---|---|---|
毫秒 | GB | 令牌/秒 | 准确率 | 准确率 | 准确率 | 准确率 | 准确率 | |
Pythia 410M | 554 | 25 | 59594 | 33.72 | 66.70 | 51.89 | 21.42 | 18.2 |
GPT-Neo 1.3B | 991 | 23 | 32857 | 38.66 | 71.11 | 56.19 | 23.12 | 21.4 |
Pythia 1.4B | 918 | 42 | 35559 | 40.41 | 70.84 | 60.52 | 26.11 | 22.2 |
MoLM-350M-4B | 497 | 27 | 71017 | 39.21 | 70.13 | 56.44 | 23.55 | 20.8 |
GPT-Neo 2.7B | 1737 | 35 | 18788 | 42.71 | 72.2 | 61.07 | 27.47 | 23.2 |
Pythia 2.8B | 2111 | 70 | 15522 | 45.34 | 73.99 | 64.35 | 29.35 | 23.8 |
MoLM-700M-4B | 863 | 27 | 39931 | 42.20 | 73.01 | 60.82 | 25.94 | 22.6 |
MoLM-700M-8B | 939 | 38 | 37419 | 43.33 | 72.91 | 62.46 | 27.90 | 23.8 |
模型 | TriviaQA | HumanEval | Wikitext | ||||
---|---|---|---|---|---|---|---|
零样本 | 单样本 | 5样本 | 通过@1 | 通过@10 | 通过@100 | PPL | |
Pythia 410M | 2.32 | 5.02 | 6.42 | 1.20 | 3.85 | 9.98 | 20.09 |
GPT-Neo 1.3B | 5.24 | 8.01 | 9.74 | 3.62 | 6.87 | 14.50 | 16.16 |
Pythia 1.4B | 5.30 | 9.87 | 12.84 | 2.19 | 7.31 | 14.33 | 14.71 |
MoLM-350M-4B | 5.40 | 11.12 | 13.70 | 3.04 | 6.99 | 13.79 | 15.15 |
GPT-Neo 2.7B | 4.82 | 11.23 | 13.67 | 4.89 | 9.54 | 17.90 | 13.93 |
Pythia 2.8B | 7.38 | 15.58 | 18.98 | 4.91 | 11.76 | 21.54 | 12.68 |
MoLM-700M-4B | 9.07 | 14.24 | 16.49 | 5.50 | 10.65 | 20.27 | 13.20 |
MoLM-700M-8B | 11.47 | 16.73 | 20.75 | 5.51 | 12.58 | 20.40 | 12.97 |
伦理考虑和局限性
MoLM是一项新技术,其使用存在风险。迄今为止的测试仅限于英语,并未涵盖也无法涵盖所有场景。因此,与所有大型语言模型一样,MoLM的潜在输出无法提前预测,在某些情况下,模型可能会对用户的提示产生不准确、有偏见或其他令人反感的回应。因此,在部署任何MoLM应用之前,开发人员应该针对其特定的模型应用进行安全测试和调整。
引用
如果您使用本仓库中的数据或代码,请引用以下论文。
@article{shen2023moduleformer,
title={ModuleFormer: Learning Modular Large Language Models From Uncurated Data},
author={Shen, Yikang and Zhang, Zheyu and Cao, Tianyou and Tan, Shawn and Chen, Zhenfang and Gan, Chuang},
journal={arXiv preprint arXiv:2306.04640},
year={2023}
}