今天来聊一个我觉得挺有意思的新项目——魔搭(ModelScope)团队刚开源的Twinkle✨,一个让大模型训练真正"亮起来"的训练框架。
顺带说一句,这篇文章介绍的项目也是来自魔搭
简介
做过模型训练的同学应该都深有体会:训练一个大模型,最痛苦的不是算法本身,而是搞基础设施。你写好了训练代码,结果要在分布式环境下跑起来,先是配 Ray 集群,再是搞数据并行、模型并行,checkpoint 又要同步……光是把这套流水线跑通就够花上好几天时间了。
Twinkle✨ 想解决的就是这个问题。一句话总结:它是一个轻量级的客户端-服务端训练框架,把训练逻辑封装成标准化 API,不管你用 torchrun 本地跑还是用 Ray 集群跑,代码基本不用改。
更牛的是,它还能作为Training-as-a-Service(TaaS)的后端网关——也就是说,你甚至可以像调 API 一样训练模型。这在企业级场景下简直太香了。
下面这张架构图一目了然:
![]()
Twinkle 架构设计:解耦的客户端-服务端架构
核心亮点拉出来说:
解耦架构:客户端和服务端分离,标准化接口设计,向后兼容 Tinker API。搞过 Tinker 的同学迁移成本极低,改个 base URL 就行
三种运行模式:torchrun / Ray / HTTP,本地调试、集群训练、远程 API 服务随便切换
多后端支持:同时支持 Transformers 和 Megatron 后端,Dense 模型和 MoE 模型都能搞
多租户训练:在同一个基础模型上同时跑多个 LoRA 训练任务,互不干扰——这个功能是真的硬核
另外值得一提的是,Twinkle✨ 是ms-swift(魔搭之前非常知名的训练框架)团队打造的。官方也明确说了,预计 Twinkle 中的一些基础组件会被 ms-swift 复用,可以说这两个项目是共同演进的关系。
多租户:一个底座跑 N 个训练任务
这应该是 Twinkle 最让人眼前一亮的功能了。
想象一下这个场景:公司有一台 A100 集群,同时有 4 个团队要微调模型。传统做法是排队,一个一个来。但用了 Twinkle 的多租户架构,4 个团队可以同时在一个底座模型上训练各自的 LoRA,完全隔离。
![]()
多租户训练架构:LoRA 池 + 租户隔离
举个真实例子:
租户 A:加载本地私有数据集,LoRA rank=8,用基础模型做 SFT
租户 B:从 Hub 拉开源数据集,LoRA rank=32,跑预训练
租户 C:用基础模型做 GRPO 损失计算,搞强化学习
租户 D:纯推理,算 logps
这 4 个任务并发跑在同一个底座模型上,因为 Twinkle 把模型和采样器设计成了「任务无关组件」。训练完成后,checkpoint 还能自动推送到 ModelScope 或 HuggingFace 的仓库(默认私有)。
说白了,这就是给企业场景准备的「GPU 多人共享训练平台」。在 GPU 资源紧张的今天,这种设计真的太实用了。
注意:目前多租户的并发训练主要针对 LoRA 优化。当然作为模块化框架,Twinkle 也支持远程临时独占训练,也就是全参数训练模式。支持的模型
Twinkle 目前支持的模型覆盖面已经相当广了,主流的大模型基本都有:
模型系列
代表模型
参数规模
Megatron 支持
Qwen3 全系列
Qwen3-14B-Base
0.6B ~ 32B
Qwen3 MoE
Qwen3-30B-A3B
30B-A3B, 235B-A22B
Qwen3.5 MoE
Qwen3.5-35B-A3B
35B-A3B, 122B-A10B
Qwen3.5 Dense
Qwen3.5-9B
2B ~ 27B
Qwen2 / 2.5 全系列
Qwen2.5-1.5B-Instruct
0.5B ~ 72B
ChatGLM3/4
glm-4-9b-chat
6B ~ 9B
InternLM2
internlm2-1_8b
1.8B ~ 7B
DeepSeek V2
DeepSeek-V2-Lite
V2 全系列
DeepSeek R1
DeepSeek-R1
DeepSeek R1 蒸馏版
R1-Distill-Qwen-7B
1.5B ~ 32B
可以看到,Qwen 系列和 DeepSeek 系列的 Megatron 支持做得最好。GLM 和 InternLM 暂时只支持 Transformers 后端。
而且官方也说了,随着新模型的发布会持续添加支持。目前在 ModelScope 上提供的 Serverless 训练服务,底座模型用的是Qwen3-30B-A3B-Instruct-2507。
安装
安装非常简单,一行 pip 搞定:
pip install 'twinkle-kit'
如果需要从源码安装:
git clone https://github.com/modelscope/twinkle.git
cd twinkle
pip install -e .
环境要求:Python >= 3.11,PyTorch >= 2.0。
如果要用 Megatron 后端,还需要额外安装 Megatron-LM(仓库里有INSTALL_MEGATRON.sh脚本可以直接用)。
使用
来看一个用 Ray 训练 LoRA 的完整示例。代码整体写起来非常清晰:
from peft import LoraConfig
import twinkle
from twinkle import DeviceMesh, DeviceGroup
from twinkle.dataloader import DataLoader
from twinkle.dataset import Dataset, DatasetMeta
from twinkle.model import TransformersModel
from twinkle.preprocessor import SelfCognitionProcessor
# 定义设备组和 mesh
device_group = [DeviceGroup(name='default', ranks=8, device_type='cuda')]
device_mesh = DeviceMesh.from_sizes(fsdp_size=4, dp_size=2)
twinkle.initialize(mode='ray', groups=device_group, global_device_mesh=device_mesh)
def train():
# 从 ModelScope 加载模型(HuggingFace 用 'hf://...')
base_model = 'ms://Qwen/Qwen3.5-4B'
# 加载 1000 条样本
dataset = Dataset(dataset_meta=DatasetMeta(
'ms://swift/self-cognition', data_slice=range(1000)
))
dataset.set_template('Template', model_id=base_model)
dataset.map(SelfCognitionProcessor('twinkle LLM', 'ModelScope Community'))
dataset.encode()
# 全局 batch size = 8
dataloader = DataLoader(dataset=dataset, batch_size=8, min_batch_size=8)
# 使用 Transformers 后端
model = TransformersModel(model_id=base_model, remote_group='default')
# 配置 LoRA
lora_config = LoraConfig(r=8, lora_alpha=32, target_modules='all-linear')
model.add_adapter_to_model('default', lora_config, gradient_accumulation_steps=2)
model.set_optimizer(optimizer_cls='AdamW', lr=1e-4)
model.set_lr_scheduler(
scheduler_cls='CosineWarmupScheduler',
num_warmup_steps=5,
num_training_steps=len(dataloader)
)
# 训练循环
for step, batch in enumerate(dataloader):
model.forward_backward(inputs=batch)
model.clip_grad_and_step()
if step % 20 == 0:
metric = model.calculate_metric(is_training=True)
print(f'Step {step}/{len(dataloader)}, metric: {metric}')
model.save('last-checkpoint')if __name__ == '__main__':
train()
说实话,看完这段代码我是挺惊喜的。整个 API 设计得非常 Pythonic:加载数据、设置模板、定义模型、配置 LoRA、训练循环,每一步都很直观。特别是ms://和hf://的前缀设计,可以无缝切换 ModelScope 和 HuggingFace 的模型源,很优雅。
训练即服务(TaaS)
Twinkle 还有一个杀手级的功能:在 ModelScope 上提供了 Serverless 训练服务,目前处于 Beta 阶段。
怎么用呢?加入 Twinkle-Explorers 组织就能免费体验。用 Tinker 兼容 API 调用就行:
from tinker import ServiceClient, types
from twinkle import init_tinker_client
base_url = 'https://www.modelscope.cn/twinkle'
api_key = 'your-api-key'
init_tinker_client()
service_client = ServiceClient(base_url=base_url, api_key=api_key)
training_client = service_client.create_lora_training_client(
base_model='Qwen/Qwen3-30B-A3B-Instruct-2507', rank=16
)# 像调 API 一样训练模型
for epoch in range(3):
for step, batch in enumerate(dataloader):
input_datum = [input_feature_to_datum(feat) for feat in batch]
fwdbwd_future = training_client.forward_backward(input_datum, "cross_entropy")
optim_future = training_client.optim_step(types.AdamParams(learning_rate=1e-4))
fwdbwd_future.result()
optim_future.result()
training_client.save_state(f"twinkle-lora-{epoch}").result()
没有 GPU?没关系,用 ModelScope 的 Serverless 训练服务,远程调 API 就能训练一个 30B 的 MoE 模型的 LoRA。对于个人开发者和小团队来说,这简直是福音。
模块化生态
Twinkle 的模块化设计做得相当细致,一共有 20 个标准模块:
类别
模块
功能
数据层
Dataset / Template / DataLoader / Preprocessor / InputProcessor
数据加载、编解码、分发、ETL、任务处理
模型层
Model / Sampler / Loss / Metric / Reward / Advantage
大模型、采样、损失、指标、奖励、优势函数
工程层
CheckpointEngine / Patch / Module / Kernel
权重同步、模型修复、组件、算子
服务层
Server / Client / Infra / Plugin / Hub
集群启动、客户端、基础设施抽象、插件、Hub 对接
每个模块都是高内聚的,可以单独替换或扩展。比如你想换个自定义的损失函数?实现 Loss 接口就行。想用自己的采样策略?实现 Sampler 接口即可。这种设计让框架的可扩展性非常强。
社区也已经开始贡献组件了,比如 ModelScope 官方提供了一个qwen3_moe_transformers4_patch,专门修复 Qwen3 MoE 模型在 FSDP2 训练时挂起的问题。
丰富的 Cookbook
Twinkle 提供了覆盖多个场景的训练脚本:
训练类型
后端
FSDP 微调
Transformers
全参数微调
FSDP MoE 微调
Transformers
MoE 架构专用
Expert Parallelism + FSDP
Transformers
专家并行 + 数据并行
Sequence Parallelism + FSDP
Transformers
序列并行,超长上下文训练
TP 训练
Megatron
张量并行
TP MoE 训练
Megatron
MoE + 张量并行
Tinker/Twinkle 客户端训练
两者均支持
远程 API 方式训练
这个覆盖面已经很全了。无论你是用 Transformers 还是 Megatron 后端,Dense 还是 MoE 模型,本地还是远程训练,基本都有现成的 cookbook 可以参考。
总结
Twinkle✨ 是我最近看到的最有想象力的大模型训练框架之一。
它不只是又一个训练工具,而是把"训练即服务"这个概念真正落地了。客户端-服务端解耦、多租户 LoRA 并行训练、Serverless TaaS、多后端支持……每一个特性单拿出来都有竞争力,组合在一起就是一套完整的企业级训练解决方案。
优点:
架构设计优雅,模块化程度高,扩展性强
多租户 LoRA 并行训练是真正的差异化卖点
支持 Transformers / Megatron 双后端
ModelScope TaaS 服务让没有 GPU 的开发者也能训练大模型
和 ms-swift 生态互通,组件可复用
代码风格清晰,API 设计很 Pythonic
需要注意的地方:
项目刚开源不久(2026 年 2 月首版),生态还在建设中
多租户并发目前仅针对 LoRA 优化
支持的模型虽然覆盖主流,但不如 ms-swift 那么全
对华为昇腾 NPU 的支持还在完善中(文档已经有 NPU 开箱指南了)
如果你是做大模型训练的企业用户,特别是需要多人共享 GPU 集群训练各自模型的场景,Twinkle 值得重点关注。如果你是个人开发者,可以先体验一下 ModelScope 上的免费 Serverless 训练服务,感受一下"API 训练大模型"的快感。
官方链接:
GitHub:https://github.com/modelscope/twinkle
中文文档:https://twinkle-kit.readthedocs.io/zh-cn/latest/
PyPI:https://pypi.org/project/twinkle-kit/
Serverless 训练服务:加入 Twinkle-Explorers 组织即可体验
制作不易,如果这篇文章觉得对你有用,可否点个关注。给我个三连击:点赞、转发和在看。若可以再给我加个,谢谢你看我的文章,我们下篇再见!
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.