快速开始

快速开始

几分钟内启动并运行 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('Qwen3_5Template', 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('Qwen3_5Template', 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

部署后:OpenAI 兼容 API

使用 Twinkle Server 部署模型后,即可获得开箱即用的 OpenAI 兼容 API。任何 OpenAI SDK 或工具都可以直接调用你的模型进行推理:

# 启动 Server
twinkle-server launch -c server_config.yaml

server_config.yaml 的编写方式详见 服务端与客户端指南

from openai import OpenAI

client = OpenAI(
    base_url='http://localhost:8000/api/v1',
    api_key='your-token',
)

response = client.chat.completions.create(
    model='Qwen/Qwen3.5-4B',
    messages=[{'role': 'user', 'content': '你好!'}],
    temperature=0.7,
    stream=True,
)
for chunk in response:
    print(chunk.choices[0].delta.content, end='')

支持的端点:

端点方法说明
/chat/completionsPOST聊天补全(支持流式与非流式)
/modelsGET列出可用模型

特性包括:完整流式响应支持(SSE)、粘性会话路由实现 adapter 隔离、自动聊天模板初始化、Adapter 到基座模型的自动解析。

Auto Research:用自然语言驱动训练

Auto Research 是 Twinkle 内置的 LLM Agent 终端,通过自然语言对话自主完成训练全流程——从集群部署、脚本生成、启动训练到异常诊断和自动修复,无需手动编写任何 shell 命令:

# 安装客户端
pip install twinkle-client

# 使用本地 LLM 启动 Auto Research
twinkle-tui --llm-base-url http://localhost:11434/v1 --llm-model qwen3.5

# 或使用远程 API
twinkle-tui --llm-base-url https://api.example.com/v1 --llm-api-key sk-xxx --llm-model gpt-4o

你可以这样对话:

  • “用 Qwen3.5-4B 在 gsm8k 上启动一个 GRPO 训练” — 自动生成脚本并启动训练
  • “训练进展如何?” — 实时指标和状态监控
  • “显示 reward 指标,放大到 step 100-200” — 交互式图表可视化
  • “在 ModelScope 上搜索数学数据集” — 模型和数据集发现

核心能力:

能力说明
训练生命周期启动、暂停、恢复、停止,自动保存 checkpoint
Server 管理自动 GPU 分区、Ray 集群搭建、健康检查
自动修复检测崩溃、诊断错误、改写脚本并重启(最多 3 次尝试)
实时监控ASCII 指标图表、日志流、每 30 秒健康检查
Skills 系统可扩展的插件架构(内置 + 本地 + 社区)

Auto Research 将 ML 训练变成一场对话——描述你想训练什么,Agent 自动处理从服务器部署到排障的全部工作。

支持的硬件

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

下一步

docs