全量参数说明

模型参数(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.pyModelRegistry类中注册。
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后端训练使用指南,此处提供简单配置示例:
dataset:
  file_name: "./my_data.json" # 数据文件路径
  formatting: "alpaca" # 数据格式
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