快速开始

快速开始

几分钟内启动并运行 Twinkle。

什么是 Twinkle?

Twinkle 是一个面向生产的大模型训练框架,采用组件化架构:

  • 松耦合架构 · 标准化接口
  • 多运行模式 · torchrun / Ray / HTTP
  • 多框架兼容 · Transformers / Megatron
  • 多租户支持 · 单基座模型部署

何时选择 Twinkle

  • 你想了解模型机制和训练方法
  • 你是研究人员,想定制模型或训练算法
  • 你喜欢编写显式的训练循环
  • 你需要构建企业级训练平台

何时选择 ms-swift

  • 你不关心训练过程,只想提供数据
  • 你需要更多模型支持和数据集种类
  • 你需要推理、部署、量化能力
  • 你需要新模型的 day-0 支持

环境要求

组件要求备注
Python>= 3.11, < 3.13推荐 3.11
PyTorch>= 2.0NPU 需要 2.7.1
GPUA10/A100/H100/RTXT4/V100 支持有限
NPU昇腾 910 系列可选

安装

安装 Twinkle

# 从 PyPI 安装
pip install 'twinkle-kit'

# 或从源码安装
git clone https://github.com/modelscope/twinkle.git
cd twinkle
pip install -e .

安装客户端(可选)

如果需要使用 Twinkle 的客户端进行远程训练:

# Mac 或 Linux
sh INSTALL_CLIENT.sh

# Windows (PowerShell)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
.\INSTALL_CLIENT.ps1

安装 Megatron 依赖(可选)

用于 Megatron 后端的超大规模模型训练:

sh INSTALL_MEGATRON.sh

第一次训练

单卡训练

from peft import LoraConfig
from twinkle import get_device_placement, get_logger
from twinkle.dataloader import DataLoader
from twinkle.dataset import Dataset, DatasetMeta
from twinkle.model import TransformersModel
from twinkle.preprocessor import SelfCognitionProcessor

logger = get_logger()

def train():
    # 加载数据集(1000 条样本)
    dataset = Dataset(dataset_meta=DatasetMeta(
        'ms://swift/self-cognition', 
        data_slice=range(1000)
    ))
    # 设置模板用于编码
    dataset.set_template('Template', model_id='ms://Qwen/Qwen3.5-4B')
    # 预处理为标准格式
    dataset.map(SelfCognitionProcessor('Twinkle LLM', 'ModelScope'))
    # 编码数据集
    dataset.encode()
    
    # 创建 dataloader(全局 batch size = 8)
    dataloader = DataLoader(dataset=dataset, batch_size=8)
    
    # 加载模型
    model = TransformersModel(model_id='ms://Qwen/Qwen3.5-4B')
    
    # 添加 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)
            logger.info(f'Step {step}/{len(dataloader)}, metric: {metric}')
    
    model.save('last-checkpoint')

if __name__ == '__main__':
    train()

多卡训练(8 卡)

只需添加 DeviceMesh 初始化:

import twinkle
from twinkle import DeviceMesh

# 构建 device_mesh:fsdp=4, dp=2,共使用 8 张卡
device_mesh = DeviceMesh.from_sizes(fsdp_size=4, dp_size=2)
twinkle.initialize(mode='local', global_device_mesh=device_mesh)

# ... 其余训练代码保持不变

使用 torchrun 运行:

torchrun --nproc_per_node=8 train.py

仅使用部分组件

你可以只使用 Twinkle 的部分组件,与现有代码结合:

from twinkle.dataset import PackingDataset, DatasetMeta
from twinkle.dataloader import DataLoader
from twinkle.preprocessor import SelfCognitionProcessor

dataset_meta = DatasetMeta(
    dataset_id='ms://swift/self-cognition',
)

dataset = PackingDataset(dataset_meta)
dataset.map(SelfCognitionProcessor(
    model_name='Twinkle Model', 
    model_author='ModelScope Community'
))
dataset.set_template('Template', model_id='ms://Qwen/Qwen3.5-4B', max_length=512)
dataset.encode()
dataset.pack_dataset()

dataloader = DataLoader(dataset, batch_size=8)

for data in dataloader:
    # 与你的自定义训练代码结合使用
    print(data.keys())  # input_ids, position_ids, ...
    break

支持的硬件

硬件备注
GPU A10/A100/H100/RTX完整支持
GPU T4/V100不支持 bfloat16,不支持 Flash-Attention
昇腾 NPU部分算子不支持
PPU支持
CPU部分组件(dataset, dataloader)

下一步

docs