概述
Twinkle 提供了完整的 HTTP Server/Client 架构,支持将模型部署为服务,并通过客户端远程调用完成训练、推理等任务。这种架构将**模型承载(Server 端)和训练逻辑(Client 端)**解耦,使得多个用户可以共享同一个基座模型进行训练。
核心概念
- Server 端:基于 Ray Serve 部署,承载模型权重和推理/训练计算。Server 负责管理模型加载、前向/反向传播、权重保存、采样推理等。同一个 Server 同时支持 Twinkle Client 和 Tinker Client 连接。
- Client 端:在本地运行,负责数据准备、训练循环编排、超参配置等。Client 通过 HTTP 与 Server 通信,发送数据和指令。
模型后端
模型加载支持三种后端:
| 后端 | backend | 说明 |
|---|---|---|
| Transformers | transformers | 基于 HuggingFace Transformers,适用于大多数场景 |
| Megatron | megatron | 基于 Megatron-LM,适用于超大规模模型训练,支持更高效的并行策略 |
| Mock | mock | Numpy-only 模拟后端,用于 CPU-only 开发和测试 |
两种 Client 模式
| Client | 初始化方式 | 说明 |
|---|---|---|
| Twinkle Client | init_twinkle_client | 原生客户端,将 from twinkle import 改为 from twinkle_client import 即可将本地训练代码迁移为远端调用 |
| Tinker Client | init_tinker_client | 对 Tinker SDK 进行 patch,使已有 Tinker 训练代码可直接复用 |
如何选择
Client 模式选择
| 场景 | 推荐 |
|---|---|
| 已有 Twinkle 本地训练代码,希望改为远端 | Twinkle Client — 仅需改 import 路径 |
| 已有 Tinker 训练代码,希望复用 | Tinker Client — 仅需初始化 patch |
| 全新项目 | Twinkle Client — API 更简洁 |
模型后端选择
| 场景 | 推荐 |
|---|---|
| 7B/14B 等中小规模模型 | Transformers 后端(backend: transformers) |
| 超大规模模型,需要高级并行策略 | Megatron 后端(backend: megatron) |
| 快速实验和原型验证 | Transformers 后端(backend: transformers) |
| CPU-only 开发/测试 | Mock 后端(backend: mock) |
Cookbook 参考
完整的可运行示例位于 cookbook/ 目录:
cookbook/
├── observability/ # 可观测性(Grafana + OTLP)
│ ├── docker-compose.yaml # 一键启动 LGTM 栈
│ └── README.md
├── client/
│ ├── server/ # Server 启动配置
│ │ ├── transformer/ # Transformers 后端
│ │ │ ├── run.sh
│ │ │ ├── server_config.yaml
│ │ │ └── server_config_e2e.yaml
│ │ ├── megatron/ # Megatron 后端
│ │ │ ├── run.sh
│ │ │ ├── server_config.yaml
│ │ │ └── server_config_4b.yaml
│ │ └── mock/ # Mock 后端(CPU-only 快速启动)
│ │ └── server_config.yaml
├── twinkle/ # Twinkle Client 示例
│ ├── self_host/ # 自托管 Server
│ │ ├── dpo.py # DPO 训练客户端
│ │ ├── multi_modal.py # 多模态训练客户端
│ │ ├── sample.py # 推理采样客户端
│ │ ├── self_congnition.py # 自我认知训练客户端
│ │ └── short_math_grpo.py # GRPO 数学训练客户端
│ └── modelscope/ # ModelScope 托管服务
│ ├── dpo.py
│ ├── multi_modal.py
│ └── self_congnition.py
└── tinker/ # Tinker Client 示例
├── self_host/ # 自托管 Server
│ ├── dpo.py # DPO 训练客户端
│ ├── lora.py # LoRA 训练客户端
│ ├── multi_modal.py # 多模态训练客户端
│ ├── sample.py # 推理采样客户端
│ ├── self_cognition.py # 自我认知训练客户端
│ └── short_math_grpo.py # GRPO 数学训练客户端
└── modelscope/ # ModelScope 托管服务
├── dpo.py
├── sample.py
├── self_cognition.py
└── short_math_grpo.py
运行步骤:
# 1. 先启动 Server
twinkle-server launch -c cookbook/client/server/transformer/server_config.yaml
# 2. 在另一个终端运行 Client(以 Tinker Client 为例)
python cookbook/client/tinker/self_host/self_cognition.py
# 或使用 Twinkle Client
python cookbook/client/twinkle/self_host/self_cognition.py