❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦
🌙 「还在为训练大模型烧显卡?月之暗面放出MoE核武器:160亿参数激活量仅30亿,成本直降50%!」
大家好,我是蚝油菜花。深夜两点,当你的GPU集群再度因OOM报错时,是否想过:
- 🤯 为什么每次微调都要激活全部参数?
- 💸 160亿参数的模型必须对应160亿的计算成本吗?
- 🚫 MoE架构的通信开销真的无解吗?
今天要拆解的 Moonlight-16B-A3B 给出了革命性答案!这个由月之暗面开源的MoE模型,通过动态专家路由+Muon优化器,实现总参数160亿却仅激活30亿的惊人效率。更关键的是,其ZeRO-1分布式架构让通信开销降低47%------某AI芯片厂商工程师实测:同等任务GPU消耗减少一半,训练速度提升2.1倍!
🚀 快速阅读
Moonlight-16B-A3B 是一个高效的 MoE 模型,总参数量为 160 亿,激活参数仅为 30 亿。
- 核心功能:支持多种语言任务(如语言理解、文本生成、代码生成)和大规模分布式训练。
- 技术原理:基于优化的 Muon 优化器,相比传统 AdamW 提升了 2 倍计算效率,并采用 ZeRO-1 分布式实现以降低内存和通信开销。
Moonlight-16B-A3B 是什么
Moonlight-16B-A3B 是 Moonshot AI 开发的一款新型 Mixture-of-Expert (MoE) 模型,具有 160 亿总参数和 30 亿激活参数。该模型利用改进版的 Muon 优化器进行训练,相较于传统的 AdamW 优化器,计算效率提高了两倍,同时在多个基准测试中表现出色。例如,在英语语言理解任务(MMLU)和代码生成任务(HumanEval)中均超越了同类模型。Moonlight 使用了 5.7 万亿 token 的数据进行训练,展现出更高的样本效率。
Moonlight 的设计目标是在保持高性能的同时降低计算资源需求。通过优化权重衰减和更新比例,Muon 优化器实现了在大规模模型训练中的稳定性和效率提升。此外,Moonlight 的分布式实现基于 ZeRO-1 技术,显著减少了内存占用和通信成本,使其能够在大规模分布式环境中高效运行。
Moonlight-16B-A3B 的主要功能
- 高效的语言理解和生成:在多种语言任务中表现出色,包括语言理解、文本生成和代码生成。
- 大规模数据训练:使用 5.7 万亿 token 的数据进行训练,支持高效率的分布式训练。
- 低计算成本:仅需约 52% 的训练 FLOPs 即可达到与 AdamW 相当的性能。
- 低激活参数设计:总参数量为 160 亿,激活参数仅为 30 亿,显著降低了计算资源需求。
Moonlight-16B-A3B 的技术原理
- Muon 优化器的改进:通过矩阵正交化技术(如 Newton-Schulz 迭代)对模型参数进行优化,显著提升了训练效率。
- 权重衰减与更新调整:引入权重衰减机制,对每个参数的更新规模进行了调整,使 Muon 能在无需超参数调整的情况下直接应用于大规模模型训练。
- 分布式实现:采用基于 ZeRO-1 的分布式优化技术,减少了内存开销和通信成本,使模型能在大规模分布式环境中高效训练。
如何运行 Moonlight-16B-A3B
模型下载
Model | #Total Params | #Activated Params | Context Length |
---|---|---|---|
Moonlight | 16B | 3B | 8K |
Moonlight-Instruct | 16B | 3B | 8K |
- Moonlight 模型权重 :huggingface.co/moonshotai/...
- Moonlight-Instruct 模型权重 :huggingface.co/moonshotai/...
使用 Hugging Face Transformers 进行推理
以下是使用 Hugging Face Transformers 进行推理的示例代码:
对于预训练模型 (Moonlight)
python
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path = "moonshotai/Moonlight-16B-A3B"
model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype="auto",
device_map="auto",
trust_remote_code=True,
)
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
prompt = "1+1=2, 1+2="
inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True).to(model.device)
generated_ids = model.generate(**inputs, max_new_tokens=100)
response = tokenizer.batch_decode(generated_ids)[0]
print(response)
对于指令微调模型 (Moonlight-Instruct)
python
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path = "moonshotai/Moonlight-16B-A3B-Instruct"
model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype="auto",
device_map="auto",
trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
messages = [
{"role": "system", "content": "You are a helpful assistant provided by Moonshot-AI."},
{"role": "user", "content": "Is 123 a prime?"}
]
input_ids = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
generated_ids = model.generate(inputs=input_ids, max_new_tokens=500)
response = tokenizer.batch_decode(generated_ids)[0]
print(response)
训练
以下是如何使用 Muon 和 AdamW 进行训练的示例:
bash
# 使用 Muon 训练 Qwen 类密集模型
python3 examples/toy_train.py --model qwen --optimizer muon --dataset openwebtext-100k --hidden_size 896 --lr 1e-3
# 使用 AdamW 训练 Qwen 类密集模型
python3 examples/toy_train.py --model qwen --optimizer adamw --dataset openwebtext-100k --hidden_size 896 --lr 1e-3
资源
- GitHub 仓库 :github.com/MoonshotAI/...
- HuggingFace 仓库 :huggingface.co/moonshotai/...
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦