全量参数说明
模型参数(ModelArguments)
包含模型与分词器加载、初始化相关参数。
| 参数名 | 类型 | 默认值 | 详细说明 |
|---|---|---|---|
| model_name_or_path | str | 无(必填) | 模型的本地路径,必填项,未指定会抛出异常。 |
| model_id | Optional[Literal["gpt_oss", "qwen3", "qwen3_moe", "qwen3_next", "step35", "mamba3", "minimax_m27"]] | None | 模型类型标识,未配置时执行原生transformer模型前向,配置时执行仓库自定义模型前向。新增模型类型需在mindspeed_llm/fsdp2/models/model_registry.py的ModelRegistry类中注册。 |
| init_model_with_meta_device | bool | False | 是否使用meta device初始化模型,启用后可节省模型初始化阶段的显存占用。 |
| trust_remote_code | bool | False | 是否允许加载Hugging Face上自定义建模文件中的模型,用于适配自定义模型架构。 |
| train_from_scratch | bool | False | 是否使用随机权重从头开始训练模型,不加载模型权重。 |
| tokenizer_name_or_path | Optional[str] | None | Tokenizer的路径或名称,与model_name_or_path路径不一致时需要指定。 |
| cache_dir | Optional[str] | None | 模型缓存目录,用于存储从Hugging Face、ModelScope下载的模型。 |
| use_fast_tokenizer | bool | True | 是否使用tokenizers库实现的快速Tokenizer,相比传统Tokenizer分词速度更快。 |
| resize_vocab | bool | False | 是否调整Tokenizer大小及模型对应output_layer/lm_head的维度,用于适配新增token后的词表扩展场景。 |
| split_special_tokens | bool | False | 分词过程中是否拆分特殊token,默认不拆分,保持特殊token的完整性。 |
| add_tokens | Optional[str] | None | 需添加到Tokenizer的非特殊token,多个token用逗号分隔。 |
| add_special_tokens | Optional[str] | None | 需添加到Tokenizer的特殊token,多个token用逗号分隔。 |
| new_special_tokens_config | Optional[str] | None | 特殊token语义初始化的YAML配置文件路径,格式为{'<token>': 'description text'},优先级高于add_special_tokens。 |
| init_special_tokens | Literal["noise_init", "desc_init", "desc_init_w_noise"] | noise_init | 新增特殊token的初始化方式:1. noise_init(默认):基于均值的随机噪声初始化;2. desc_init:基于new_special_tokens_config中描述的语义初始化(需配置该参数);3. desc_init_w_noise:语义初始化+随机噪声。 |
| model_revision | str | main | 指定使用的模型版本,可填写分支名、标签名或commit id。 |
| hf_hub_token | Optional[str] | None | Hugging Face Hub的认证令牌,适用于从Hugging Face下载/上传模型的场景。 |
| ms_hub_token | Optional[str] | None | ModelScope Hub的认证令牌,适用于从ModelScope下载/上传模型的场景。 |
| om_hub_token | Optional[str] | None | Modelers Hub的认证令牌,适用于从Modelers下载/上传模型的场景。 |
| quant_recipe_name | Literal["mxfp8"] | None | 量化策略。 |
| quant_apply_modules | List[str] | ['model.layers.{*}'] | 应用量化的层或模块。 |
| quant_ignored_modules | List[str] | ['*lm_head', '*gate'] | 不应用量化的子模块列表。 |
| quant_converters | List[str] | ["quantize.linear.mx"] | 使用的量化转换器列表。 |
| enable_fsdp_low_precision_all_gather | bool | True | 是否启用低精度通信 |
| fsdp_low_precision_all_gather_mode | Literal["on-demand", "all"] | on-demand | FSDP低精度all-gather,按需聚合前向或反向权重 |
数据参数(DataArguments)
包含数据集加载、预处理及数据格式相关参数。
| 参数名 | 类型 | 默认值 | 详细说明 |
|---|---|---|---|
| template | Optional[str] | None | 构建prompt的模板名称,None表示从tokenizer中解析template。新增template类型需在mindspeed_llm/fsdp2/data/template.py文件中注册,目前支持gpt和qwen3。 |
| dataset | Optional[Union[Dict[str, Any], str]] | None | 训练数据集:微调场景数据集配置支持内联配置和通过dataset_info.json注册两种方式,预训练场景数据集配置直接填写原始数据集路径。具体配置示例参考FSDP2后端训练使用指南,此处提供简单配置示例: |
| eval_dataset | Optional[Union[Dict[str, Any], str]] | None | 评估数据集:填写方式与dataset一致。与val_size互斥,不可同时设置。 |
| dataset_dir | str | ./configs/fsdp2/data | 数据集配置文件所在目录。 |
| cutoff_len | int | 2048 | 分词后输入序列的截断长度,超过该长度的序列会被截断。 |
| train_on_prompt | bool | False | 是否取消prompt部分的掩码,与mask_history不可同时为True。 |
| mask_history | bool | False | 是否掩码对话历史,仅在最后一轮回复上训练;True时对话历史部分不计算损失,与train_on_prompt不可同时为True。 |
| streaming | bool | False | 是否启用数据集流式加载,与max_samples互斥,且val_size需为整数。 |
| buffer_size | int | 16384 | 流式加载时的随机采样缓冲区大小。 |
| mix_strategy | Literal["concat", "interleave_under", "interleave_over"] | concat | 多数据集混合策略:拼接/欠采样/过采样。 |
| interleave_probs | Optional[str] | None | 多数据集交叉采样概率,使用逗号分隔,仅在mix_strategy为interleave_under/interleave_over时生效。 |
| overwrite_cache | bool | False | 是否覆盖已缓存的预处理后数据集。 |
| preprocessing_batch_size | int | 1000 | 数据预处理时每组的样本数量。 |
| preprocessing_num_workers | Optional[int] | None | 数据预处理的进程数。 |
| max_samples | Optional[int] | None | 调试用,用于截断每个数据集的样本数量,与streaming互斥。 |
| eval_num_beams | Optional[int] | None | 评估时model.generate使用的beam数量。 |
| ignore_pad_token_for_loss | bool | True | 损失计算时是否忽略填充标签对应的token。 |
| val_size | float | 0.0 | 验证集大小,整数或0~1的浮点数。需同时指定dataset,与eval_dataset互斥。 |
| eval_on_each_dataset | bool | False | 是否分别在每个数据集上进行评估。 |
| packing | bool | False | 是否启用序列打包,将多个短序列打包为一个长序列。 |
| neat_packing | bool | False | 是否启用无交叉注意力的序列打包,启用后自动设置packing=True。 |
| tool_format | Optional[str] | None | 构建函数调用示例使用的工具格式,用于适配工具调用类任务,统一函数调用的格式规范。 |
| default_system | Optional[str] | None | 覆盖模板中的默认系统提示词,用于自定义系统提示。 |
| enable_thinking | Optional[bool] | True | 是否为推理模型启用思考模式,启用后模型会生成中间思考过程。True表示启用,False表示不启用,None表示不删除原始数据中的cot标签,适用于原始数据为混合类型的情况。 |
| tokenized_path | Optional[str] | None | 保存或加载已分词数据集的路径。路径不存在时保存分词后的数据集;路径存在时加载已分词的数据集。 |
| data_shared_file_system | bool | False | 是否使用共享文件系统存储数据集,适用于分布式训练场景。 |
| data_manager_type | Literal["lf", "mg"] | lf | 数据管理器类型,用于构建不同的数据集管理器,适配不同数据集加载和处理逻辑。lf表示微调数据处理,mg表示预训练。 |
| split | str | 100,0,0 | 训练集、验证集和测试集的划分比例,使用逗号分隔。 |
| create_attention_mask_in_dataloader | Optional[bool] | False | 是否在数据加载器中创建注意力掩码。 |
| no_shared_storage | Optional[bool] | False | 是否设置共享存储。 |
| dataloader_type | Literal["single"] | single | 数据加载器类型,single表示顺序读取。 |
| reset_attention_mask | Optional[bool] | False | 预训练的pack场景,开启后会根据eod位置生成actual_seq_len,传入模型中进行训练,开启reset_attention_mask需要开启append_eod。 |
| append_eod | Optional[bool] | False | 预训练数据处理,在文档的结尾添加EOD标志。 |
并行参数(ParallelArguments)
包含分布式并行策略与显存优化相关参数。
| 参数名 | 类型 | 默认值 | 详细说明 |
|---|---|---|---|
| tp_size | int | 1 | 张量并行(Tensor Parallel)大小,将模型张量按列/行拆分到多张卡。 |
| fsdp_size | int | 1 | 全分片数据并行(FSDP)大小,将模型参数分片存储到多张卡。 |
| recompute | bool | False | 是否启用重计算,启用后通过牺牲部分性能,节省显存占用。 |
| ep_size | int | 1 | 专家并行(Expert Parallel)大小,适用于MoE(混合专家)模型,将不同专家拆分到多张卡。 |
| ep_fsdp_size | int | 1 | 专家并行组内的FSDP大小,在专家并行的基础上,对单个专家的参数进行分片。 |
| cp_size | int | 1 | 长序列并行(Context Parallel)大小,将输入序列的上下文拆分到多张卡。 |
| cp_type | Literal["ulysses","ring"] | ulysses | 长序列并行算法类型,目前仅支持ulysses和ring算法。 |
| fsdp_modules | List[str] | ["model.layers.{}", "model.embed_tokens", "lm_head"] | 启用FSDP的模型层结构,必填项,不可为空列表。 |
| ignored_modules | List[str] | None | 不启用FSDP的模块列表。 |
| reshard_after_forward | bool | True | 前向传播后是否重新分片FSDP主模块的参数。 |
| shard_placement_fn | Optional[str] | None | FSDP主模块的自定义分片放置函数,用于自定义参数分片的分配逻辑。 |
| efsdp_shard_placement_fn | Optional[str] | shard_by_dim_1 | 专家并行组内的FSDP模块分片逻辑。 |
| tp_colwise | List[str] | ["*.q_proj", "*.k_proj", "*.v_proj", "*.gate_proj", "*.up_proj"] | 采用列拆分的张量并行模型层结构。 |
| tp_rowwise | List[str] | ["*.o_proj", "*.down_proj"] | 采用行拆分的张量并行模型层结构。 |
| ep_modules | List[str] | ["model.layers.{*}.mlp.experts"] | 启用专家并行的模型层结构,仅适用于MoE模型。 |
| ep_fsdp_modules | List[str] | ["model.layers.{*}.mlp.experts"] | 专家并行组内启用FSDP的模型层结构。 |
| ep_dispatcher | Literal["eager", "fused", "mc2"] | eager | MoE专家并行的调度策略。 |
| recompute_modules | List[str] | ["model.layers.{*}"] | 启用激活重计算的模型层结构,与recompute=True配合使用。 |
| param_dtype | Literal["bf16", "fp16", "fp32"] | bf16 | FSDP参数存储的数据类型。 |
| reduce_dtype | Literal["bf16", "fp16", "fp32"] | fp32 | FSDP梯度归约的数据类型,默认fp32,确保梯度归约的数值稳定性,避免梯度消失/爆炸。 |
| num_to_forward_prefetch | int | 1 | FSDP前向传播时预取的模块数,用于优化流水线效率。 |
| num_to_backward_prefetch | int | 1 | FSDP反向传播时预取的模块数,用于优化流水线效率。 |
训练参数(TrainingArguments)
包含训练超参、优化器、模型保存与日志相关参数。
| 参数名 | 类型 | 默认值 | 详细说明 |
|---|---|---|---|
| output_dir | str | 无(必填) | 训练结果输出目录,用于保存模型权重、日志、预测结果等,必填项,未指定会抛出异常。 |
| optimizer | Literal["adamw", "muon"] | adamw | 优化器,目前支持AdamW/Muon优化器。 |
| lr | float | 1e-5 | 初始学习率。 |
| weight_decay | float | 0.01 | 权重衰减系数。 |
| adam_beta1 | float | 0.9 | AdamW优化器的beta1参数,控制一阶动量的指数衰减率。 |
| adam_beta2 | float | 0.95 | AdamW优化器的beta2参数,控制二阶动量的指数衰减率。 |
| adam_epsilon | float | 1e-8 | AdamW优化器的epsilon参数。 |
| max_grad_norm | float | 1.0 | 梯度裁剪的最大范数,防止梯度爆炸。 |
| lr_scheduler_type | Literal["cosine", "linear", "constant"] | cosine | 学习率调度器类型:余弦退火/线性衰减/恒定学习率。 |
| warmup_ratio | float | 0.03 | 线性预热占总训练步数的比例。 |
| min_lr | float | 1e-6 | 最小学习率,此参数仅在cosine调度器下生效。 |
| num_train_epochs | float | 3.0 | 总训练轮数,若max_steps>0,该参数会被覆盖。 |
| max_steps | int | -1 | 总训练步数,>0时覆盖num_train_epochs。 |
| gradient_accumulation_steps | int | 1 | 梯度累积步数,将多个批次的梯度累积后再执行反向传播/参数更新。 |
| disable_shuffling | bool | False | 是否禁用训练集洗牌。 |
| seed | int | 42 | 训练开始时设置的随机种子。 |
| save_steps | int | 500 | 每X步保存一次模型权重。 |
| save_total_limit | Optional[int] | 3 | 权重总数限制,超过该数量时删除最早的权重。 |
| resume_from_checkpoint | Optional[str] | None | 恢复训练的权重路径。 |
| logging_steps | int | 1 | 每X步记录一次训练日志。 |
| stage | Literal["pt", "sft"] | sft | 训练阶段:预训练/指令微调。 |
| calculate_per_token_loss | bool | False | 计算交叉熵损失时,是否根据全局批次中的非填充token数量进行缩放。 |
| dataloader_num_workers | int | 0 | 数据加载子进程数,0表示主进程加载数据。 |
| dataloader_prefetch_factor | Optional[int] | None | 每个数据加载子进程预加载的批次数。 |
| dataloader_pin_memory | bool | True | 是否为数据加载器启用内存锁定。 |
| dataloader_persistent_workers | bool | False | 是否保持数据加载子进程存活。 |
| dataloader_drop_last | bool | False | 当数据集大小不能被batch size整除时,是否丢弃最后一个不完整的批次。 |
| per_device_train_batch_size | int | 8 | 每张卡的训练batch size大小。 |
| save_only_model | bool | False | 保存权重时,是否只保存模型参数,而不保存优化器、调度器及随机数状态。 |
| save_async | bool | False | 是否异步保存权重。 |
| save_epochs | int | 1 | 保存权重的间隔轮数。 |
| save_hf_weights | bool | True | 训练完成后,是否保存HuggingFace格式的权重。 |
profiling参数
包含性能分析数据采集相关参数。
| 参数名 | 类型 | 默认值 | 详细说明 |
|---|---|---|---|
| profile | bool | False | 是否开启profiling采集数据。 |
| profile_step_start | int | 0 | 开启采集数据的步骤(包含该步),需大于等于0。 |
| profile_step_end | int | -1 | 结束采集数据的步骤(不包含该步),-1表示采集数据至训练结束。 |
| profile_ranks | List[int] | [-1] | 采集数据的卡号,-1表示采集所有rank的profiling数据。 |
| profile_level | str | level0 | 数据采集水平:level_none/level0/level1/level2,级别越高采集信息越多。 |
| profile_export_type | str | text | profiling结果导出类型:文本格式/数据库格式。 |
| profile_data_simplification | bool | False | 是否启用profiling的数据简化模式。 |
| profile_with_cpu | bool | False | 是否在profiling中采集CPU数据。 |
| profile_with_stack | bool | False | 是否在profiling中采集调用栈信息。 |
| profile_with_memory | bool | False | 是否在profiling中采集内存分配和使用情况。 |
| profile_record_shapes | bool | False | 是否在profiling中采集张量形状信息。 |
| profile_save_path | str | ./profile | profiling数据采集保存路径。 |
推理参数(InferenceArguments)
包含推理相关参数。
| 参数名 | 类型 | 默认值 | 详细说明 |
|---|---|---|---|
| infer_backend | Literal["huggingface"] | "huggingface" | 指定使用的推理引擎后端。目前仅支持 huggingface。 |
| max_new_tokens | int | 512 | 生成文本的最大 token 数量(该限制仅针对生成的回复,不包含输入 prompt 自身的 token 数)。 |
| do_sample | bool | False | 是否使用随机采样进行生成。如果设置为 False,则默认使用贪婪解码(Greedy Decoding)。在 FSDP 多卡推理中,为防止采样导致的多卡输出不一致死锁,通常建议保持默认的 False。 |
优化特性参数(OptimizationArguments)
包含融合算子使能、显存优化特性、性能优化特性相关参数。
| 参数名 | 类型 | 默认值 | 详细说明 |
|---|---|---|---|
| use_fused_rmsnorm | bool | False | 是否使能融合rmsnorm算子。 |
| moe_grouped_gemm | bool | False | 是否使能融合gmm算子。 |
| use_fused_rotary_pos_emb | bool | False | 是否使能融合RoPE算子。 |
| use_flash_attn | bool | False | 是否使能FA算子。 |
| use_triton_gdn | bool | False | 是否使能triton融合算子加速Gated DeltaNet网络计算。 |
| use_flash_gdn | bool | False | 是否使能ascendC融合算子加速Gated DeltaNet网络计算,此参数与use_triton_gdn最多开启一个。 |
| chunk_loss_size | int | None | 每次计算loss时使用的序列长度,分段进行loss计算可以节省显存。 |
| gdn_chunk_size | int | 64 | Gated DeltaNet网络计算时矩阵的分块的数量。 |
| use_triton_rmsnormgated | bool | False | 是否使能triton融合算子加速RMSNorm_gated计算。 |
| fix_router | bool | False | 固定专家分配以均衡负载,仅用于性能调优。 |
megatron参数对照
| 参数类型 | FSDP2参数 | megatron参数 |
|---|---|---|
| ModelArguments | model_name_or_path | --load |
| tokenizer_name_or_path | --tokenizer-name-or-path | |
| DataArguments | dataset | --data-path |
| cutoff_len | --seq-length | |
| preprocessing_num_workers | --workers | |
| packing | --pack | |
| ParallelArguments | tp_size | --tensor-model-parallel-size |
| ep_size | --expert-model-parallel-size | |
| cp_size | --context-parallel-size | |
| cp_type | --context-parallel-algo | |
| recompute | --recompute-granularity | |
| TrainingArguments | per_device_train_batch_size | --micro-batch-size |
| disable_shuffling | --no-shuffle | |
| lr_scheduler_type | --lr-decay-style | |
| warmup_ratio | --lr-warmup-fraction | |
| recompute | --recompute-method | |
| max_steps | --train-iters | |
| save_steps | --save-interval | |
| logging_steps | --log-interval | |
| 卡数*per_device_train_batch_size*gradient_accumulation_steps | --global-batch-size |