Skip to content

Commit 2802944

Browse files
authored
update docs (#3015)
1 parent fe2ef01 commit 2802944

File tree

16 files changed

+600
-365
lines changed

16 files changed

+600
-365
lines changed

docs/source/Customization/自定义数据集.md

Lines changed: 87 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
# 自定义数据集
22

3-
ms-swift的标准格式数据集可接受的keys包括: 'messages'、'rejected_response'、'label'、'images'、'videos'、'audios'、'tools'和'objects'。其中'messages'是必需的key,'rejected_response'用于DPO等RLHF训练,'label'用于KTO训练,'images'、'videos'、'audios'用于存储多模态数据的路径或者url,'tools' 用于Agent任务,'objects'用于grounding任务。
3+
自定义数据集的接入方法有三种,对预处理函数的控制能力逐渐加强,但接入难度逐步增加。例如,方案一最为方便,但对预处理函数的控制能力最弱,需要预先对数据集进行转换,传入特定格式的数据集:
4+
1. 【推荐】直接使用命令行传参的方式接入,即`--dataset <dataset_path1> <dataset_path2>`。这将使用AutoPreprocessor将数据集转换为标准格式(支持4种数据集格式,具体查看下面对AutoPreprocessor的介绍)。你可以使用`--columns`进行列名转换。支持传入csv、json、jsonl、txt、文件夹(例如git clone开源数据集)。该方案不需要修改dataset_info.json,适合刚接触ms-swift的用户,下面两种方案适合对ms-swift进行拓展的开发者。
5+
2. 添加数据集到`dataset_info.json`中,可以参考ms-swift内置的[dataset_info.json](https://github.com/modelscope/ms-swift/blob/main/swift/llm/dataset/data/dataset_info.json)。该方案也将使用AutoPreprocessor将数据集转换为标准格式。dataset_info.json为数据集元信息的list,每一项元信息必填ms_dataset_id/hf_dataset_id/dataset_path中的一项,通过`columns`字段进行列名转换。添加到`dataset_info.json`或者注册的数据集在运行[run_dataset_info.py](https://github.com/modelscope/ms-swift/blob/main/scripts/utils/run_dataset_info.py)时将自动产生[支持的数据集文档](https://swift.readthedocs.io/zh-cn/latest/Instruction/%E6%94%AF%E6%8C%81%E7%9A%84%E6%A8%A1%E5%9E%8B%E5%92%8C%E6%95%B0%E6%8D%AE%E9%9B%86.html)。此外,你可以采用外接`dataset_info.json`的方式,使用`--custom_dataset_info xxx.json`解析json文件(方便pip install而非git clone的用户)。
6+
3. 手动注册数据集,具有最灵活的预处理函数定制能力,支持使用函数对数据集进行预处理,但难度较高。可以参考[内置数据集](https://github.com/modelscope/ms-swift/blob/main/swift/llm/dataset/dataset/llm.py)或者[examples](https://github.com/modelscope/swift/blob/main/examples/custom)中的样例。你可以通过指定`--custom_register_path xxx.py`解析外置注册内容(方便pip install而非git clone的用户)。
7+
- 方案一和二在实现中借助了方案三,只是注册的过程为自动发生。
48

5-
ms-swift中存在三种核心预处理器:`MessagesPreprocessor``AlpacaPreprocessor``ResponsePreprocessor`。MessagesPreprocessor用于将类messages和sharegpt格式的数据集转换为标准格式,AlpacaPreprocessor则转换alpaca格式的数据集,ResponsePreprocessor则转换类query/response格式的数据集。`AutoPreprocessor`则可以自动选择合适的Preprocessor进行处理。通常情况下`AutoPreprocessor`能覆盖90%以上的情况。
9+
以下将对`AutoPreprocessor`可以处理的数据集格式进行介绍:
10+
11+
ms-swift的标准数据集格式可接受的keys包括: 'messages'、'rejected_response'、'label'、'images'、'videos'、'audios'、'tools'和'objects'。其中'messages'是必需的key,'rejected_response'用于DPO等RLHF训练,'label'用于KTO训练和分类模型训练,'images'、'videos'、'audios'用于存储多模态数据的路径或者url,'tools'用于Agent任务,'objects'用于grounding任务。
12+
13+
ms-swift中存在三种核心预处理器:`MessagesPreprocessor``AlpacaPreprocessor``ResponsePreprocessor`。MessagesPreprocessor用于将类messages和sharegpt格式的数据集转换为标准格式,AlpacaPreprocessor则转换alpaca格式的数据集,ResponsePreprocessor则转换类query/response格式的数据集。`AutoPreprocessor`则自动选择合适的预处理进行处理。
614

715
以下四种格式在`AutoPreprocessor`处理下都会转换成ms-swift标准格式中的messages字段:
816

9-
messages格式:
17+
messages格式(标准格式):
1018
```jsonl
1119
{"messages": [{"role": "system", "content": "<system>"}, {"role": "user", "content": "<query1>"}, {"role": "assistant", "content": "<response1>"}, {"role": "user", "content": "<query2>"}, {"role": "assistant", "content": "<response2>"}]}
1220
```
@@ -26,15 +34,9 @@ query-response格式:
2634
{"system": "<system>", "query": "<query2>", "response": "<response2>", "history": [["<query1>", "<response1>"]]}
2735
```
2836

29-
自定义数据集的接入方法有三种,对预处理函数的控制能力逐渐加强:
30-
1. 【推荐】直接使用`--dataset <dataset_id_or_path>`接入,使用AutoPreprocessor。支持csv、json、jsonl、txt、文件夹。
31-
2. 书写dataset_info.json文件。可以参考ms-swift内置的[dataset_info.json](https://github.com/modelscope/ms-swift/blob/main/swift/llm/dataset/data/dataset_info.json)。其中ms_dataset_id/hf_dataset_id/dataset_path必填其中的一项,通过`columns`字段进行列名转换。格式转换使用AutoPreprocessor。使用`--custom_dataset_info xxx.json`解析json文件。
32-
3. 手动注册数据集,具有最灵活的预处理函数定制能力,但难度较高。可以参考[examples](https://github.com/modelscope/swift/blob/main/examples/custom)中的样例,通过指定`--custom_register_path xxx.py`解析注册内容。
33-
37+
## 标准数据集格式
3438

35-
## 推荐数据集格式
36-
37-
以下给出ms-swift的推荐数据集格式,其中system字段是可选的,默认使用template中定义的`default_system`
39+
以下给出ms-swift的标准数据集格式,其中system字段是可选的,默认使用template中定义的`default_system`。之前介绍的4种数据集格式也可以被AutoPreprocessor处理成标准数据集格式。
3840

3941
### 预训练
4042

@@ -84,7 +86,7 @@ query-response格式:
8486

8587
### 多模态
8688

87-
对于多模态数据集,和上述任务的格式相同。区别在于增加了`images`, `videos`, `audios`几个key,分别代表多模态资源`<image>` `<video>` `<audio>`标签代表了插入图片/视频/音频的位置。下面给出的四条示例分别展示了纯文本,以及包含图像、视频和音频数据的数据格式。
89+
对于多模态数据集,和上述任务的格式相同。区别在于增加了`images`, `videos`, `audios`几个key,分别代表多模态资源的url或者path(推荐使用绝对路径)`<image>` `<video>` `<audio>`标签代表了插入图片/视频/音频的位置,ms-swift支持多图片/视频/音频的情况。下面给出的四条示例分别展示了纯文本,以及包含图像、视频和音频数据的数据格式。
8890

8991
预训练:
9092
```
@@ -101,7 +103,8 @@ query-response格式:
101103
{"messages": [{"role": "user", "content": "<audio>语音说了什么"}, {"role": "assistant", "content": "今天天气真好呀"}], "audios": ["/xxx/x.mp3"]}
102104
{"messages": [{"role": "system", "content": "你是个有用无害的助手"}, {"role": "user", "content": "<image>图片中是什么,<video>视频中是什么"}, {"role": "assistant", "content": "图片中是一个大象,视频中是一只小狗在草地上奔跑"}], "images": ["/xxx/x.jpg"], "videos": ["/xxx/x.mp4"]}
103105
```
104-
RLHF的数据格式可以参考纯文本大模型的格式。
106+
107+
多模态模型的RLHF和序列分类的数据格式可以参考纯文本大模型的格式。
105108

106109
#### grounding
107110

@@ -114,8 +117,8 @@ RLHF的数据格式可以参考纯文本大模型的格式。
114117
{"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "<image>帮我打开谷歌浏览器"}, {"role": "assistant", "content": "Action: click(start_box='<|box_start|>(246,113)<|box_end|>')"}], "images": ["/xxx/x.jpg"]}
115118
```
116119
使用这种类型的数据需要注意:
117-
- 不同模型grounding任务的特殊字符和数据集格式不同
118-
- 不同模型对bbox是否归一化的处理不同。例如:qwen2.5-vl使用绝对坐标,而qwen2-vl、internvl2.5需要对bbox的坐标进行千分位坐标归一化
120+
- 不同模型grounding任务的特殊字符和数据集格式不同
121+
- 不同模型对bbox是否归一化的处理不同。例如:qwen2.5-vl使用绝对坐标,而qwen2-vl、internvl2.5需要对bbox的坐标进行千分位坐标归一化
119122

120123
2. 使用SWIFT的grounding数据格式:
121124

@@ -124,12 +127,11 @@ RLHF的数据格式可以参考纯文本大模型的格式。
124127
{"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "<image>找到图像中的<ref-object>"}, {"role": "assistant", "content": "<bbox><bbox>"}], "images": ["/xxx/x.jpg"], "objects": {"ref": [""], "bbox": [[90.9, 160.8, 135, 212.8], [360.9, 480.8, 495, 532.8]]}}
125128
{"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "<image>帮我打开谷歌浏览器"}, {"role": "assistant", "content": "Action: click(start_box='<bbox>')"}], "images": ["/xxx/x.jpg"], "objects": {"ref": [], "bbox": [[615, 226]]}}
126129
```
127-
128-
该格式比通用格式多了objects字段,该字段包含的字段有:
129-
- ref:用于替换`<ref-object>`
130-
- bbox:用于替换`<bbox>`
131-
- bbox_type: 可选项为'real','norm1'。默认为'real',即bbox为真实bbox值。若是'norm1',则bbox已经归一化为0~1
132-
- image_id: 该参数只有当bbox_type为'real'时生效。代表bbox对应的图片是第几张,用于缩放bbox。索引从0开始,默认全为第0张
130+
该格式将自动转换数据集格式为对应模型的grounding任务格式,且选择对应模型的bbox归一化方式。该格式比通用格式多了objects字段,该字段包含的字段有:
131+
- ref:用于替换`<ref-object>`
132+
- bbox:用于替换`<bbox>`
133+
- bbox_type: 可选项为'real','norm1'。默认为'real',即bbox为真实bbox值。若是'norm1',则bbox已经归一化为0~1。
134+
- image_id: 该参数只有当bbox_type为'real'时生效。代表bbox对应的图片是第几张,用于缩放bbox。索引从0开始,默认全为第0张。
133135

134136
### 文生图格式
135137

@@ -139,4 +141,67 @@ RLHF的数据格式可以参考纯文本大模型的格式。
139141

140142
### Agent格式
141143

142-
Agent格式请参考[Agent文档](../Instruction/智能体的支持.md).
144+
Agent格式请参考[Agent文档](../Instruction/智能体的支持.md)
145+
146+
147+
## dataset_info.json
148+
149+
可以参考ms-swift内置的[dataset_info.json](https://github.com/modelscope/ms-swift/blob/main/swift/llm/dataset/data/dataset_info.json)。该方案使用AutoPreprocessor预处理函数将数据集转换为标准格式。dataset_info.json文件中包含了数据集元信息的list,以下为一些例子:
150+
151+
```json
152+
[
153+
{
154+
"ms_dataset_id": "xxx/xxx"
155+
},
156+
{
157+
"dataset_path": "<dataset_path>"
158+
},
159+
{
160+
"ms_dataset_id": "<dataset_id>",
161+
"subsets": ["v1"],
162+
"split": ["train", "validation"],
163+
"columns": {
164+
"input": "query",
165+
"output": "response"
166+
}
167+
},
168+
{
169+
"ms_dataset_id": "<dataset_id>",
170+
"hf_dataset_id": "<hf_dataset_id>",
171+
"subsets": [{
172+
"subset": "subset1",
173+
"columns": {
174+
"problem": "query",
175+
"content": "response"
176+
}
177+
},
178+
{
179+
"subset": "subset2",
180+
"columns": {
181+
"messages": "_",
182+
"new_messages": "messages"
183+
}
184+
}]
185+
}
186+
]
187+
```
188+
189+
支持以下参数:
190+
- ms_dataset_id: 参考DatasetMeta参数。
191+
- hf_dataset_id: 参考DatasetMeta参数。
192+
- dataset_path: 参考DatasetMeta参数。
193+
- subsets: 参考DatasetMeta参数。
194+
- split: 参考DatasetMeta参数。
195+
- columns: 在数据集进行预处理前,对数据集进行列名转换。
196+
197+
198+
## 数据集注册
199+
200+
register_dataset会在`DATASET_MAPPING`中注册数据集,调用函数`register_dataset(dataset_meta)`即可完成数据集注册,其中dataset_meta将存储模型的元信息。DatasetMeta的参数列表如下:
201+
- ms_dataset_id: ModelScope的dataset_id,默认为None。
202+
- hf_dataset_id: HuggingFace的dataset_id,默认为None。
203+
- dataset_path: dataset的本地路径(推荐使用绝对路径)。
204+
- subsets: 子数据集的名字列表或者`SubsetDataset`对象的列表,默认为`['default']`。(只有dataset_id或者dataset_dir(git clone开源数据集)有子数据集和split的概念)。
205+
- split: 默认为`['train']`
206+
- preprocess_func: 预处理函数或可调用对象,默认为`AutoPreprocessor()`。该预处理函数接口为传入`HfDataset`,并返回满足标准格式的`HfDataset`
207+
- load_function: 默认为`DatasetLoader.load`。若需要自定义载入函数,则该载入函数需返回满足标准格式的`HfDataset`,这将抛弃ms-swift的数据集载入机制,提供给用户最大的自由度。通常该参数不需要进行修改。

docs/source/Customization/自定义模型.md

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,33 @@
22

33
ms-swift内置的模型,你可以直接通过指定model_id或者model_path来使用:`--model <model_id_or_path>`。ms-swift会根据model_id/model_path的后缀和`config.json`文件来判断model_type。每种model_type都有唯一的模型结构、template和加载方式。当然,你也可以手动传入`--model_type``--template`来进行覆盖。ms-swift已支持的model_type和template可以查看[支持的模型与数据集](../Instruction/支持的模型和数据集.md)
44

5-
> [!TIP]
6-
> 在使用`swift sft`通过LoRA技术微调base模型为chat模型时,例如将Llama3.2-1B微调为chat模型,有时需要手动设置模板。通过添加`--template default`参数来避免base模型因未见过对话模板中的特殊字符而无法正常停止的情况。
75
## 模型注册
86

9-
请参考[examples](https://github.com/modelscope/swift/blob/main/examples/custom)中示例代码。你可以通过指定`--custom_register_path xxx.py`对注册的内容进行解析。
7+
自定义模型通常使用模型注册的方式进行,可以参考[内置模型](https://github.com/modelscope/ms-swift/blob/main/swift/llm/model/model/qwen.py)[内置对话模板](https://github.com/modelscope/ms-swift/blob/main/swift/llm/template/template/qwen.py)或者[examples](https://github.com/modelscope/swift/blob/main/examples/custom)的示例代码。你可以通过指定`--custom_register_path xxx.py`解析外置注册的内容(方便pip install而非git clone的用户)。
8+
9+
register_model会在`MODEL_MAPPING`中注册模型,调用函数`register_model(model_meta)`即可完成模型注册,其中model_meta将存储模型的元信息。ModelMeta的参数列表如下:
10+
- model_type: 必填项。模型类型,也是唯一ID。
11+
- model_groups: 必填项。罗列ModelScope/HuggingFace的模型id和模型本地路径。运行[run_model_info.py](https://github.com/modelscope/ms-swift/blob/main/scripts/utils/run_model_info.py)文件将自动产生[支持的模型文档](https://swift.readthedocs.io/zh-cn/latest/Instruction/%E6%94%AF%E6%8C%81%E7%9A%84%E6%A8%A1%E5%9E%8B%E5%92%8C%E6%95%B0%E6%8D%AE%E9%9B%86.html)以及自动根据`--model`后缀匹配model_type。
12+
- template: 必填项。不指定`--template`时的默认template类型。
13+
- get_function: 必填项。模型和tokenizer/processor(多模态模型)的加载函数。LLM通常设置为`get_model_tokenizer_with_flash_attn`即可。
14+
- model_arch: 模型架构。默认为None。多模态模型训练需要设置该参数来确定llm/vit/aligner的前缀。
15+
- architectures: config.json中的architectures项,用于自动匹配模型对应的model_type。默认为`[]`
16+
- additional_saved_files: 全参数训练和merge-lora时需要额外保存的文件。默认为`[]`
17+
- torch_dtype: 模型加载时未传入`torch_dtype`时的默认dtype。默认为None,从config.json中读取。
18+
- is_multimodal: 是否是多模态模型,默认为False。
19+
- ignore_patterns: 从hub端下载文件需要忽略的文件patterns,默认为`[]`
20+
21+
22+
register_template会在`TEMPLATE_MAPPING`中注册对话模板,调用函数`register_template(template_meta)`即可完成对话模板注册,其中template_meta将存储template的元信息。TemplateMeta的参数列表如下:
23+
- template_type: 必填项。对话模板类型,也是唯一ID。
24+
- prefix: 必填项。对话模板的前缀,通常包含system、bos_token等部分,独立于多轮对话而产生的对话模板循环。例如qwen的prefix为`[]`
25+
- prompt: 必填项。表示对话模板中的`{{RESPONSE}}`之前的对话部分。我们使用`{{QUERY}}`代表user询问部分的填充符。例如qwen的prompt为`['<|im_start|>user\n{{QUERY}}<|im_end|>\n<|im_start|>assistant\n']`
26+
- chat_sep: 必填项。多轮对话中每轮的分隔符。若设置为None,则该template不支持多轮对话。例如qwen的chat_sep为`['<|im_end|>\n']`
27+
- suffix: 默认为`[['eos_token_id']]`。对话模板的后缀部分,独立于多轮对话而产生的对话模板循环,通常为eos_token。例如qwen的suffix为`['<|im_end|>']。`
28+
- template_cls: 默认为`Template`。通常在定义多模态模型的template时需要进行自定义,自定义`_encode``_post_encode``_data_collator`函数。
29+
- system_prefix: 默认为None。含system的对话模板前缀。我们使用`{{SYSTEM}}`作为system的填充符。例如qwen的system_prefix为`['<|im_start|>system\n{{SYSTEM}}<|im_end|>\n']`
30+
- 注意:若system为空时,`prefix`可以被`system_prefix`替代,则可以将`prefix`写为含system的前缀,而无需设置`system_prefix`
31+
- 若prefix不含`{{SYSTEM}}`且未设置system_prefix,则该template不支持system。
32+
- default_system: 默认为None。不传入`--system`时使用的默认system。例如qwen的default_system为`'You are a helpful assistant.'`
33+
- stop_words: 默认为`[]`。除了eos_token和`suffix[-1]`的额外停止符。例如qwen的stop_words为`['<|endoftext|>']`
34+
- 注意:推理时,输出的response将会过滤eos_token和`suffix[-1]`,但是会保留额外的stop_words。

docs/source/GetStarted/SWIFT安装.md

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,22 @@ pip install ms-swift==2.*
3636

3737
镜像可以查看[这里](https://modelscope.cn/docs/intro/environment-setup#%E6%9C%80%E6%96%B0%E9%95%9C%E5%83%8F)
3838

39-
你也可以使用[install_all.sh](https://github.com/modelscope/ms-swift/blob/main/requirements/install_all.sh)进行安装
39+
## 运行环境
40+
41+
| | 范围 | 推荐 | 备注 |
42+
| ------ | ----- | ---- | --|
43+
| python | >=3.8 | 3.10 ||
44+
| cuda | | cuda12 |使用cpu、npu、mps则无需安装|
45+
| torch | >=2.0 | ||
46+
| transformers | >=4.33 | 4.48.1 ||
47+
| modelscope | >=1.19 | ||
48+
| peft | >=0.11.0,<0.15.0 | ||
49+
| trl | >=0.13,<0.15 | 0.14.0 |RLHF|
50+
| vllm | >=0.5.1 | 0.6.5 |推理/部署/评测|
51+
| lmdeploy | lmdeploy>=0.5,<0.6.5 | 0.6.4 |推理/部署/评测|
52+
| deepspeed | | 0.14.5 |训练|
53+
54+
更多可选依赖可以参考[这里](https://github.com/modelscope/ms-swift/blob/main/requirements/install_all.sh)
4055

4156
## Notebook环境
4257

docs/source/GetStarted/快速开始.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ swift sft \
5656
--model_name swift-robot
5757
```
5858

59-
训练完成后,使用以下命令对训练后的权重进行推理,这里的`--adapters`替换成训练生成的last checkpoint文件夹. 由于adapters文件夹中包含了训练的参数文件,因此不需要额外指定`--model`, `--system`.
59+
训练完成后,使用以下命令对训练后的权重进行推理,这里的`--adapters`替换成训练生成的last checkpoint文件夹由于adapters文件夹中包含了训练的参数文件,因此不需要额外指定`--model`, `--system`
6060

6161
```shell
6262
# 使用交互式命令行进行推理
@@ -79,7 +79,7 @@ swift infer \
7979
--max_new_tokens 2048
8080
```
8181

82-
> [!TIP]
83-
> 更多例子可以查看:[examples](https://github.com/modelscope/ms-swift/tree/main/examples)
84-
>
85-
> 以python方式进行训练和推理的例子可以查看:[notebook](https://github.com/modelscope/ms-swift/tree/main/examples/notebook)
82+
## 了解更多
83+
84+
- 更多Shell脚本:[https://github.com/modelscope/ms-swift/tree/main/examples](https://github.com/modelscope/ms-swift/tree/main/examples)
85+
- 使用Python:[https://github.com/modelscope/ms-swift/blob/main/examples/notebook/qwen2_5-self-cognition/self-cognition-sft.ipynb](https://github.com/modelscope/ms-swift/blob/main/examples/notebook/qwen2_5-self-cognition/self-cognition-sft.ipynb)

0 commit comments

Comments
 (0)