Skip to content

Commit 22af2e6

Browse files
authored
Support vllm max_model_len (#392)
1 parent c755d3a commit 22af2e6

File tree

5 files changed

+35
-31
lines changed

5 files changed

+35
-31
lines changed

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

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@
4848
- `--lora_alpha`: 默认为`32`. 只有当`sft_type`指定为'lora'时才生效.
4949
- `--lora_dropout_p`: 默认为`0.05`, 只有当`sft_type`指定为'lora'时才生效.
5050
- `--lora_bias_trainable`: 默认为`'none'`, 可以选择的值: 'none', 'all'. 如果你要将bias全都设置为可训练, 你可以设置为`'all'`.
51-
- `--modules_to_save`: 默认为`[]`. 如果你想要训练embedding, lm_head, 或者layer_norm, 你可以设置此参数, 例如: `--modules_to_save wte ln_1 ln_2 ln_f lm_head`, 这个参数用于任何adapter的训练中.
51+
- `--lora_modules_to_save`: 默认为`[]`. 如果你想要训练embedding, lm_head, 或者layer_norm, 你可以设置此参数, 例如: `--lora_modules_to_save wte ln_1 ln_2 ln_f lm_head`, 这个参数用于任何adapter的训练中.
5252
- `--lora_dtype`: 默认为`'fp32'`, 指定lora模块的dtype类型. 如果是`AUTO`则跟随原始模块的dtype类型. 你可以选择的值: 'fp16', 'bf16', 'fp32', 'AUTO'.
53-
- `--neftune_noise_alpha`: `NEFTune`添加的噪声系数, 可以提升模型在指令微调中的性能, 默认为`None`. 通常可以设置为5, 10, 15. 你可以查看[相关论文](https://arxiv.org/abs/2310.05914).
53+
- `--neftune_noise_alpha`: `NEFTune`添加的噪声系数, 可以提升模型在指令微调中的性能, 默认为`5`. 通常可以设置为5, 10, 15. 设置成`0`取消噪声扰动. 你可以查看[相关论文](https://arxiv.org/abs/2310.05914).
5454
- `--gradient_checkpointing`: 是否开启gradient checkpointing, 默认为`True`. 该参数可以用于节约显存, 虽然这会略微降低训练速度. 该参数在max_length较大, batch_size较大时作用显著.
5555
- `--deepspeed`: 用于指定deepspeed的配置文件的路径或者直接传入json格式的配置信息, 默认为`None`, 即不开启deepspeed. deepspeed可以节约显存. 我们书写了默认的[ZeRO-2配置文件](https://github.com/modelscope/swift/blob/main/swift/llm/ds_config/zero2.json), [ZeRO-3配置文件](https://github.com/modelscope/swift/blob/main/swift/llm/ds_config/zero3.json). 你只需要指定'default-zero2', 就会使用默认zero2配置文件; 指定'default-zero3', 就会使用默认的zero3配置文件.
5656
- `--batch_size`: 训练时的batch_size, 默认为`1`. 增大batch_size可以增加GPU的利用率, 但不一定会增加训练速度, 因为在一个batch中, 需要对较短的句子按该batch中最长句子的长度进行padding, 从而引入无效的计算量.
@@ -103,24 +103,24 @@
103103

104104
### AdaLoRA微调参数
105105

106-
以下参数`sft_type`设置为`adalora`时生效adalora的`target_modules`等参数继承于lora的对应参数`lora_dtype`参数不生效
106+
以下参数`sft_type`设置为`adalora`时生效. adalora的`target_modules`等参数继承于lora的对应参数, `lora_dtype`参数不生效.
107107

108-
- `--adalora_target_r`: 默认值8, adalora的平均rank
109-
- `--adalora_init_r`: 默认值12, adalora的初始rank
110-
- `--adalora_tinit`: 默认值0, adalora的初始warmup
111-
- `--adalora_tfinal`: 默认值0, adalora的final warmup
112-
- `--adalora_deltaT`: 默认值1, adalora的step间隔
113-
- `--adalora_beta1`: 默认值0.85, adalora的EMA参数
114-
- `--adalora_beta2`: 默认值0.85, adalora的EMA参数
115-
- `--adalora_orth_reg_weight`: 默认值0.5, adalora的正则化参数
108+
- `--adalora_target_r`: 默认值`8`, adalora的平均rank.
109+
- `--adalora_init_r`: 默认值`12`, adalora的初始rank.
110+
- `--adalora_tinit`: 默认值`0`, adalora的初始warmup.
111+
- `--adalora_tfinal`: 默认值`0`, adalora的final warmup.
112+
- `--adalora_deltaT`: 默认值`1`, adalora的step间隔.
113+
- `--adalora_beta1`: 默认值`0.85`, adalora的EMA参数.
114+
- `--adalora_beta2`: 默认值`0.85`, adalora的EMA参数.
115+
- `--adalora_orth_reg_weight`: 默认值`0.5`, adalora的正则化参数.
116116

117117
### IA3微调参数
118118

119-
以下参数`sft_type`设置为`ia3`时生效
119+
以下参数`sft_type`设置为`ia3`时生效.
120120

121-
- `--ia3_target_modules`: 指定IA3目标模块, 默认为`['DEFAULT']`. 如果ia3_target_modules传入`'DEFAULT'` or `'AUTO'`, 则根据`model_type`查找`MODEL_MAPPING`中的`lora_target_modules`(默认指定为qkv). 如果传入`ALL`, 则将所有的Linear层都指定为lora模块(不含head). 注意如果指定为`ALL`时,需要手动设置`ia3_feedforward_modules`参数指定MLP Linear名称。
122-
- `--ia3_feedforward_modules`: 指定IA3的MLP的Linear名称该名称必须在`ia3_target_modules`
123-
- `--modules_to_save`: 即上面参数的modules_to_save, IA3参与训练的额外模块
121+
- `--ia3_target_modules`: 指定IA3目标模块, 默认为`['DEFAULT']`. 具体含义可以参考`lora_target_modules`.
122+
- `--ia3_feedforward_modules`: 指定IA3的MLP的Linear名称, 该名称必须在`ia3_target_modules`.
123+
- `--ia3_modules_to_save`: IA3参与训练的额外模块. 具体含义可以参考`lora_modules_to_save`的含义.
124124

125125
## dpo 参数
126126

@@ -131,7 +131,7 @@ dpo参数继承了sft参数, 除此之外增加了以下参数:
131131
- `--beta`: DPO logits的正则项,默认为0.1.
132132
- `--label_smoothing`: 是否使用DPO smoothing, 默认值为0,一般设置在0~0.5之间.
133133
- `--loss_type`: DPOloss类型, 支持'sigmoid', 'hinge', 'ipo', 'kto_pair', 默认值'sigmoid'.
134-
- `--sft_beta`: 是否在DPO中加入sft loss, 默认为0.1, 支持[0, 1)区间,最后的loss为(1-sft_beta)*KL_loss + sft_beta * sft_loss.
134+
- `--sft_beta`: 是否在DPO中加入sft loss, 默认为0.1, 支持[0, 1)区间,最后的loss为`(1-sft_beta)*KL_loss + sft_beta * sft_loss`.
135135

136136
## merge-lora infer 参数
137137

@@ -178,6 +178,7 @@ dpo参数继承了sft参数, 除此之外增加了以下参数:
178178
- `--verbose`: 如果设置为False, 则使用tqdm样式推理. 如果设置为True, 则输出推理的query, response, label. 默认为`None`, 进行自动选择, 即`len(val_dataset) >= 100`时, 设置为False, 否则设置为True. 该参数只有在使用数据集评估时生效.
179179
- `--gpu_memory_utilization`: 初始化vllm引擎`EngineArgs`的参数, 默认为`0.9`. 该参数只有在使用vllm时才生效.
180180
- `--tensor_parallel_size`: 初始化vllm引擎`EngineArgs`的参数, 默认为`1`. 该参数只有在使用vllm时才生效.
181+
- `--max_model_len`: 覆盖模型的max_model_len, 默认为`None`. 该参数只有在使用vllm时才生效.
181182

182183
## app-ui 参数
183184

swift/llm/tuner.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def prepare_model(model, args: SftArguments):
3535
'lora_alpha': args.lora_alpha,
3636
'lora_dropout': args.lora_dropout_p,
3737
'bias': args.lora_bias_trainable,
38-
'modules_to_save': args.modules_to_save,
38+
'modules_to_save': args.lora_modules_to_save,
3939
'layers_to_transform': args.lora_layers_to_transform,
4040
'layers_pattern': args.lora_layers_pattern,
4141
'rank_pattern': args.lora_rank_pattern,
@@ -105,7 +105,7 @@ def prepare_model(model, args: SftArguments):
105105
task_type='CAUSAL_LM',
106106
target_modules=args.ia3_target_modules,
107107
feedforward_modules=args.ia3_feedforward_modules or [],
108-
modules_to_save=args.modules_to_save,
108+
modules_to_save=args.ia3_modules_to_save,
109109
)
110110
model = Swift.prepare_model(model, ia3_config)
111111
logger.info(f'ia3_config: {ia3_config}')

swift/llm/utils/argument.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -99,17 +99,16 @@ class SftArguments:
9999
lora_alpha: int = 32
100100
lora_dropout_p: float = 0.05
101101
lora_bias_trainable: Literal['none', 'all'] = 'none'
102+
# e.g. ['wte', 'ln_1', 'ln_2', 'ln_f', 'lm_head']
103+
lora_modules_to_save: List[str] = field(default_factory=list)
104+
lora_dtype: Literal['fp16', 'bf16', 'fp32', 'AUTO'] = 'fp32'
102105

103106
use_rslora: bool = False
104-
lora_layers_to_transform: List[int] = None
105-
lora_layers_pattern: List[str] = None
107+
lora_layers_to_transform: Optional[List[int]] = None
108+
lora_layers_pattern: Optional[List[str]] = None
106109
lora_rank_pattern: Dict = field(default_factory=dict)
107110
lora_alpha_pattern: Dict = field(default_factory=dict)
108-
lora_loftq_config: str = field(default_factory=dict)
109-
# e.g. ['wte', 'ln_1', 'ln_2', 'ln_f', 'lm_head']
110-
lora_modules_to_save: List[str] = field(default_factory=list)
111-
modules_to_save: List[str] = field(default_factory=list)
112-
lora_dtype: Literal['fp16', 'bf16', 'fp32', 'AUTO'] = 'fp32'
111+
lora_loftq_config: Dict = field(default_factory=dict)
113112
# adalora
114113
adalora_target_r: int = 8
115114
adalora_init_r: int = 12
@@ -121,9 +120,10 @@ class SftArguments:
121120
adalora_orth_reg_weight: float = 0.5
122121
# ia3
123122
ia3_target_modules: List[str] = field(default_factory=lambda: ['DEFAULT'])
124-
ia3_feedforward_modules: List[str] = None
123+
ia3_feedforward_modules: List[str] = field(default_factory=list)
124+
ia3_modules_to_save: List[str] = field(default_factory=list)
125125

126-
neftune_noise_alpha: Optional[float] = None # e.g. 5, 10, 15
126+
neftune_noise_alpha: float = 5. # e.g. 0, 5, 10, 15
127127
gradient_checkpointing: Optional[bool] = None
128128
# e.g. 'default-zero3', 'default-zero2', 'ds_config/zero2.json'
129129
deepspeed: Optional[str] = None
@@ -259,9 +259,6 @@ def __post_init__(self) -> None:
259259
'If you have already added LoRA on MLP, please ignore this warning.'
260260
)
261261

262-
if not self.modules_to_save:
263-
self.modules_to_save = self.lora_modules_to_save
264-
265262
self.torch_dtype, self.fp16, self.bf16 = select_dtype(self)
266263
world_size = 1
267264
if is_dist():
@@ -458,6 +455,7 @@ class InferArguments:
458455
# vllm
459456
gpu_memory_utilization: float = 0.9
460457
tensor_parallel_size: int = 1
458+
max_model_len: Optional[int] = None
461459
# compatibility. (Deprecated)
462460
show_dataset_sample: int = 10
463461
safe_serialization: Optional[bool] = None
@@ -542,6 +540,8 @@ def __post_init__(self) -> None:
542540
self.stream = False
543541
logger.info('Setting self.stream: False')
544542
self.infer_media_type = template_info.get('infer_media_type', 'none')
543+
if args.neftune_noise_alpha <= 0:
544+
args.neftune_noise_alpha = None
545545

546546
@staticmethod
547547
def check_ckpt_dir_correct(ckpt_dir) -> bool:

swift/llm/utils/vllm_utils.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def get_vllm_engine(model_type: str,
2525
*,
2626
gpu_memory_utilization: float = 0.9,
2727
tensor_parallel_size: int = 1,
28+
max_model_len: Optional[int] = None,
2829
engine_kwargs: Optional[Dict[str, Any]] = None,
2930
use_async: bool = False,
3031
**kwargs) -> LLMEngine:
@@ -70,6 +71,7 @@ def get_vllm_engine(model_type: str,
7071
dtype=dtype_mapping[torch_dtype],
7172
gpu_memory_utilization=gpu_memory_utilization,
7273
tensor_parallel_size=tensor_parallel_size,
74+
max_model_len=max_model_len,
7375
disable_log_stats=disable_log_stats,
7476
**engine_kwargs)
7577
try:
@@ -325,6 +327,7 @@ def prepare_vllm_engine_template(
325327
args.torch_dtype,
326328
gpu_memory_utilization=args.gpu_memory_utilization,
327329
tensor_parallel_size=args.tensor_parallel_size,
330+
max_model_len=args.max_model_len,
328331
use_async=use_async,
329332
**kwargs)
330333
tokenizer = llm_engine.tokenizer

swift/ui/llm_train/llm_train.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ def do_build_ui(cls, base_tab: Type['BaseUI']):
191191
gr.Slider(
192192
elem_id='neftune_noise_alpha',
193193
minimum=0.0,
194-
maximum=10.0,
194+
maximum=20.0,
195195
step=0.5,
196196
scale=4)
197197
with gr.Row():

0 commit comments

Comments
 (0)