diff --git a/README.md b/README.md index 39cb0832..2578718b 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