From fd35e5cafbaaac3c5603c9f4ec53873113e2fda3 Mon Sep 17 00:00:00 2001 From: Yingda Chen Date: Fri, 13 Feb 2026 19:09:02 +0800 Subject: [PATCH 1/3] add contrbutors --- README.md | 15 ++++++++++----- README_ZH.md | 9 ++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 32d948cc..1b5b4383 100644 --- a/README.md +++ b/README.md @@ -355,11 +355,16 @@ foundation for building customizable, enterprise-grade training services. | -------------- | -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ------------------- | | Patch | [qwen3_moe_transformers4_patch](https://www.modelscope.cn/models/twinkle-kit/qwen3_moe_transformers4_patch) | Fixes Qwen3 MoE model hang issue during FSDP2 training, effective for transformers==4.x | ModelScope Official | -## Acknowledgements +## Contributions -This project is maintained and supported by multiple teams under Workshop: +Twinkle✨ is a collaborative initiative put together by ModelScope in partnership +with the open-source community, with key contributions from strategic stakeholders +including China Merchants Bank Tech Team. -- ModelScope Team -- China Merchants Bank Tech Team +We are grateful to the open-source community, particularly the projects that inspired us, +including [Transformers](https://github.com/huggingface/transformers), +[MS-SWIFT](https://github.com/modelscope/swift), +[veRL](https://github.com/verl-project/verl), [Tinker](https://github.com/thinking-machines-lab/tinker), and many others. -Twinkle is built on the shoulders of giants, including [Transformers](https://github.com/huggingface/transformers),[MS-SWIFT](https://github.com/modelscope/swift), [veRL](https://github.com/verl-project/verl), and other excellent projects. +We welcome +open contributions via [issues](https://github.com/modelscope/twinkle/issues) and [pull-requests](https://github.com/modelscope/twinkle/pulls). diff --git a/README_ZH.md b/README_ZH.md index 73bf9cac..a927a9f0 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -332,11 +332,10 @@ for epoch in range(3): | -------- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | | Patch | [qwen3_moe_transformers4_patch](https://www.modelscope.cn/models/twinkle-kit/qwen3_moe_transformers4_patch) | 修复 Qwen3 MoE 模型在 FSDP2 训练期间挂起的问题,适用于 transformers==4.x | ModelScope 官方 | -## 致谢 +## 开源贡献 -本项目由 Workshop 组织下的多个团队共同维护和支持: +Twinkle✨ 是由 ModelScope(魔搭)与开源社区共同发起的协作项目。该项目得到了包括**招商银行技术团队**在内的技术伙伴的关键贡献。 -- ModelScope官方团队 -- 招商银行开源技术团队 +我们衷心感谢开源社区,特别是为我们提供灵感的项目,包括 [Transformers](https://github.com/huggingface/transformers)、[MS-SWIFT](https://github.com/modelscope/swift)、[veRL](https://github.com/verl-project/verl) 及 [Tinker](https://github.com/thinking-machines-lab/tinker) 等。 -Twinkle 的构建基于多个优秀的开源项目,包括 [Transformers](https://github.com/huggingface/transformers)、[MS-SWIFT](https://github.com/modelscope/swift)、[veRL](https://github.com/verl-project/verl) 等。 +我们欢迎通过 [Issues](https://github.com/modelscope/twinkle/issues) 和 [Pull Requests](https://github.com/modelscope/twinkle/pulls) 参与开源贡献。 \ No newline at end of file From 8ea76ca6dfab8246365b64c6d65ce0d844d152dc Mon Sep 17 00:00:00 2001 From: Yingda Chen Date: Fri, 13 Feb 2026 19:17:51 +0800 Subject: [PATCH 2/3] fix lint --- README.md | 10 +++++----- README_ZH.md | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1b5b4383..56efbd59 100644 --- a/README.md +++ b/README.md @@ -357,13 +357,13 @@ foundation for building customizable, enterprise-grade training services. ## Contributions -Twinkle✨ is a collaborative initiative put together by ModelScope in partnership -with the open-source community, with key contributions from strategic stakeholders -including China Merchants Bank Tech Team. +Twinkle✨ is a collaborative initiative put together by ModelScope in partnership +with the open-source community, with key contributions from strategic stakeholders +including China Merchants Bank Tech Team. -We are grateful to the open-source community, particularly the projects that inspired us, +We are grateful to the open-source community, particularly the projects that inspired us, including [Transformers](https://github.com/huggingface/transformers), -[MS-SWIFT](https://github.com/modelscope/swift), +[MS-SWIFT](https://github.com/modelscope/swift), [veRL](https://github.com/verl-project/verl), [Tinker](https://github.com/thinking-machines-lab/tinker), and many others. We welcome diff --git a/README_ZH.md b/README_ZH.md index a927a9f0..50d59ecb 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -338,4 +338,4 @@ Twinkle✨ 是由 ModelScope(魔搭)与开源社区共同发起的协作项 我们衷心感谢开源社区,特别是为我们提供灵感的项目,包括 [Transformers](https://github.com/huggingface/transformers)、[MS-SWIFT](https://github.com/modelscope/swift)、[veRL](https://github.com/verl-project/verl) 及 [Tinker](https://github.com/thinking-machines-lab/tinker) 等。 -我们欢迎通过 [Issues](https://github.com/modelscope/twinkle/issues) 和 [Pull Requests](https://github.com/modelscope/twinkle/pulls) 参与开源贡献。 \ No newline at end of file +我们欢迎通过 [Issues](https://github.com/modelscope/twinkle/issues) 和 [Pull Requests](https://github.com/modelscope/twinkle/pulls) 参与开源贡献。 From 09216a794bd79edaefea24a839739a409b99f8a8 Mon Sep 17 00:00:00 2001 From: Yingda Chen Date: Fri, 27 Feb 2026 20:45:15 +0800 Subject: [PATCH 3/3] update readme --- README.md | 12 ++++++++---- src/twinkle/metric/train_metric.py | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 56efbd59..76d2119f 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,9 @@ pip install -e . ## Changelog -- 🎉2026-02-13 Initial version of Twinkle✨ released, including SFT/PT/RL support for text models and serverless training capabilities on [ModelScope](https://modelscope.cn). +- 🎉2026-02-13 Initial version of Twinkle✨ released, including SFT/PT/RL support for text models. +We also made available serverless training capabilities on [ModelScope](https://modelscope.cn) via +Tinker-compatible APIs. ## Training as a Service on ModelScope @@ -105,8 +107,10 @@ We will be adding support for more models as new models are released. The follow supported on Twinkle✨ framework. >[!Note] -> For serverless training service accessed via `base_url=https://www.modelscope.cn/twinkle`, it currently supports -> one training base at a time, and currently it is [Qwen3-30B-A3B-Instruct-2507](https://modelscope.cn/models/Qwen/Qwen3-30B-A3B-Instruct-2507). +> For serverless training service accessed via `base_url=https://www.modelscope.cn/twinkle`, it +> is currently provided via the Tinker-compatible APIs. We will be rolling out services that support +> both Tinker APIs, as well as the full-fledged Twinkle✨ native APIs. The serverless endpoint is backed +> by one training base at a time, and currently it is [Qwen3-30B-A3B-Instruct-2507](https://modelscope.cn/models/Qwen/Qwen3-30B-A3B-Instruct-2507). | Model Type | Model ID on [ModelScope](https://modelscope.cn) | Requires | Megatron Support | HF Model ID | @@ -197,7 +201,7 @@ if __name__ == '__main__': train() ``` -### Using Tinker-Like API +### Access the Serverless Training Services via Tinker-compatible API ```python import os diff --git a/src/twinkle/metric/train_metric.py b/src/twinkle/metric/train_metric.py index f144c837..201ff859 100644 --- a/src/twinkle/metric/train_metric.py +++ b/src/twinkle/metric/train_metric.py @@ -44,7 +44,7 @@ def calculate(self): self.lr = self.lr[0] if isinstance(self.lr, list): for idx, lr in enumerate(self.lr): - results[f'learning rate(param group {idx+1})'] = lr + results[f'learning rate(param group {idx + 1})'] = lr else: results['learning rate'] = self.lr if self.step is not None: @@ -54,7 +54,7 @@ def calculate(self): if interval < 60: results['total time elapse'] = f'{(time.time() - self.start_time):.0f} seconds' else: - results['total time elapse'] = f'{(time.time() - self.start_time)/60:.1f} minutes' + results['total time elapse'] = f'{(time.time() - self.start_time) / 60:.1f} minutes' results['speed'] = f'{speed:.2f} iters/s' self.reset() return results