Skip to content

Commit d7aee05

Browse files
committed
update cookbook
1 parent ffdc71f commit d7aee05

File tree

13 files changed

+74
-54
lines changed

13 files changed

+74
-54
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ if __name__ == '__main__':
203203
import os
204204
from tqdm import tqdm
205205
from tinker import types
206-
from twinkle_client import init_tinker_client
206+
from twinkle import init_tinker_client
207207
from twinkle.dataloader import DataLoader
208208
from twinkle.dataset import Dataset, DatasetMeta
209209
from twinkle.preprocessor import SelfCognitionProcessor

README_ZH.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ if __name__ == '__main__':
186186
import os
187187
from tqdm import tqdm
188188
from tinker import types
189-
from twinkle_client import init_tinker_client
189+
from twinkle import init_tinker_client
190190
from twinkle.dataloader import DataLoader
191191
from twinkle.dataset import Dataset, DatasetMeta
192192
from twinkle.preprocessor import SelfCognitionProcessor

cookbook/client/tinker/lora.py

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,23 @@
88

99
# Step 1: Load environment variables from a .env file (e.g., API tokens)
1010
import dotenv
11-
1211
dotenv.load_dotenv('.env')
1312

14-
import os
15-
1613
# Step 2: Initialize Tinker client before importing ServiceClient
17-
from twinkle_client import init_tinker_client
14+
from twinkle import init_tinker_client
1815

1916
init_tinker_client()
2017

2118
# Step 3: Use ServiceClient directly from tinker
2219
from tinker import ServiceClient
2320

2421
service_client = ServiceClient(
25-
base_url='http://www.modelscope.cn/twinkle',
26-
api_key=os.environ.get('MODELSCOPE_TOKEN')
22+
# BASE_URL can be a local server endpoint such as http://localhost:8000, or
23+
# points to a previously deployed remote server, or
24+
# modelscope server such as 'http://www.modelscope.cn/twinkle'
25+
base_url='<BASE_URL>',
26+
# API_KEY can be empty or a meaninful one according to sever configuration
27+
api_key='<API_KEY>'
2728
)
2829

2930
# Step 4: List models available on the server to verify the connection
@@ -40,10 +41,12 @@
4041

4142
# You can resume from either:
4243
# 1. A twinkle path: "twinkle://.../<run_id>/weights/<checkpoint_name>"
43-
# 2. A model id on hub: "<user>/<model_id>"
44+
# 2. A model id on ModelScope hub: "ms://<user>/<model_id>"
45+
# 3. A local path to a checkpoint directory
4446
# Example:
4547
# resume_path = "twinkle://20260131_170251-Qwen_Qwen2_5-0_5B-Instruct-7275126c/weights/pig-latin-lora-epoch-1"
46-
# resume_path = "AlexEz/20260205_163645-Qwen_Qwen2_5-7B-Instruct-385d5c17_pig-latin-lora-epoch-1"
48+
# resume_path = "ms://AlexEz/20260205_163645-Qwen_Qwen2_5-7B-Instruct-385d5c17_pig-latin-lora-epoch-1"
49+
# resume_path = "/path/to/local/checkpoint/directory"
4750
resume_path = ''
4851

4952
print(f'Found {len(response.training_runs)} training runs')
@@ -85,19 +88,7 @@
8588
{
8689
'input': 'pickle jar',
8790
'output': 'ickle-pay ar-jay'
88-
},
89-
{
90-
'input': 'space exploration',
91-
'output': 'ace-spay exploration-way'
92-
},
93-
{
94-
'input': 'rubber duck',
95-
'output': 'ubber-ray uck-day'
96-
},
97-
{
98-
'input': 'coding wizard',
99-
'output': 'oding-cay izard-way'
100-
},
91+
}
10192
]
10293

10394
from modelscope import AutoTokenizer
@@ -181,6 +172,7 @@ def process_example(example: dict, tokenizer) -> types.Datum:
181172

182173
# Step 9: Publish the final checkpoint to ModelScope Hub.
183174
# NOTE: Requires a valid ModelScope token set as api_key when initializing the client.
184-
# The published model name will be: {run_id}_{checkpoint_name}
175+
# The model will be published under the owner of the supplied ModelScope token,
176+
# with model name formatted as: {run_id}_{checkpoint_name}
185177
rest_client.publish_checkpoint_from_tinker_path(save_result.path).result()
186178
print('Published checkpoint')

cookbook/client/tinker/sample.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from twinkle.data_format import Message, Trajectory
1111
from twinkle.template import Template
12-
from twinkle_client import init_tinker_client
12+
from twinkle import init_tinker_client
1313

1414
# Step 1: Initialize Tinker client
1515
init_tinker_client()

cookbook/client/tinker/self_congnition.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import os
1010
from tqdm import tqdm
1111
from tinker import types
12-
from twinkle_client import init_tinker_client
12+
from twinkle import init_tinker_client
1313
from twinkle.data_format import Message, Trajectory
1414
from twinkle.template import Template
1515
from twinkle.dataloader import DataLoader

cookbook/client/tinker/short_math_grpo.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from tinker import types
2525
from typing import List, Tuple
2626

27-
from twinkle_client import init_tinker_client
27+
from twinkle import init_tinker_client
2828
from twinkle import get_logger
2929
from twinkle.advantage import GRPOAdvantage
3030
from twinkle.data_format import Message, Trajectory

docs/source_en/Usage Guide/Server and Client/Tinker-Compatible-Client.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ The Tinker Client is suitable for scenarios with existing Tinker training code.
66

77
```python
88
# Initialize Tinker client before importing ServiceClient
9-
from twinkle_client import init_tinker_client
9+
from twinkle import init_tinker_client
1010

1111
init_tinker_client()
1212

@@ -41,7 +41,7 @@ import dotenv
4141
dotenv.load_dotenv('.env')
4242

4343
# Step 1: Initialize Tinker client before importing ServiceClient
44-
from twinkle_client import init_tinker_client
44+
from twinkle import init_tinker_client
4545
init_tinker_client()
4646

4747
from tinker import types, ServiceClient
@@ -139,7 +139,7 @@ Tinker compatible mode can also leverage Twinkle's dataset components to simplif
139139
```python
140140
from tqdm import tqdm
141141
from tinker import types
142-
from twinkle_client import init_tinker_client
142+
from twinkle import init_tinker_client
143143
from twinkle.dataloader import DataLoader
144144
from twinkle.dataset import Dataset, DatasetMeta
145145
from twinkle.preprocessor import SelfCognitionProcessor
@@ -216,7 +216,7 @@ You can also load saved checkpoints for inference:
216216
import os
217217
from tinker import types
218218
from modelscope import AutoTokenizer
219-
from twinkle_client import init_tinker_client
219+
from twinkle import init_tinker_client
220220

221221
# Initialize Tinker client before importing ServiceClient
222222
init_tinker_client()

docs/source_zh/使用指引/服务端和客户端/Tinker兼容客户端.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Tinker Client 适用于已有 Tinker 训练代码的场景。通过 `init_tinker
66

77
```python
88
# 在导入 ServiceClient 之前,先初始化 Tinker 客户端
9-
from twinkle_client import init_tinker_client
9+
from twinkle import init_tinker_client
1010

1111
init_tinker_client()
1212

@@ -41,7 +41,7 @@ import dotenv
4141
dotenv.load_dotenv('.env')
4242

4343
# Step 1: 在导入 ServiceClient 之前,先初始化 Tinker 客户端
44-
from twinkle_client import init_tinker_client
44+
from twinkle import init_tinker_client
4545
init_tinker_client()
4646

4747
from tinker import types, ServiceClient
@@ -139,7 +139,7 @@ Tinker 兼容模式也可以利用 Twinkle 的数据集组件来简化数据准
139139
```python
140140
from tqdm import tqdm
141141
from tinker import types
142-
from twinkle_client import init_tinker_client
142+
from twinkle import init_tinker_client
143143
from twinkle.dataloader import DataLoader
144144
from twinkle.dataset import Dataset, DatasetMeta
145145
from twinkle.preprocessor import SelfCognitionProcessor
@@ -216,7 +216,7 @@ for i, seq in enumerate(result.sequences):
216216
import os
217217
from tinker import types
218218
from modelscope import AutoTokenizer
219-
from twinkle_client import init_tinker_client
219+
from twinkle import init_tinker_client
220220

221221
# 在导入 ServiceClient 之前,先初始化 Tinker 客户端
222222
init_tinker_client()

src/twinkle/__init__.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
from .utils.import_utils import _LazyModule # noqa
55

66
if TYPE_CHECKING:
7+
from twinkle_client import init_tinker_client, init_twinkle_client
78
from .infra import get_device_placement, initialize, is_master, remote_class, remote_function
89
from .utils import (GPU, NPU, DeviceGroup, DeviceMesh, Platform, Plugin, check_unsafe, exists, find_free_port,
910
find_node_ip, framework_util, get_logger, requires, torch_util, trust_remote_code)
1011
from .version import __release_datetime__, __version__
11-
1212
else:
1313
_import_structure = {
1414
'version': ['__release_datetime__', '__version__'],
@@ -21,10 +21,15 @@
2121

2222
import sys
2323

24+
from twinkle_client import init_tinker_client, init_twinkle_client
25+
2426
sys.modules[__name__] = _LazyModule(
2527
__name__,
2628
globals()['__file__'],
2729
_import_structure,
2830
module_spec=__spec__, # noqa
29-
extra_objects={},
31+
extra_objects={
32+
'init_tinker_client': init_tinker_client,
33+
'init_twinkle_client': init_twinkle_client
34+
},
3035
)

src/twinkle/model/megatron/megatron.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -880,9 +880,12 @@ def load(self, name: str, output_dir: Optional[str] = None, **kwargs):
880880
"""
881881
resume = kwargs.pop('load_optimizer', False)
882882
if output_dir is None and not resume:
883-
# Load from hub
884-
token = kwargs.pop('token', None)
885-
checkpoint_dir = HubOperation.download_model(name, token=token)
883+
if os.path.exists(name):
884+
checkpoint_dir = name
885+
else:
886+
# load from hub
887+
token = kwargs.pop('token', None)
888+
checkpoint_dir = HubOperation.download_model(name, token=token)
886889
else:
887890
if output_dir is None:
888891
output_dir = 'output'

0 commit comments

Comments
 (0)