Skip to content

Commit 96d1354

Browse files
fix (#107)
1 parent 9ce8d77 commit 96d1354

File tree

3 files changed

+14
-30
lines changed

3 files changed

+14
-30
lines changed

cookbook/client/twinkle/self_congnition.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121

2222
logger = get_logger()
2323

24-
# Whether to use Megatron for training
25-
use_megatron = True
24+
2625
# Step 2: Initialize the Twinkle client to communicate with the remote server.
2726
# - base_url: the address of the running Twinkle server
2827
# - api_key: authentication token (loaded from environment variable)
@@ -88,8 +87,7 @@ def train():
8887
model.set_optimizer('Adam', lr=1e-4)
8988

9089
# Use a linear learning rate scheduler (Do not support LR scheduler if server use megatron)
91-
if not use_megatron:
92-
model.set_lr_scheduler('LinearLR')
90+
model.set_lr_scheduler('LinearLR')
9391

9492
# Step 6: Optionally resume from a previous checkpoint
9593
if resume_path:

docs/source_en/Usage Guide/Introduction-with-Qwen3.5.md

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Qwen3.5-4B Training Best Practices
1+
# Qwen3.5 Training Best Practices
22

3-
Using Qwen3.5-4B as an example, this guide demonstrates the core capability of the Twinkle framework: **one codebase, from single GPU training to Client-Server mode**.
3+
Using Qwen3.5-4B as an example, this guide demonstrates the core capability of the Twinkle framework: **one component-based code, used from single GPU training to Client-Server mode**.
44

55
---
66

@@ -364,7 +364,6 @@ Twinkle Client provides an API nearly identical to local training, ideal for sce
364364
import dotenv
365365
dotenv.load_dotenv('.env')
366366

367-
import os
368367
from peft import LoraConfig
369368

370369
from twinkle import get_logger
@@ -376,9 +375,6 @@ from twinkle_client.model import MultiLoraTransformersModel
376375

377376
logger = get_logger()
378377

379-
# Whether to use the Megatron backend
380-
use_megatron = True
381-
382378
# Initialize the Twinkle client
383379
client = init_twinkle_client(base_url='http://127.0.0.1:8000', api_key='EMPTY_TOKEN')
384380

@@ -410,11 +406,8 @@ def train():
410406
model.set_template('Template')
411407
model.set_processor('InputProcessor', padding_side='right')
412408
model.set_loss('CrossEntropyLoss')
413-
model.set_optimizer('Adam', lr=1e-4)
414-
415-
# LR scheduler not supported with Megatron backend
416-
if not use_megatron:
417-
model.set_lr_scheduler('LinearLR')
409+
model.set_optimizer('AdamW', lr=1e-4)
410+
model.set_lr_scheduler('LinearLR')
418411

419412
# Resume from checkpoint if available
420413
if resume_path:
@@ -473,15 +466,15 @@ init_tinker_client()
473466
from tinker import ServiceClient
474467

475468
# Base model
476-
base_model = 'Qwen/Qwen3-30B-A3B-Instruct-2507'
469+
base_model = 'Qwen/Qwen3.5-4B'
477470
base_url = 'http://www.modelscope.cn/twinkle'
478471

479472

480473
def train():
481474
# Prepare dataset
482475
dataset = Dataset(dataset_meta=DatasetMeta('ms://swift/self-cognition', data_slice=range(500)))
483476
dataset.set_template('Template', model_id=f'ms://{base_model}', max_length=256)
484-
dataset.map(SelfCognitionProcessor('twinkle model', 'twinkle team'), load_from_cache_file=False)
477+
dataset.map(SelfCognitionProcessor('Twinkle Model', 'ModelScope Team'), load_from_cache_file=False)
485478
dataset.encode(batched=True, load_from_cache_file=False)
486479
dataloader = DataLoader(dataset=dataset, batch_size=8)
487480

docs/source_zh/使用指引/Qwen3.5最佳实践.md

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Qwen3.5-4B 训练最佳实践
1+
# Qwen3.5 训练最佳实践
22

3-
本文以 Qwen3.5-4B 为例,演示 Twinkle 框架的核心能力:**一套代码,从单卡训练到Client-Server环境**
3+
本文以 Qwen3.5-4B 为例,演示 Twinkle 框架的核心能力:**一套组件化代码,从单卡训练到Client-Server环境**
44

55
---
66

@@ -364,7 +364,6 @@ Twinkle Client 提供与本地训练几乎完全一致的 API,适合需要精
364364
import dotenv
365365
dotenv.load_dotenv('.env')
366366

367-
import os
368367
from peft import LoraConfig
369368

370369
from twinkle import get_logger
@@ -376,9 +375,6 @@ from twinkle_client.model import MultiLoraTransformersModel
376375

377376
logger = get_logger()
378377

379-
# 是否使用 Megatron 后端
380-
use_megatron = True
381-
382378
# 初始化 Twinkle 客户端
383379
client = init_twinkle_client(base_url='http://127.0.0.1:8000', api_key='EMPTY_TOKEN')
384380

@@ -410,11 +406,8 @@ def train():
410406
model.set_template('Template')
411407
model.set_processor('InputProcessor', padding_side='right')
412408
model.set_loss('CrossEntropyLoss')
413-
model.set_optimizer('Adam', lr=1e-4)
414-
415-
# Megatron 后端暂不支持 LR 调度器
416-
if not use_megatron:
417-
model.set_lr_scheduler('LinearLR')
409+
model.set_optimizer('AdamW', lr=1e-4)
410+
model.set_lr_scheduler('LinearLR')
418411

419412
# 恢复训练(如有检查点)
420413
if resume_path:
@@ -473,15 +466,15 @@ init_tinker_client()
473466
from tinker import ServiceClient
474467

475468
# 基座模型
476-
base_model = 'Qwen/Qwen3-30B-A3B-Instruct-2507'
469+
base_model = 'Qwen/Qwen3.5-4B'
477470
base_url = 'http://www.modelscope.cn/twinkle'
478471

479472

480473
def train():
481474
# 准备数据集
482475
dataset = Dataset(dataset_meta=DatasetMeta('ms://swift/self-cognition', data_slice=range(500)))
483476
dataset.set_template('Template', model_id=f'ms://{base_model}', max_length=256)
484-
dataset.map(SelfCognitionProcessor('twinkle模型', 'twinkle团队'), load_from_cache_file=False)
477+
dataset.map(SelfCognitionProcessor('Twinkle模型', 'ModelScope团队'), load_from_cache_file=False)
485478
dataset.encode(batched=True, load_from_cache_file=False)
486479
dataloader = DataLoader(dataset=dataset, batch_size=8)
487480

0 commit comments

Comments
 (0)