Skip to content

Commit 1f42143

Browse files
committed
Merge commit '15e21ec577eb98af3c8e4177303ff6efe1aa8a2c' into release/1.5
* commit '15e21ec577eb98af3c8e4177303ff6efe1aa8a2c': (25 commits) Fix ui (#335) Support xverse-13b-256k (#332) Feat/update course 0120 (#331) fix doc (#330) Update doc (#329) fix lazy load (#328) Fix video tag (#327) Add video of web-ui (#326) fix freeze parameters bug (#325) Add courses (#324) fix ui bugs (#322) fix vllm env bug (#321) Support internlm2 (#320) Fix cogagent image loading (#318) update yuan-janus-2b-instruct sh (#317) Fix hf compatibility and support yuan (#316) add examples text to image (#304) Update deepseek moe (#314) fix share (#313) Fix modules to save (#312) ...
2 parents e1a6187 + 15e21ec commit 1f42143

File tree

209 files changed

+8583
-483
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

209 files changed

+8583
-483
lines changed

README.md

Lines changed: 40 additions & 14 deletions
Large diffs are not rendered by default.

README_CN.md

Lines changed: 42 additions & 14 deletions
Large diffs are not rendered by default.

docs/source/GetStarted/界面训练推理.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,10 @@ swift web-ui
55
```
66

77
开启界面训练和推理。
8+
9+
web-ui没有传入参数,所有可控部分都在界面中。但是有几个环境变量可以使用:
10+
11+
> WEBUI_SHARE=1 控制gradio是否是share状态
12+
> SWIFT_UI_LANG=en/zh 控制web-ui界面语言
13+
> WEBUI_SERVER server_name参数, web-ui host ip,0.0.0.0代表所有ip均可访问,127.0.0.1代表只允许本机访问
14+
> WEBUI_PORT web-ui的端口号
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# LLM人类对齐训练文档
2+
## 目录
3+
- [环境准备](#环境准备)
4+
- [人类对齐训练](#人类对齐训练)
5+
6+
## 环境准备
7+
GPU设备: A10, 3090, V100, A100均可,如果是显存<=24G的GPU最少需要双卡环境。由于人类对齐训练在一张卡上加载两个模型,因此比微调的显存多占用一个推理模型的显存使用量。
8+
```bash
9+
# 设置pip全局镜像
10+
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
11+
# 安装ms-swift
12+
git clone https://github.com/modelscope/swift.git
13+
cd swift
14+
pip install -e .[llm]
15+
16+
# 环境对齐 (如果你运行错误, 可以跑下面的代码, 仓库使用最新环境测试)
17+
pip install -r requirements/framework.txt -U
18+
pip install -r requirements/llm.txt -U
19+
```
20+
21+
## 人类对齐训练
22+
下面的shell脚本运行了一个人类对齐训练。首先需要切换到运行目录:
23+
24+
```shell
25+
cd examples/pytorch/llm
26+
```
27+
28+
运行下面的命令:
29+
30+
```shell
31+
# Experimental environment: 4*A100
32+
# Memory usage: 4 * 20G,双卡device_map * 2ddp
33+
nproc_per_node=2
34+
35+
PYTHONPATH=../../.. \
36+
CUDA_VISIBLE_DEVICES=0,1,2,3 \
37+
torchrun \
38+
--nproc_per_node=$nproc_per_node \
39+
--master_port 29500 \
40+
llm_dpo.py \
41+
--model_type mistral-7b \
42+
--ref_model_type mistral-7b \
43+
--model_revision master \
44+
--sft_type lora \
45+
--tuner_backend swift \
46+
--dtype AUTO \
47+
--output_dir output \
48+
--dataset hh-rlhf \
49+
--train_dataset_sample -1 \
50+
--truncation_strategy truncation_left \
51+
--val_dataset_sample 2000 \
52+
--num_train_epochs 3 \
53+
--max_length 1024 \
54+
--max_prompt_length 512 \
55+
--check_dataset_strategy none \
56+
--lora_rank 8 \
57+
--lora_alpha 32 \
58+
--lora_dropout_p 0.05 \
59+
--lora_target_modules ALL \
60+
--gradient_checkpointing true \
61+
--batch_size 1 \
62+
--weight_decay 0.01 \
63+
--learning_rate 5e-5 \
64+
--gradient_accumulation_steps $(expr 16 / $nproc_per_node) \
65+
--max_grad_norm 1.0 \
66+
--warmup_ratio 0.03 \
67+
--eval_steps 2000 \
68+
--save_steps 2000 \
69+
--save_total_limit 2 \
70+
--logging_steps 10 \
71+
```
72+
73+
### sh脚本
74+
75+
sh脚本可以查看[这里](https://github.com/modelscope/swift/tree/main/examples/pytorch/llm/scripts/dpo)
76+
77+
```bash
78+
# 下面的脚本需要在此目录下执行
79+
cd examples/pytorch/llm
80+
```
81+
82+
**提示**:
83+
84+
- 我们默认在训练时设置`--gradient_checkpointing true`**节约显存**, 这会略微降低训练速度.
85+
- 如果你使用的是**V100**等较老的GPU, 你需要设置`--dtype AUTO`或者`--dtype fp16`, 因为其不支持bf16.
86+
- 如果你的机器是A100等高性能显卡, 且使用的是qwen系列模型, 推荐你安装[**flash-attn**](https://github.com/Dao-AILab/flash-attention), 这将会加快训练和推理的速度以及显存占用(A10, 3090, V100等显卡不支持flash-attn进行训练). 支持flash-attn的模型可以查看[LLM支持的模型](./支持的模型和数据集.md#模型)
87+
- 如果你需要断网进行训练, 请使用`--model_cache_dir`和设置`--check_model_is_latest false`. 具体参数含义请查看[命令行参数](./命令行参数.md).
88+
- 如果你想在训练时, 将权重push到ModelScope Hub中, 你需要设置`--push_to_hub true`.
89+
90+
```bash
91+
# dpo训练 mistral-7b max_length=1024,bs=1
92+
# 推荐的实验环境: V100, A10, 3090,2卡4卡或8卡
93+
bash scripts/dpo/lora_ddp_mp/dpo.sh
94+
bash scripts/dpo/lora_ddp_mp/infer.sh
95+
```
96+
97+
由于DPO训练后会得到一个完整模型或者adapter的weights,因此LoRA合并、推理的步骤和微调步骤相同,因此请参考[微调文档](./LLM微调文档.md#merge-lora)对应的步骤。

docs/source/LLM/LLM微调文档.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
## 目录
33
- [环境准备](#环境准备)
44
- [微调](#微调)
5+
- [DPO](#dpo)
56
- [Merge LoRA](#merge-lora)
67
- [推理](#推理)
78
- [Web-UI](#web-ui)
@@ -33,6 +34,8 @@ pip install -r requirements/llm.txt -U
3334
```
3435

3536
## 微调
37+
如果你要使用界面的方式进行微调与推理, 可以查看[界面训练与推理文档](https://github.com/modelscope/swift/blob/main/docs/source/GetStarted/%E7%95%8C%E9%9D%A2%E8%AE%AD%E7%BB%83%E6%8E%A8%E7%90%86.md).
38+
3639
### 使用python
3740
```python
3841
# Experimental environment: A10, 3090, V100, ...
@@ -215,6 +218,9 @@ bash scripts/qwen_7b_chat/qlora_ddp_ds/sft.sh
215218
bash scripts/qwen_7b_chat/qlora_ddp_ds/infer.sh
216219
```
217220

221+
## DPO
222+
如果你要使用DPO进行人类对齐, 你可以查看[人类对齐微调文档](./LLM人类对齐训练文档.md).
223+
218224
## Merge LoRA
219225
提示: **暂时**不支持bnb和auto_gptq量化模型的merge lora, 这会产生较大的精度损失.
220226
```bash

docs/source/LLM/LLM推理文档.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -413,21 +413,21 @@ CUDA_VISIBLE_DEVICES=0 swift app-ui --model_type qwen-7b-chat
413413
import os
414414
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
415415

416-
from swift.llm import InferArguments, ModelType, app_ui_main
416+
from swift.llm import AppUIArguments, ModelType, app_ui_main
417417

418-
infer_args = InferArguments(model_type=ModelType.qwen_7b_chat)
419-
app_ui_main(infer_args)
418+
app_ui_args = AppUIArguments(model_type=ModelType.qwen_7b_chat)
419+
app_ui_main(app_ui_args)
420420
```
421421

422422
使用bnb量化:
423423
```python
424424
import os
425425
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
426426

427-
from swift.llm import InferArguments, ModelType, app_ui_main
427+
from swift.llm import AppUIArguments, ModelType, app_ui_main
428428

429-
infer_args = InferArguments(model_type=ModelType.qwen_7b_chat, quantization_bit=4)
430-
app_ui_main(infer_args)
429+
app_ui_args = AppUIArguments(model_type=ModelType.qwen_7b_chat, quantization_bit=4)
430+
app_ui_main(app_ui_args)
431431
```
432432

433433
### qwen-7b
@@ -441,10 +441,10 @@ CUDA_VISIBLE_DEVICES=0 swift app-ui --model_type qwen-7b
441441
import os
442442
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
443443

444-
from swift.llm import InferArguments, ModelType, app_ui_main
444+
from swift.llm import AppUIArguments, ModelType, app_ui_main
445445

446-
infer_args = InferArguments(model_type=ModelType.qwen_7b)
447-
app_ui_main(infer_args)
446+
app_ui_args = AppUIArguments(model_type=ModelType.qwen_7b)
447+
app_ui_main(app_ui_args)
448448
```
449449

450450
### 微调后模型

docs/source/LLM/命令行参数.md

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
# 命令行参数
22
## 目录
3-
- [sft 命令行参数](#sft-命令行参数)
4-
- [merge-lora infer app-ui 命令行参数](#merge-lora-infer-app-ui-命令行参数)
5-
- [deploy 命令行参数](#deploy-命令行参数)
3+
- [SFT 参数](#SFT-参数)
4+
- [DPO 参数](#DPO-参数)
5+
- [merge-lora infer 参数](#merge-lora-infer-参数)
6+
- [app-ui 参数](#app-ui-参数)
7+
- [deploy 参数](#deploy-参数)
68

7-
## sft 命令行参数
9+
## SFT 参数
810
- `--model_type`: 表示你选择的模型类型, 默认是`None`. 如果没有指定`model_id_or_path`, 则抛出异常. 如果指定了`model_id_or_path`, 则会根据`model_id_or_path`以及`MODEL_MAPPING`推断`model_type`. `model_type``model_id_or_path`这两个参数不能同时指定. 可以选择的`model_type`可以查看`MODEL_MAPPING.keys()`.
911
- `--model_id_or_path`: 表示模型在ModelScope Hub中的`model_id`, 不区分大小写, 默认为`None`. 如果`--model_id_or_path`未被注册, 则会抛出异常. 你可以使用`model_type`的方式指定模型类型, 也可以通过`model_id_or_path`的方式指定模型类型.
1012
- `--model_revision`: 表示模型在ModelScope Hub中对应`model_id`的版本号, 默认为`None`. `model_revision`指定为`None`, 则使用注册在`MODEL_MAPPING`中的revision. 否则强制使用命令行传入的`model_revision`.
@@ -45,7 +47,7 @@
4547
- `--lora_bias_trainable`: 默认为`'none'`, 可以选择的值: 'none', 'all'. 如果你要将bias全都设置为可训练, 你可以设置为`'all'`.
4648
- `--lora_modules_to_save`: 默认为`[]`. 如果你想要训练embedding, lm_head, 或者layer_norm, 你可以设置此参数, 例如: `--lora_modules_to_save wte ln_1 ln_2 ln_f lm_head`.
4749
- `--lora_dtype`: 默认为`'fp32'`, 指定lora模块的dtype类型. 如果是`AUTO`则跟随原始模块的dtype类型. 你可以选择的值: 'fp16', 'bf16', 'fp32', 'AUTO'.
48-
- `--neftune_alpha`: `NEFTune`添加的噪声系数.
50+
- `--neftune_noise_alpha`: `NEFTune`添加的噪声系数, 可以提升模型在指令微调中的性能, 默认为`None`. 通常可以设置为5, 10, 15. 你可以查看[相关论文](https://arxiv.org/abs/2310.05914).
4951
- `--gradient_checkpointing`: 是否开启gradient checkpointing, 默认为`True`. 该参数可以用于节约显存, 虽然这会略微降低训练速度. 该参数在max_length较大, batch_size较大时作用显著.
5052
- `--deepspeed_config_path`: 用于指定deepspeed的配置文件的路径, 默认为`None`, 即不开启deepspeed. deepspeed可以节约显存. 我们书写了默认的[ZeRO-2的配置文件](https://github.com/modelscope/swift/blob/main/examples/pytorch/llm/ds_config/zero2.json).
5153
- `--batch_size`: 训练时的batch_size, 默认为`1`. 增大batch_size可以增加GPU的利用率, 但不一定会增加训练速度, 因为在一个batch中, 需要对较短的句子按该batch中最长句子的长度进行padding, 从而引入无效的计算量.
@@ -89,11 +91,18 @@
8991
- `--temperature`: 默认为`0.3`. 该参数只有在`predict_with_generate`设置为True的时候才生效.
9092
- `--top_k`: 默认为`20`. 该参数只有在`predict_with_generate`设置为True的时候才生效.
9193
- `--top_p`: 默认为`0.7`. 该参数只有在`predict_with_generate`设置为True的时候才生效.
92-
- `--repetition_penalty`: 默认为`1.05`. 该参数只有在`predict_with_generate`设置为True的时候才生效.
94+
- `--repetition_penalty`: 默认为`1.`. 该参数只有在`predict_with_generate`设置为True的时候才生效.
9395
- `--num_beams`: 默认为`1`. 该参数只有在`predict_with_generate`设置为True的时候才生效.
9496

97+
## DPO 参数
9598

96-
## merge-lora infer app-ui 命令行参数
99+
dpo参数继承了sft参数, 除此之外增加了以下参数:
100+
101+
- `--ref_model_type` 对比模型的类型, 可以选择的`model_type`可以查看`MODEL_MAPPING.keys()`.
102+
- `--max_prompt_length` 最大的提示长度, 该参数会传入DPOTrainer中, 使prompt长度不超过该值的设置, 默认值`1024`.
103+
104+
105+
## merge-lora infer 参数
97106
- `--model_type`: 默认值为`None`, 具体的参数介绍可以在`sft.sh命令行参数`中查看.
98107
- `--model_id_or_path`: 默认值为`None`, 具体的参数介绍可以在`sft.sh命令行参数`中查看. 推荐使用model_type的方式指定.
99108
- `--model_revision`: 默认值为`None`. 具体的参数介绍可以在`sft.sh命令行参数`中查看. 如果`model_id_or_path`为None或者是本地的模型目录, 则该参数失效.
@@ -126,7 +135,7 @@
126135
- `--temperature`: 默认值为`0.3`. 该参数只有在`do_sample`设置为True时才生效. 该参数会在部署参数中作为默认值使用.
127136
- `--top_k`: 默认值为`20`. 该参数只有在`do_sample`设置为True时才生效. 该参数会在部署参数中作为默认值使用.
128137
- `--top_p`: 默认值为`0.7`. 该参数只有在`do_sample`设置为True时才生效. 该参数会在部署参数中作为默认值使用.
129-
- `--repetition_penalty`: 默认值为`1.05`. 该参数会在部署参数中作为默认值使用.
138+
- `--repetition_penalty`: 默认值为`1.`. 该参数会在部署参数中作为默认值使用.
130139
- `--num_beams`: 默认为`1`.
131140
- `--use_flash_attn`: 默认值为`None`, 即为'auto'. 具体的参数介绍可以在`sft.sh命令行参数`中查看.
132141
- `--ignore_args_error`: 默认值为`False`, 具体的参数介绍可以在`sft.sh命令行参数`中查看.
@@ -135,14 +144,23 @@
135144
- `--save_safetensors`: 保存成`safetensors`文件还是`bin`文件. 默认为`True`.
136145
- `--overwrite_generation_config`: 是否将评估所使用的generation_config保存成`generation_config.json`文件, 默认为`None`. 如果指定了`ckpt_dir`, 则设置为`True`, 否则设置为`False`. 训练时保存的generation_config文件将被覆盖.
137146
- `--verbose`: 如果设置为False, 则使用tqdm样式推理. 如果设置为True, 则输出推理的query, response, label. 默认为`None`, 进行自动选择, 即`len(val_dataset) >= 100`时, 设置为False, 否则设置为True. 该参数只有在使用数据集评估时生效.
138-
- `--share`: 传递给gradio的`demo.queue().launch(...)`函数. 该参数只有在使用`app-ui`时才生效.
139147
- `--gpu_memory_utilization`: 初始化vllm引擎`EngineArgs`的参数, 默认为`0.9`. 该参数只有在使用vllm时才生效.
140148
- `--tensor_parallel_size`: 初始化vllm引擎`EngineArgs`的参数, 默认为`1`. 该参数只有在使用vllm时才生效.
141149

142150

143-
## deploy 命令行参数
151+
## app-ui 参数
152+
153+
app-ui参数继承了infer参数, 除此之外增加了以下参数:
154+
155+
- `server_name`: 默认为`'127.0.0.1'`. 传递给gradio的`demo.queue().launch(...)`函数.
156+
- `server_port`: 默认为`7860`. 传递给gradio的`demo.queue().launch(...)`函数.
157+
- `share`: 默认为`False`. 传递给gradio的`demo.queue().launch(...)`函数.
158+
159+
## deploy 参数
160+
161+
deploy参数继承了infer参数, 除此之外增加了以下参数:
162+
144163
- `--host`: 默认为`'127.0.0.1`.
145164
- `--port`: 默认为`8000`.
146165
- `--ssl_keyfile`: 默认为`None`.
147166
- `--ssl_certfile`: 默认为`None`.
148-
- 其他参数继承自infer的命令行参数.

0 commit comments

Comments
 (0)