--🔥model_type
: 表示你选择的模型类型, 默认是None
.model_type
指定了对应模型默认的target_modules
,template_type
等信息. 你可以通过只指定model_type
进行微调. 对应的model_id_or_path
会使用默认的设置, 从ModelScope进行下载, 并使用默认的缓存路径. model_type和model_id_or_path必须指定其中的一个. 可以选择的model_type
可以查看支持的模型. 你可以设置USE_HF
环境变量来控制从HF Hub下载模型和数据集, 参考HuggingFace生态兼容文档.--🔥model_id_or_path
: 表示模型在ModelScope/HuggingFace Hub中的model_id
或者本地路径, 默认为None
. 如果传入的model_id_or_path
已经被注册, 则会根据model_id_or_path
推断出model_type
. 如果未被注册, 则需要同时指定model_type
, e.g.--model_type <model_type> --model_id_or_path <model_id_or_path>
.--model_revision
: 表示模型在ModelScope Hub中对应model_id
的版本号, 默认为None
.model_revision
指定为None
, 则使用注册在MODEL_MAPPING
中的revision. 否则强制使用命令行传入的model_revision
.--local_repo_path
: 部分模型在加载时依赖于github repo. 为了避免git clone
时遇到网络问题, 可以直接使用本地repo. 该参数需要传入本地repo的路径, 默认为None
. 这部分模型包括:- mPLUG-Owl模型:
https://github.com/X-PLUG/mPLUG-Owl
- DeepSeek-VL模型:
https://github.com/deepseek-ai/DeepSeek-VL
- YI-VL模型:
https://github.com/01-ai/Yi
- LLAVA模型:
https://github.com/haotian-liu/LLaVA.git
- mPLUG-Owl模型:
--🔥sft_type
: 表示微调的方式, 默认是'lora'
. 你可以选择的值包括: 'lora', 'full', 'longlora', 'adalora', 'ia3', 'llamapro', 'adapter', 'vera', 'boft', 'fourierft', 'reft'. 如果你要使用qlora, 你需设置--sft_type lora --quantization_bit 4
.--packing
: pack数据集到max-length
, 默认值False
.--full_determinism
: 固定所有的随机性, 默认值False
.--auto_find_batch_size
: 根据显存值自定找到batch_size, 默认值False
.--streaming
: 是否使用流式数据处理, 默认值False
.--freeze_parameters
: 当sft_type指定为'full'时, 将以freeze_parameters为前缀的层进行freeze. 默认为[]
. 例如:--freeze_parameters visual
.--🔥freeze_vit
: 当sft_type指定为'full', 且训练的是多模态模型时, 可以通过将该参数设置为True
来冻结vit的参数. 默认指为False
.--freeze_parameters_ratio
: 当sft_type指定为'full'时, 将模型最底部的参数进行freeze. 指定范围为0. ~ 1., 默认为0.
. 该参数提供了lora与全参数微调的折中方案.--additional_trainable_parameters
: 作为freeze_parameters的补充, 只有在sft_type指定为'full'才允许被使用, 默认为[]
. 例如你如果想训练50%的参数的情况下想额外训练embedding层, 你可以设置--freeze_parameters_ratio 0.5 --additional_trainable_parameters transformer.wte
, 所有以transformer.wte
开头的parameters都会被激活. 你也可以设置--freeze_parameters_ratio 1 --additional_trainable_parameters xxx
来自定义可以训练的层.--tuner_backend
: 表示lora, qlora的后端支持, 默认是'peft'
. 你可以选择的值包括: 'swift', 'peft', 'unsloth'.--🔥template_type
: 表示使用的对话模板的类型, 默认是'AUTO'
, 即根据model_type
查找MODEL_MAPPING
中的template
. 可以选择的template_type
可以查看TEMPLATE_MAPPING.keys()
.--🔥output_dir
: 表示ckpt存储的目录, 默认是'output'
. 我们会在该目录后拼接model_type
和微调版本号. 方便用户对不同模型进行多次对比实验, 而不需要改变output_dir
命令行参数. 如果不需要拼接这些内容, 你需要额外指定参数--add_output_dir_suffix false
.--add_output_dir_suffix
: 默认为True
, 表示会在output_dir
的目录后拼接上model_type
和微调版本号的后缀. 如果要避免此行为, 你可以设置为False
.--ddp_backend
: 表示分布式的后端支持, 默认是None
. 你可以选择的值包括: 'nccl', 'gloo', 'mpi', 'ccl'.--ddp_timeout
: DDP timeout. 默认1800
秒.--seed
: 全局的seed, 默认使用42
. 用于复现训练效果.--🔥resume_from_checkpoint
: 用于断点续训, 默认为None
. 你可以将其设置为checkpoint的路径, 例如:--resume_from_checkpoint output/qwen-7b-chat/vx-xxx/checkpoint-xxx
, 来进行断点续训. 支持调节--resume_only_model
在断点续训时只读取模型文件.--resume_only_model
: 默认为False
, 即为严格的断点续训, 这会读取模型、优化器和lr_scheduler的权重和各个设备存储的随机种子, 并将从上次训练暂停的stpes后继续计数进行训练. 如果设置为True
, 则只读取模型的权重.--dtype
: 基模型载入时的torch_dtype, 默认为'AUTO'
, 即智能选择dtype: 如果机器不支持bf16, 则使用fp16, 如果MODEL_MAPPING
中对应模型有指定torch_dtype, 则使用其对应dtype, 否则使用bf16. 你可以选择的值包括: 'bf16', 'fp16', 'fp32'.--model_kwargs
: 用于传入多模态模型中针对于模型的额外参数, 例如:'{"hd_num": 16}'
. 你可以传入json字符串或者直接传入字典. 默认为None
. 除了使用该参数,你也可以通过环境变量传入, 例如:HD_NUM=16
.--🔥dataset
: 用于选择训练的数据集, 默认为[]
. 可以选择的数据集可以查看支持的数据集. 如果需要使用多个数据集进行训练, 你可以使用','或者' '进行分割, 例如:--dataset alpaca-en,alpaca-zh
or--dataset alpaca-en alpaca-zh
. 支持Modelscope Hub/HuggingFace Hub/本地路径、subsets选择与数据集采样, 每个数据集指定格式如下:[HF or MS::]{dataset_name} or {dataset_id} or {dataset_path}[:subset1/subset2/...][#dataset_sample]
, 最简只需要指定dataset_name、dataset_id或者dataset_path即可. 自定义数据集可以查看数据集的自定义与拓展文档.- 支持MS和HF hub, 以及dataset_sample的支持. e.g. 'MS::alpaca-zh#2000', 'HF::jd-sentiment-zh#2000' (默认使用的hub, 由
USE_UF
环境变量控制, 默认MS). - 对subsets更细粒度的控制: 默认使用注册时指定的subsets(注册时未指定则使用'default'). e.g. 'sharegpt-gpt4'. 如果指定subsets则使用对应子集的数据集. e.g. 'sharegpt-gpt4:default/V3_format#2000'. 这里使用
default
和V3_format
子数据集, 使用'/'进行分隔, 并取2000条. - dataset_id的支持. e.g. 'AI-ModelScope/alpaca-gpt4-data-zh#2000', 'HF::llm-wizard/alpaca-gpt4-data-zh#2000', 'hurner/alpaca-gpt4-data-zh#2000', 'HF::shibing624/alpaca-zh#2000'. 如果dataset_id已经注册,则会使用注册时的预处理函数、subsets、split等. 否则使用
SmartPreprocessor
, 支持5种数据集格式, 并使用'default'的subsets, split设置为'train'. 支持的数据集格式可以查看数据集的自定义与拓展文档. - dataset_path的支持. e.g. '1.jsonl#5000'. (如果是相对路径,则为相对于运行目录的相对路径).
- 支持MS和HF hub, 以及dataset_sample的支持. e.g. 'MS::alpaca-zh#2000', 'HF::jd-sentiment-zh#2000' (默认使用的hub, 由
--val_dataset
: 用于指定单独的验证集, 格式和dataset
参数相同, 默认为[]
. 如果使用本参数, 则dataset_test_ratio
不再生效.--dataset_seed
: 用于指定数据集处理的seed, 默认为None
, 即指定为全局seed
. dataset_seed以random_state形式存在, 不影响全局seed.--dataset_test_ratio
: 用于指定子数据集切分成训练集和验证集的比例, 默认为0.01
. 若设置了--val_dataset
, 则该参数失效.--train_dataset_sample
: 对训练集的采样数, 默认是-1
, 即使用完整的训练集进行训练. 该参数已废弃, 请使用--dataset {dataset_name}#{dataset_sample}
--val_dataset_sample
: 对验证集进行采样, 默认是None
, 自动选取合适数量的数据集数量进行验证. 如果你指定为-1
, 则使用完整的验证集进行验证. 该参数已废弃, 验证集数量由--dataset_test_ratio
或者--val_dataset {dataset_name}#{dataset_sample}
控制.--🔥system
: 对话模板中使用的system, 默认为None
, 即使用模型默认的system. 如果指定为'', 则不使用system.--tools_prompt
: 选择tools字段转化的相应tools system prompt, 可选项为['react_en','react_zh', 'toolbench'], 分别为英文版ReAct格式,中文版ReAct格式和toolbench格式,默认为英文版ReAct格式。如果你想了解更多,可以参考Agent部署最佳实践--🔥max_length
: token的最大长度, 默认为2048
. 可以避免个别过长的数据样本造成OOM的问题. 当指定--truncation_strategy delete
时, 如果某数据样本长度超过max_length, 我们会删除该数据样本. 如果指定--truncation_strategy truncation_left
时, 我们会切除最前面的token:input_ids[-max_length:]
. 如果设置为-1, 则无限制.--truncation_strategy
: 默认是'delete'
表示把超过max_length的句子从数据集中删除.'truncation_left'
表示会将超过文本的左边给切除掉, 这可能会切到special token, 会影响性能, 并不推荐.--check_dataset_strategy
: 默认值为'none'
, 即不做检查. 如果你训练的模型是LLM, 则推荐使用'warning'
作为数据检查的策略. 如果你的训练目标为句子分类等任务, 则建议设置为'none
'.--custom_train_dataset_path
: 默认值为[]
. 该参数已废弃, 请使用--dataset {dataset_path}
.--custom_val_dataset_path
: 默认值为[]
. 该参数已废弃, 该参数已废弃. 请使用--val_dataset {dataset_path}
.--self_cognition_sample
: 自我认知数据集的采样数. 默认为0
. 你该值设置为>0时, 需要同时指定--model_name
,--model_author
. 该参数已废弃, 请使用--dataset self-cognition#{self_cognition_sample}
.--🔥model_name
: 默认为[None, None]
. 如果开启了自我认知数据集的采样(即指定--dataset self-cognition
或者self_cognition_sample>0), 你需要传入两个值, 分别代表模型的中文名和英文名. 例如:--model_name 小黄 'Xiao Huang'
. 如果你想了解更多, 可以查看自我认知微调最佳实践.--🔥model_author
: 默认为[None, None]
. 如果开启了自我认知数据集的采样, 你需要传入两个值, 分别代表作者的中文名和英文名. 例如:--model_author 魔搭 ModelScope
.--quant_method
: 量化方法, 默认为None
. 你可以选择为'bnb', 'hqq', 'eetq'.--quantization_bit
: 用于指定是否进行量化和量化的bit数, 默认为0
, 即不进行量化. 如果要使用4bit qlora, 你需要设置--sft_type lora --quantization_bit 4
--hqq_axis
: hqq量化参数,表示执行分组的所沿的轴,默认为0
, 可选值包括0
,1
--hqq_dynamic_config_path
: hqq本地配置路径,支持对模型不同层配置不同的量化配置,参考--bnb_4bit_comp_dtype
: 在进行4bit量化时, 我们需要在模型的forward和backward时, 将其进行反量化. 该参数用于指定反量化后的torch_dtype. 默认为'AUTO'
, 即与dtype
保持一致. 可选择的值包括: 'fp16', 'bf16', 'fp32'. 当quantization_bit为0时, 该参数无效.--bnb_4bit_quant_type
: 4bit量化时的量化方式, 默认是'nf4'
. 可选择的值包括: 'nf4', 'fp4'. 当quantization_bit为0时, 该参数无效.--bnb_4bit_use_double_quant
: 是否在4bit量化时开启double量化, 默认为True
. 当quantization_bit为0时, 该参数无效.--bnb_4bit_quant_storage
: 默认值为None
. 量化参数的存储类型. 若quantization_bit
设置为0, 则该参数失效.--🔥target_modules
: 指定lora模块, 默认为['DEFAULT']
. 如果target_modules传入'DEFAULT'
or'AUTO'
, 则根据model_type
查找MODEL_MAPPING
中的target_modules
(LLM默认指定为qkv, MLLM默认为llm和projector中所有的linear). 如果传入'ALL'
, 则将所有的Linear层(不含head)指定为lora模块. 如果传入'EMBEDDING'
, 则Embedding层指定为lora模块. 如果内存允许, 建议设置成'ALL'. 当然, 你也可以设置['ALL', 'EMBEDDING']
, 将所有的Linear和embedding层指定为lora模块. 该参数在使用lora/vera/boft/ia3/adalora/fourierft时生效.--target_regex
: 指定lora模块的regex表达式,Optional[str]
类型. 默认为None
, 如果该值传入, 则target_modules不生效.该参数在使用lora/vera/boft/ia3/adalora/fourierft时生效.--🔥lora_rank
: 默认为8
. 只有当sft_type
指定为'lora'时才生效.--🔥lora_alpha
: 默认为32
. 只有当sft_type
指定为'lora'时才生效.--lora_dropout
: 默认为0.05
, 只有当sft_type
指定为'lora'时才生效.--init_lora_weights
: 初始化LoRA weights的方法, 可以指定为true
,false
,guassian
,pissa
,pissa_niter_[number of iters]
, 默认值true
.--lora_bias_trainable
: 默认为'none'
, 可以选择的值: 'none', 'all'. 如果你要将bias全都设置为可训练, 你可以设置为'all'
.--modules_to_save
: 默认为[]
. 如果你想要训练embedding, lm_head, 或者layer_norm, 你可以设置此参数, 例如:--modules_to_save EMBEDDING LN lm_head
. 如果传入'EMBEDDING'
, 则将Embedding层添加到modules_to_save
. 如果传入'LN'
, 则将RMSNorm
和LayerNorm
添加到modules_to_save
.该参数在使用lora/vera/boft/ia3/adalora/fourierft时生效.--lora_dtype
: 默认为'AUTO'
, 指定lora模块的dtype类型. 如果是AUTO
则跟随原始模块的dtype类型. 你可以选择的值: 'fp16', 'bf16', 'fp32', 'AUTO'.--use_dora
: 默认为False
, 是否使用DoRA
.--use_rslora
: 默认为False
, 是否使用RS-LoRA
.--neftune_noise_alpha
:NEFTune
添加的噪声系数, 可以提升模型在指令微调中的性能, 默认为None
. 通常可以设置为5, 10, 15. 你可以查看相关论文.--neftune_backend
:NEFTune
的backend,支持transformers
和swift
两种, 默认使用transformers
库.--🔥gradient_checkpointing
: 是否开启gradient checkpointing, 默认为True
. 该参数可以用于节约显存, 虽然这会略微降低训练速度. 该参数在max_length较大, batch_size较大时作用显著.--🔥deepspeed
: 用于指定deepspeed的配置文件的路径或者直接传入json格式的配置信息, 默认为None
, 即不开启deepspeed. deepspeed可以节约显存. 我们书写了默认的ZeRO-2配置文件, ZeRO-3配置文件, ZeRO-2 Offload配置文件和ZeRO-3 Offload配置文件. 你只需要指定'default-zero2', 'default-zero3', 'zero2-offload', 'zero3-offload'即可.--batch_size
: 训练时的batch_size, 默认为1
. 增大batch_size可以增加GPU的利用率, 但不一定会增加训练速度, 因为在一个batch中, 需要对较短的句子按该batch中最长句子的长度进行padding, 从而引入无效的计算量.--eval_batch_size
: 评估时的batch_size, 默认为None
, 即当predict_with_generate
为True时, 设置为1, 为False时, 设置为batch_size
.--🔥num_train_epochs
: 训练的epoch数, 默认为1
. 如果max_steps >= 0
, 则覆盖num_train_epochs
. 你可以设置为3, 5, 10等.--max_steps
: 训练的max_steps数, 默认为-1
. 如果max_steps >= 0
, 则覆盖num_train_epochs
.--optim
: 默认为'adamw_torch'
.--adam_beta1
: 默认为0.9
.--adam_beta2
: 默认为0.95
.--adam_epsilon
: 默认为1e-8
.--🔥learning_rate
: 默认值为None
, 即如果sft_type
为lora, 则设置为1e-4, 如果sft_type
为full, 则设置为1e-5.--weight_decay
: 默认值为0.1
.--🔥gradient_accumulation_steps
: 梯度累加, 默认值为None
, 设置为math.ceil(16 / self.batch_size / world_size)
.total_batch_size = batch_size * gradient_accumulation_steps * world_size
.--max_grad_norm
: 梯度裁剪, 默认值为1
.--predict_with_generate
: 评估时是否使用生成式的方式, 默认为False
. 如果设置为False, 则使用loss
进行评估. 如果设置为True, 则使用ROUGE-L
等指标进行评估. 使用生成式评估耗费的时间很长, 请谨慎选择.--lr_scheduler_type
: 默认值为'cosine'
, 你可以选择: 'linear', 'cosine', 'constant'等.--warmup_ratio
: warmup占用总的训练steps的比例, 默认为0.05
.--warmup_steps
: warmup的步数, 默认为0
. 如果设置warmup_steps>0
, 则覆盖warmup_ratio.--🔥eval_steps
: 每训练多少steps进行评估, 默认为50
.--save_steps
: 每训练多少个steps进行保存, 默认为None
, 即设置为eval_steps
.--🔥save_only_model
: 是否只保存模型参数, 而不存储断点续训所需的中间状态, 默认为False
.--save_total_limit
: 保存的checkpoint的数量, 默认为2
, 即保存best和last的checkpoint. 如果设置为-1, 则保存所有的checkpoint.--logging_steps
: 每训练多少步打印训练信息(e.g. loss, learning_rate等), 默认为5
.--dataloader_num_workers
: 默认值为None
, 如果是windows机器, 则设置为0
, 否则设置为1
.--push_to_hub
: 是否将训练的checkpoint同步推送到ModelScope Hub中, 默认为False
.--hub_model_id
: 推送到的ModelScope Hub的model_id, 默认为None
, 即设置为f'{model_type}-{sft_type}'
. 你可以将其设置为model_id, 也可以设置为repo_name. 我们会根据hub_token推断出user_name. 推送的远程仓库如果不存在, 则会创建一个新的仓库, 如果存在, 则复用之前的仓库. 该参数只有在push_to_hub
设置为True时才生效.--hub_token
: 推送时需要的SDK token. 可以从https://modelscope.cn/my/myaccesstoken获取, 默认为None
, 即从环境变量MODELSCOPE_API_TOKEN
中获取. 该参数只有在push_to_hub
设置为True时才生效.--hub_private_repo
: 推送的ModelScope Hub中的模型仓库的权限是否设置为私有, 默认为False
. 该参数只有在push_to_hub
设置为True时才生效.--hub_strategy
: 推送策略, 默认为'every_save'
. 可选择的值包括: 'end', 'every_save', 'checkpoint', 'all_checkpoints'. 该参数从transformers透传而来, 只有在push_to_hub
设置为True时才生效.--test_oom_error
: 用于检测训练是否会发生OOM, 默认为False
. 如果设置为True, 则会将训练集按max_length倒序进行排列, 方便OOM的测试. 该参数一般用于测试, 请谨慎设置.--disable_tqdm
: 是否不启用tqdm, 这在nohup
启动脚本时很有用. 默认为False
, 即为启动tqdm.--🔥lazy_tokenize
: 如果设置为False, 则在trainer.train()
之前提前对所有文本进行预处理. 如果设置为True, 则延迟对文本进行编码, 减少预处理的等待并减少内存占用, 这在处理大数据集时很有用. 默认为None
, 即我们会根据template的类型进行智能选择, LLM的模型通常设置为False, 多模态的模型通常设置为True(避免图片和音频加载导致过多的内存占用).--🔥preprocess_num_proc
: 在对数据集预处理时(对文本进行tokenize), 使用多进程. 默认为1
. 与lazy_tokenize
命令行参数一样, 用于解决预处理速度慢的问题. 但该策略无法减少内存占用, 所以如果当数据集巨大时, 建议使用lazy_tokenize
. 推荐设置的值: 4, 8.--🔥use_flash_attn
: 是否使用flash attn, 默认为None
. 安装flash_attn的步骤可以查看https://github.com/Dao-AILab/flash-attention. 支持flash_attn的模型可以查看LLM支持的模型.--ignore_args_error
: 是否忽略命令行传参错误抛出的Error, 默认为False
. 如果需要拷贝代码到notebook中运行, 需要设置成True.--🔥check_model_is_latest
: 检查模型是否是最新, 默认为True
. 如果你需要断网进行训练, 请将该参数设置为False
.--logging_dir
: 默认为None
. 即设置为f'{self.output_dir}/runs'
, 表示tensorboard文件存储路径.--report_to
: 默认为['tensorboard']
. 可以设置--report_to all
来报告所有已安装的集成.--acc_strategy
: 默认为'token'
, 可选择的值包括: 'token', 'sentence'.--save_on_each_node
: 该参数在多机训练时生效, 默认为False
.--save_strategy
: 保存checkpoint的策略, 默认为'steps'
, 可选择的值包括: 'steps', 'epoch', 'no'.--evaluation_strategy
: 交叉验证策略, 默认为'steps'
, 可选择的值包括: 'steps', 'epoch', 'no'.--save_safetensors
: 默认为True
.--include_num_input_tokens_seen
: 默认为False
. 跟踪整个训练过程中观察到的输入tokens的数量.--max_new_tokens
: 默认为2048
. 该参数只有在predict_with_generate
设置为True的时候才生效.--do_sample
: 参考文档: https://huggingface.co/docs/transformers/main_classes/text_generation. 默认为None
, 继承模型的generation_config. 该参数只有在predict_with_generate
设置为True的时候才生效.--temperature
: 默认为None
, 继承模型的generation_config. 该参数只有在predict_with_generate
设置为True的时候才生效.--top_k
: 默认为None
, 继承模型的generation_config. 该参数只有在predict_with_generate
设置为True的时候才生效.--top_p
: 默认为None
, 继承模型的generation_config. 该参数只有在predict_with_generate
设置为True的时候才生效.--repetition_penalty
: 默认为None
, 继承模型的generation_config. 该参数只有在predict_with_generate
设置为True的时候才生效.--num_beams
: 默认为1
. 该参数只有在predict_with_generate
设置为True的时候才生效.--gpu_memory_fraction
: 默认为None
. 该参数旨在指定显卡最大可用显存比例的情况下运行训练,用于极限测试.--train_dataset_mix_ratio
: 默认为0.
. 该参数定义了如何进行数据集打混训练. 指定该参数时, 会混合训练集的train_dataset_mix_ratio
倍数的train_dataset_mix_ds
指定的通用知识数据集. 该参数已废弃, 请使用--dataset
进行数据集混合.--train_dataset_mix_ds
: 默认为['ms-bench']
. 用于防止知识遗忘的通用知识数据集. 该参数已废弃, 请使用--dataset
进行数据集混合.--use_loss_scale
: 默认为False
. 生效时会将Agent的部分字段(Action/Action Input部分)的loss权重加强以强化CoT, 对普通SFT场景没有任何效果.--loss_scale_config_path
选项指定自定义的 loss_scale 配置,适用于在启用 use_loss_scale 时,例如在 Agent 训练中放大 Action 和其他关键 ReAct 字段的损失权重。- 在配置文件中,您可以使用字典格式来设置 loss_scale。每个键代表一个特定字段名,其关联的值设定了该字段及其后续内容的损失缩放倍数。例如,通过设定
"Observation:": [2, 0]
,当response包含xxxx Observation:error
时,Observation:
字段loss将增加到两倍,error
部分的loss则不计入。除了字面匹配,配置也支持正则表达式规则,以实现更灵活的匹配,如模式 '<.*?>':[2.0] 将针对所有尖括号括起来的部分损失增加到两倍。字段匹配与正则匹配所对应的损失缩放倍数,分别由长度为2和1的列表表示。 - 同时支持匹配query对整段response设置loss_scale, 这在处理像Agent-FLAN论文中描述的固定多轮对话查询时极其有用,如果query中包含了预定义键的任一项,相应的响应将采用关联的 loss_scale 值。,你可以参考
swift/llm/agent/agentflan.json
- 默认情况下,我们为 Action:, Action Input:, Thought:, Final Answer:, 和 Observation: 等字段预设了损失缩放值。我们为alpha-umi和Agent-FLAN也提供了默认配置,你可以设置为
alpha-umi
和agent-flan
来使用。默认的配置文件位于swift/llm/agent
下 - 匹配规则的应用优先级,从高到低为:query字段 > response特定字段 > 正则表达式匹配规则。
- 在配置文件中,您可以使用字典格式来设置 loss_scale。每个键代表一个特定字段名,其关联的值设定了该字段及其后续内容的损失缩放倍数。例如,通过设定
--custom_register_path
: 默认为None
. 传入.py
文件, 用于注册模板、模型和数据集.--custom_dataset_info
: 默认为None
, 传入外置dataset_info.json的路径、json字符串或者dict. 用于拓展数据集. 格式参考: https://github.com/modelscope/swift/blob/main/swift/llm/data/dataset_info.json--device_map_config
: 手动配置模型的device_map, 默认为None
. 你可以传入本地路径(.json), json字符串或者dict.--device_max_memory
: 每个设备device_map的最大可用显存,List
, 默认为[]
, 传递的值数量必须和可见显卡数量相等. 比如10GB 10GB
.
--rope_scaling
: 默认值None
, 支持linear
和dynamic
两种scaling方式.当max_length
超过max_position_embeddings
时使用.--rescale_image
: 是否对输入image进行rescale, 值为目标像素数, 例如480000(width * height), 所有大于此像素的图片会按照原始长宽比被缩放到这个值. 注意:并不是所有多模态模型都可以从这个参数中获益。
--fsdp
: 默认值''
, fsdp类型, 详情可以查看该参数原始文档.--fsdp_config
: 默认值None
, fsdp配置文件的路径.
--sequence_parallel_size
: 默认值1
, 大于1时可以拆分一个sequence到多张显卡上以节省显存, 值需要设置为能被DDP数量整除
FourierFt使用target_modules
, target_regex
, modules_to_save
三个参数.
--fourier_n_frequency
: 傅里叶变换的频率数量,int
类型, 类似于LoRA中的r
. 默认值2000
.--fourier_scaling
: W矩阵的缩放值,float
类型, 类似LoRA中的lora_alpha
. 默认值300.0
.
BOFT使用target_modules
, target_regex
, modules_to_save
三个参数.
--boft_block_size
: BOFT块尺寸, 默认值4.--boft_block_num
: BOFT块数量, 不能和boft_block_size
同时使用.--boft_dropout
: boft的dropout值, 默认0.0.
Vera使用target_modules
, target_regex
, modules_to_save
三个参数.
--vera_rank
: Vera Attention的尺寸, 默认值256.--vera_projection_prng_key
: 是否存储Vera映射矩阵, 默认为True.--vera_dropout
: Vera的dropout值, 默认0.0
.--vera_d_initial
: Vera的d矩阵的初始值, 默认0.1
.
--lora_lr_ratio
: 默认值None
, 建议值10~16
, 使用lora时指定该参数即可使用lora+.
--use_galore: bool
: 默认值False, 是否使用GaLore.--galore_target_modules: Union[str, List[str]]
: 默认值None, 不传的情况下对attention和mlp应用GaLore.--galore_rank: int
: 默认值128, GaLore的rank值.--galore_update_proj_gap: int
: 默认值50, 分解矩阵的更新间隔.--galore_scale: int
: 默认值1.0, 矩阵权重系数.--galore_proj_type: str
: 默认值std
, GaLore矩阵分解类型.--galore_optim_per_parameter: bool
: 默认值False, 是否给每个Galore目标Parameter设定一个单独的optimizer.--galore_with_embedding: bool
: 默认值False, 是否对embedding应用GaLore.--galore_quantization
是否使用q-galore. 默认值False
.--galore_proj_quant
: 是否对SVD分解矩阵做量化, 默认False
.--galore_proj_bits
: SVD量化bit数.--galore_proj_group_size
: SVD量化分组数.--galore_cos_threshold
: 投影矩阵更新的cos相似度阈值. 默认值0.4.--galore_gamma_proj
: 在投影矩阵逐渐相似后会拉长更新间隔, 本参数为每次拉长间隔的系数, 默认值2.--galore_queue_size
: 计算投影矩阵相似度的队列长度, 默认值5.
注意:LISA仅支持全参数,即--sft_type full
.
--lisa_activated_layers
: 默认值0
, 代表不使用LISA,改为非0代表需要激活的layers个数,建议设置为2或8.--lisa_step_interval
: 默认值20
, 多少iter切换可反向传播的layers.
unsloth无新增参数,对已有参数进行调节即可支持:
--tuner_backend unsloth
--sft_type full/lora
--quantization_type 4
--llamapro_num_new_blocks
: 默认值4
, 插入的新layers总数.--llamapro_num_groups
: 默认值None
, 分为多少组插入new_blocks, 如果为None
则等于llamapro_num_new_blocks
, 即每个新的layer单独插入原模型.
以下参数sft_type
设置为adalora
时生效. adalora的target_modules
等参数继承于lora的对应参数, 但lora_dtype
参数不生效.
--adalora_target_r
: 默认值8
, adalora的平均rank.--adalora_init_r
: 默认值12
, adalora的初始rank.--adalora_tinit
: 默认值0
, adalora的初始warmup.--adalora_tfinal
: 默认值0
, adalora的final warmup.--adalora_deltaT
: 默认值1
, adalora的step间隔.--adalora_beta1
: 默认值0.85
, adalora的EMA参数.--adalora_beta2
: 默认值0.85
, adalora的EMA参数.--adalora_orth_reg_weight
: 默认值0.5
, adalora的正则化参数.
IA3使用target_modules
, target_regex
, modules_to_save
三个参数.
以下参数sft_type
设置为ia3
时生效.
--ia3_feedforward_modules
: 指定IA3的MLP的Linear名称, 该名称必须在ia3_target_modules
中.
以下参数sft_type
设置为reft
时生效.
- ReFT无法合并tuner
- ReFT和gradient_checkpointing不兼容
- 如果使用DeepSpeed遇到问题请暂时卸载DeepSpeed
--reft_layers
: ReFT应用于哪些层上, 默认为None
, 代表所有层, 可以输入层号的list, 例如--reft_layers 1 2 3 4
--reft_rank
: ReFT矩阵的rank, 默认为4
.--reft_intervention_type
: ReFT的类型, 支持'NoreftIntervention', 'LoreftIntervention', 'ConsreftIntervention', 'LobireftIntervention', 'DireftIntervention', 'NodireftIntervention', 默认为LoreftIntervention
.--reft_args
: ReFT Intervention中的其他支持参数, 以json-string格式输入.
--use_liger
: 使用liger-kernel进行训练.
PT参数继承了sft参数,并修改了部分默认值.
--sft_type
: 默认值为'full'
.--target_modules
: 默认值为'ALL'
.--lazy_tokenize
: 默认值为True
.--eval_steps
: 默认值为500
.
RLHF参数继承了sft参数, 除此之外增加了以下参数:
--🔥rlhf_type
: 选择对齐算法,可选项为'dpo', 'orpo', 'simpo', 'kto', 'cpo', 默认为'dpo'
. 训练脚本请查看文档--ref_model_type
: 选择参考模型, 同model_type参数, 默认为None
, 与训练模型一致。其中cpo
,simpo
,orpo
算法无需选择。通常不需要设置。--ref_model_id_or_path
: 参考模型的本地cache路径, 默认为None
.--ref_model_revision
: 参考模型版本, 同model_revision参数, 默认为None
, 与训练模型一致。通常不需要设置。--beta
: KL正则项系数, 默认为None
, 即simpo
算法默认为2.
, 其他算法默认为0.1
. 具体参考文档--label_smoothing
: 是否使用DPO smoothing, 默认值为0
,一般设置在0~0.5之间.--loss_type
: loss类型, 默认为None
, 如果是dpo, cpo则为sigmoid
, 如果是simpo则为simpo
.
--🔥rpo_alpha
: 控制DPO中加入sft_loss的权重, 默认为1
. 最后的loss为KL_loss + rpo_alpha * sft_loss
.
--cpo_alpha
: CPO/SimPO loss 中 nll loss的系数, 默认为1.
.--simpo_gamma
: SimPO算法中的reward margin项,论文中建议设置为0.5-1.5, 默认为1.
-
--desirable_weight
: KTO算法中对desirable response的loss权重$\lambda_D$ ,默认为1.
-
--undesirable_weight
: KTO论文中对undesirable response的loss权重$\lambda_U$ , 默认为1.
. 分别用$n_d$ 和$n_u$ 表示数据集中desirable examples和undesirable examples的数量,论文中推荐控制$\frac{\lambda_D n_D}{\lambda_Un_U} \in [1,\frac{4}{3}]$
--reward_model_id_or_path
: 奖励模型的本地cache路径, 需要包含value_head的权重(value_head.safetensors
或value_head.bin
)--reward_model_type
: 奖励模型类型, 同model_type参数--reward_model_revision
: 奖励模型版本, 同model_revision参数--local_rollout_forward_batch_size
: 每次数据采样的批量大小, 默认为64--whiten_rewards
: 对奖励进行归一化处理, 默认为False--kl_coef
: KL散度项的系数, 默认为0.05--cliprange
: PPO策略损失函数中的clip范围, 默认为0.2--vf_coef
: 价值损失函数系数, 默认为0.1--cliprange_value
: PPO价值损失函数中的clip范围, 默认为0.2--gamma
: 累计奖励的折扣因子, 默认为1.0--lam
: GAE中的lambda系数, 默认为0.95
--🔥model_type
: 默认值为None
, 具体的参数介绍可以在sft命令行参数
中查看.--🔥model_id_or_path
: 默认值为None
, 具体的参数介绍可以在sft命令行参数
中查看. 推荐使用model_type的方式指定.--model_revision
: 默认值为None
. 具体的参数介绍可以在sft命令行参数
中查看. 如果model_id_or_path
为None或者是本地的模型目录, 则该参数失效.--🔥sft_type
: 默认值为'lora'
, 具体的参数介绍可以在sft命令行参数
中查看.--🔥template_type
: 默认值为'AUTO'
, 具体的参数介绍可以在sft命令行参数
中查看.--🔥infer_backend
: 你可以选择'AUTO', 'vllm', 'pt'. 默认使用'AUTO', 进行智能选择, 即如果没有传入ckpt_dir
或使用全参数微调, 并且安装了vllm且模型支持vllm则使用vllm引擎, 否则使用原生torch进行推理. vllm环境准备可以参考VLLM推理加速与部署, vllm支持的模型可以查看支持的模型.--🔥ckpt_dir
: 必填项, 值为SFT阶段保存的checkpoint路径, e.g.'/path/to/your/vx-xxx/checkpoint-xxx'
.--load_args_from_ckpt_dir
: 是否从ckpt_dir
的sft_args.json
文件中读取模型配置信息. 默认是True
.--🔥load_dataset_config
: 该参数只有在--load_args_from_ckpt_dir true
时才生效. 即是否从ckpt_dir
的sft_args.json
文件中读取数据集相关的配置信息. 默认为False
.--eval_human
: 使用数据集中的验证集部分进行评估还是使用人工的方式评估. 默认值为None
, 进行智能选择, 如果没有任何数据集(含自定义数据集)传入, 则会使用人工评估的方式. 如果有数据集传入, 则会使用数据集方式评估.--device_map_config
: 默认值为None
, 具体的参数介绍可以在sft命令行参数
中查看.--device_max_memory
: 默认值为[]
, 具体的参数介绍可以在sft命令行参数
中查看.--seed
: 默认值为42
, 具体的参数介绍可以在sft命令行参数
中查看.--dtype
: 默认值为'AUTO
, 具体的参数介绍可以在sft命令行参数
中查看.--model_kwargs
: 默认值为'None
, 具体的参数介绍可以在sft命令行参数
中查看.--🔥dataset
: 默认值为[]
, 具体的参数介绍可以在sft命令行参数
中查看.--🔥val_dataset
: 默认为[]
, 具体的参数介绍可以在sft命令行参数
中查看.--dataset_seed
: 默认值为None
, 具体的参数介绍可以在sft命令行参数
中查看.--dataset_test_ratio
: 默认值为0.01
. 具体的参数介绍可以在sft命令行参数
中查看.--🔥show_dataset_sample
: 表示想要评估和展示的验证集的数量, 默认值为-1
.--system
: 默认值为None
. 具体的参数介绍可以在sft命令行参数
中查看.--tools_prompt
: 默认值为react_en
. 具体的参数介绍可以在sft命令行参数
中查看.--max_length
: 默认值为-1
. 具体的参数介绍可以在sft命令行参数
中查看.--truncation_strategy
: 默认是'delete'
. 具体的参数介绍可以在sft命令行参数
中查看.--check_dataset_strategy
: 默认值为'none'
, 具体的参数介绍可以在sft命令行参数
中查看.--custom_train_dataset_path
: 默认值为[]
. 该参数已废弃, 请使用--dataset {dataset_path}
.--custom_val_dataset_path
: 默认值为[]
. 该参数已废弃. 请使用--val_dataset {dataset_path}
.--quantization_bit
: 默认值为0. 具体的参数介绍可以在sft命令行参数
中查看.--quant_method
: 量化方法, 默认为None
. 你可以选择为'bnb', 'hqq', 'eetq'.--hqq_axis
: hqq量化参数,表示执行分组的所沿的轴,默认为0
, 可选值包括0
,1
--hqq_dynamic_config_path
: hqq本地配置路径,支持对模型不同层配置不同的量化配置,参考--bnb_4bit_comp_dtype
: 默认值为'AUTO'
. 具体的参数介绍可以在sft命令行参数
中查看. 若quantization_bit
设置为0, 则该参数失效.--bnb_4bit_quant_type
: 默认值为'nf4'
. 具体的参数介绍可以在sft命令行参数
中查看. 若quantization_bit
设置为0, 则该参数失效.--bnb_4bit_use_double_quant
: 默认值为True
. 具体的参数介绍可以在sft命令行参数
中查看. 若quantization_bit
设置为0, 则该参数失效.--bnb_4bit_quant_storage
: 默认值为True
. 具体的参数介绍可以在sft命令行参数
中查看. 若quantization_bit
设置为0, 则该参数失效.--🔥max_new_tokens
: 生成新token的最大数量, 默认值为2048
. 如果使用部署, 请通过在客户端传入max_tokens
来控制最大生成的tokens数.--🔥do_sample
: 参考文档: https://huggingface.co/docs/transformers/main_classes/text_generation. 默认值为None
, 继承模型的generation_config.--temperature
: 默认值为None
, 继承模型的generation_config. 该参数只有在do_sample
设置为True时才生效. 该参数会在部署参数中作为默认值使用.--top_k
: 默认值为None
, 继承模型的generation_config. 该参数只有在do_sample
设置为True时才生效. 该参数会在部署参数中作为默认值使用.--top_p
: 默认值为None
, 继承模型的generation_config. 该参数只有在do_sample
设置为True时才生效. 该参数会在部署参数中作为默认值使用.--repetition_penalty
: 默认值为None
, 继承模型的generation_config. 该参数会在部署参数中作为默认值使用.--num_beams
: 默认为1
.--use_flash_attn
: 默认值为None
, 即为'auto'. 具体的参数介绍可以在sft命令行参数
中查看.--ignore_args_error
: 默认值为False
, 具体的参数介绍可以在sft命令行参数
中查看.--stream
: 是否使用流式输出, 默认为True
. 该参数只有在使用数据集评估并且verbose为True时才生效.--🔥merge_lora
: 是否将lora权重merge到基模型中, 并保存完整的权重, 默认为False
. 权重会保存在ckpt_dir
的同级目录中, e.g.'/path/to/your/vx-xxx/checkpoint-xxx-merged'
目录下.--merge_device_map
: merge-lora时使用的device_map, 默认为None
, 为减少显存占用, 在仅有merge-lora过程时使用auto
,其他情况默认使用cpu
.--save_safetensors
: 保存成safetensors
文件还是bin
文件. 默认为True
.--overwrite_generation_config
: 是否将评估所使用的generation_config保存成generation_config.json
文件, 默认为False
.--🔥verbose
: 如果设置为False, 则使用tqdm样式推理. 如果设置为True, 则输出推理的query, response, label. 默认为None
, 进行自动选择, 即len(val_dataset) >= 100
时, 设置为False, 否则设置为True. 该参数只有在使用数据集评估时生效.--lora_modules
: 默认为[]
, 输入的格式为'{lora_name}={lora_path}'
, e.g.--lora_modules lora_name1=lora_path1 lora_name2=lora_path2
.ckpt_dir
会以f'default-lora={args.ckpt_dir}'
的形式加入args.lora_modules.--custom_register_path
: 默认为None
. 传入.py
文件, 用于注册模板、模型和数据集.--custom_dataset_info
: 默认为None
, 传入外置dataset_info.json的路径、json字符串或者dict. 用于拓展数据集.--rope_scaling
: 默认值None
, 支持linear
和dynamic
两种scaling方式, 当max_length
超过max_position_embeddings
时使用. 需要同时指定--max_length
参数.
参考文档: https://docs.vllm.ai/en/latest/models/engine_args.html
--🔥gpu_memory_utilization
: 初始化vllm引擎EngineArgs
的参数, 默认为0.9
. 该参数只有在使用vllm时才生效. VLLM推理加速和部署可以查看VLLM推理加速与部署.--🔥tensor_parallel_size
: 初始化vllm引擎EngineArgs
的参数, 默认为1
. 该参数只有在使用vllm时才生效.--max_num_seqs
: 初始化vllm引擎EngineArgs
的参数, 默认为256
. 该参数只有在使用vllm时才生效.--🔥max_model_len
: 覆盖模型的max_model_len, 默认为None
. 该参数只有在使用vllm时才生效.--disable_custom_all_reduce
: 是否禁用自定义的all-reduce kernel, 而回退到NCCL. 默认为True
, 这与vLLM的默认值不同.--enforce_eager
: vllm使用pytorch eager模式还是建立cuda graph. 默认为False
. 设置为True可以节约显存, 但会影响效率.--limit_mm_per_prompt
: 控制vllm使用多图, 默认为None
. 例如传入--limit_mm_per_prompt '{"image": 10, "video": 5}'
.--vllm_enable_lora
: 默认为False
. 是否开启vllm对lora的支持. 具体可以查看VLLM & LoRA.--vllm_max_lora_rank
: 默认为16
. vllm对于lora支持的参数.--lora_modules
: 已介绍.
参考文档: https://lmdeploy.readthedocs.io/en/latest/api/pipeline.html#turbomindengineconfig
--🔥tp
: tensor并行, 用于初始化lmdeploy引擎的参数, 默认值为1
.--cache_max_entry_count
: 初始化lmdeploy引擎的参数, 默认值为0.8
.--quant_policy
: Key-Value Cache量化, 初始化lmdeploy引擎的参数, 默认值为0
, 你可以设置为4, 8.--vision_batch_size
: 初始化lmdeploy引擎的参数, 默认值为1
. 该参数只有在使用多模态模型时生效.
export参数继承了infer参数, 除此之外增加了以下参数:
--to_peft_format
: 默认为False
. 将lora的swift format(--tuner_backend swift
)转成peft format.--🔥merge_lora
: 默认为False
. 该参数已在InferArguments中定义, 不属于新增参数. 是否将lora权重merge到基模型中, 并保存完整的权重. 权重会保存在ckpt_dir
的同级目录中, e.g.'/path/to/your/vx-xxx/checkpoint-xxx-merged'
目录下.--🔥quant_bits
: 量化的bits数. 默认为0
, 即不进行量化. 如果你设置了--quant_method awq
, 你可以设置为4
进行4bits量化. 如果你设置了--quant_method gptq
, 你可以设置为2
,3
,4
,8
进行对应bits的量化. 如果对原始模型进行量化, 权重会保存在f'{args.model_type}-{args.quant_method}-int{args.quant_bits}'
目录中. 如果对微调后模型进行量化, 权重会保存在ckpt_dir
的同级目录中, e.g.f'/path/to/your/vx-xxx/checkpoint-xxx-{args.quant_method}-int{args.quant_bits}'
目录下.--🔥quant_method
: 量化方法, 默认为'awq'
. 你可以选择为'awq', 'gptq', 'bnb'.--🔥dataset
: 该参数已在InferArguments中定义, 在export时含义为量化数据集. 默认为[]
. 更多细节: 包括如何自定义量化数据集, 可以参考LLM量化与导出文档.--quant_n_samples
: 量化参数, 默认为256
. 当设置为--quant_method awq
时, 如果出现量化的时候OOM, 可以适度降低--quant_n_samples
和--quant_seqlen
.--quant_method gptq
通常不会出现量化OOM.--quant_seqlen
: 量化参数, 默认为2048
.--quant_batch_size
: 量化数据集的batch_size,默认为1
.--quant_device_map
: 默认为None
. 你可以指定为'cuda:0', 'auto', 'cpu'等, 表示量化时模型导入的设备.--quant_output_dir
: 默认为None
, 默认的quant_output_dir会被打印在命令行中.--push_to_hub
: 默认为False
. 是否将最后的ckpt_dir
push到ModelScope Hub中. 如果你指定了merge_lora
, 则将推送全量参数; 如果你还指定了quant_bits
, 则将推送量化后的模型.--hub_model_id
: 默认为None
. 推送到的ModelScope Hub的model_id. 如果push_to_hub
设置为True, 该参数必须被设置.--hub_token
: 默认为None
. 具体的参数介绍可以在sft命令行参数
中查看.--hub_private_repo
: 默认为False
. 具体的参数介绍可以在sft命令行参数
中查看.--commit_message
: 默认是'update files'
.--to_ollama
: 转为ollama导出.--ollama_output_dir
: ollama输出目录. 默认存储在当前目录下的模型类型-ollama
文件夹内.
eval参数继承了infer参数,除此之外增加了以下参数:(注意: infer中的generation_config参数将失效, 由evalscope控制.)
--🔥eval_dataset
: 评测的官方数据集, 默认值为空, 代表全量评测, 注意指定了custom_eval_config时本参数不生效. 查看所有支持的评测集.--eval_few_shot
: 每个评测集的子数据集的few-shot个数, 默认为None
, 即使用数据集的默认配置. 本参数暂时废弃--eval_limit
: 每个评测集的子数据集的采样数量, 默认为None
代表全量评测. 可以传入整数, 表示每个数据集的评测数量, 也可以传入string, 如[10:20]
, 代表切片.--name
: 用于区分相同配置评估的结果存储路径. 如:{eval_output_dir}/{name}
, 默认在:eval_outputs/defaults
, 其内部存在以时间命名的文件夹来承载每次评测结果.--eval_url
: OpenAI标准的模型调用接口, 例如http://127.0.0.1:8000/v1
. 如果使用部署的方式评估, 则需要进行设置, 通常不需要设置. 默认为None
.swift eval --eval_url http://127.0.0.1:8000/v1 --eval_is_chat_model true --model_type gpt4 --eval_token xxx
--eval_token
: OpenAI标准的模型调用接口的token, 默认为'EMPTY'
, 代表没有token.--eval_is_chat_model
: 如果eval_url
不为空, 则需要传入本值判断是否为chat
模型, False代表为base
模型. 默认为None
.--custom_eval_config
: 使用自定义数据集进行评测, 需要是一个本地存在的文件路径, 文件格式详见自定义评测集. 默认为None
.--eval_use_cache
: 是否使用已经生成的评测缓存, 使做过的评测不会重新运行而只是重新生成评测结果. 默认False
.--eval_output_dir
: 评测结果输出路径, 默认是当前文件夹下的eval_outputs
路径.--eval_batch_size
: 评测的输入batch_size, 默认是8--eval_nproc
: 并发数, 更大的并发数可以更快评测, 但显存占用也更高, 默认值16. 本参数仅对多模态评测生效.--deploy_timeout
: 评测之前会启动模型部署, 该参数设置部署的等待超时时长, 默认值为1800
, 代表30分钟.
app-ui参数继承了infer参数, 除此之外增加了以下参数:
--host
: 默认为'127.0.0.1'
. 传递给gradio的demo.queue().launch(...)
函数.--port
: 默认为7860
. 传递给gradio的demo.queue().launch(...)
函数.--share
: 默认为False
. 传递给gradio的demo.queue().launch(...)
函数.
deploy参数继承了infer参数, 除此之外增加了以下参数:
--host
: 默认为'0.0.0.0'
.--port
: 默认为8000
.--api_key
: 默认为None
, 即不对请求进行api_key验证.--ssl_keyfile
: 默认为None
.--ssl_certfile
: 默认为None
.--verbose
: 是否对请求内容进行打印, 默认为True
.--log_interval
: 对统计信息进行打印的间隔, 单位为秒. 默认为10
. 如果设置为0
, 表示不打印统计信息.
--🔥host
: 默认为'127.0.0.1'
. 要使其在非本机上可访问, 可设置为'0.0.0.0'.--port
: 默认为7860
.--lang
: 默认为'zh'
.--share
: 默认为False
.