配置文件说明
概述
在模型的训练和推理过程中,通常需要配置不同的参数。MindSpore Transformers支持使用YAML文件集中管理和调整可配置项,使模型配置更加结构化,同时提高了可维护性。
YAML文件内容说明
MindSpore Transformers提供的YAML文件中包含不同功能的配置项,下面按照配置项内容对其进行说明。
基础配置
基础配置主要用于指定MindSpore随机种子以及加载权重的相关设置。
参数名称 |
数据类型 |
是否可选 |
默认值 |
取值说明 |
|---|---|---|---|---|
seed |
int |
可选 |
0 |
设置全局随机种子,用于保证实验可复现性。详情可参考 mindspore.set_seed。 |
run_mode |
str |
必选 |
无 |
设置模型的运行模式,可选: |
output_dir |
str |
可选 |
无 |
设置保存日志(log)、权重(checkpoint)、并行策略(strategy)等文件的输出路径。若路径不存在,会尝试自动创建。 |
load_checkpoint |
str |
可选 |
无 |
加载权重的文件或文件夹路径,支持以下三种场景: |
auto_trans_ckpt |
bool |
可选 |
False |
是否开启分布式权重自动切分与合并功能。开启后可在单卡加载多卡切分权重,或多卡加载单卡权重。详情见 分布式权重切分与合并 |
resume_training |
bool |
可选 |
False |
是否开启断点续训功能。开启后将从 |
load_ckpt_format |
str |
可选 |
"ckpt" |
加载的模型权重的格式,可选 |
remove_redundancy |
bool |
可选 |
False |
加载的模型权重是否已去除冗余。详情可参考权重去冗余保存与加载 |
train_precision_sync |
bool |
可选 |
None |
训练确定性计算开关。设置为 |
infer_precision_sync |
bool |
可选 |
None |
推理确定性计算开关。设置为 |
use_skip_data_by_global_norm |
bool |
可选 |
False |
是否启用基于全局梯度范数的数据跳过功能。当某批次数据导致梯度爆炸时,自动跳过该批次以提升训练稳定性。详情可见 数据跳过。 |
use_checkpoint_health_monitor |
bool |
可选 |
False |
是否启用权重健康监测功能。开启后会在保存 checkpoint 时校验其完整性与可用性,防止保存损坏的权重文件。详情可见 权重健康监测。 |
Context配置
Context配置主要用于指定mindspore.set_context中的相关参数。
参数名称 |
数据类型 |
是否可选 |
默认值 |
取值说明 |
|---|---|---|---|---|
context.mode |
int |
必选 |
无 |
设置后端执行模式, |
context.device_target |
string |
必选 |
无 |
设置后端执行设备,MindSpore Transformers 仅支持在 |
context.device_id |
int |
可选 |
0 |
设置执行设备 ID,其值必须在可用设备范围内,默认值为 |
context.enable_graph_kernel |
bool |
可选 |
False |
是否开启图算融合去优化网络执行性能,默认值为 |
context.max_call_depth |
int |
可选 |
1000 |
设置函数调用的最大深度,其值必须为正整数,默认值为 |
context.max_device_memory |
string |
可选 |
"1024GB" |
设置设备可用的最大内存,格式为 |
context.mempool_block_size |
string |
可选 |
"1GB" |
设置内存块大小,格式为 |
context.save_graphs |
bool / int |
可选 |
False |
在执行过程中保存编译图: |
context.save_graphs_path |
string |
可选 |
'./graph' |
保存编译图的路径。若未设置且 |
context.affinity_cpu_list |
dict / string |
可选 |
None |
可选配置项,用于实现用户自定义绑核策略。 |
Legacy 模型配置
如果使用 MindSpore Transformers 拉起 legacy 模型的任务,需要在 yaml 文件中进行相关超参的配置。注意,此板块介绍的配置仅适用于 legacy 模型,不可与 mcore 模型配置进行混用,请注意版本配套关系。
由于不同的模型配置会有差异,这里仅对MindSpore Transformers中模型的通用配置进行说明。
参数名称 |
数据类型 |
是否可选 |
默认值 |
取值说明 |
|---|---|---|---|---|
model.arch.type |
string |
必选 |
无 |
设置模型类,构建模型时可以根据模型类对模型进行实例化。 |
model.model_config.type |
string |
必选 |
无 |
设置模型配置类,模型配置类需要与模型类匹配使用,即模型配置类中应包含所有模型类使用的参数。 |
model.model_config.num_layers |
int |
必选 |
无 |
设置模型层数,通常指模型 Decoder Layer 的层数。 |
model.model_config.seq_length |
int |
必选 |
无 |
设置模型序列长度,该参数表示模型所支持的最大序列长度。 |
model.model_config.hidden_size |
int |
必选 |
无 |
设置模型隐藏状态的维数。 |
model.model_config.vocab_size |
int |
必选 |
无 |
设置模型词表大小。 |
model.model_config.top_k |
int |
可选 |
无 |
设置推理时从概率最大的 |
model.model_config.top_p |
float |
可选 |
无 |
设置推理时从概率最大且概率累计不超过 |
model.model_config.use_past |
bool |
可选 |
False |
是否开启模型增量推理,开启后可使用 Paged Attention 提升推理性能,在模型训练时必须设置为 |
model.model_config.max_decode_length |
int |
可选 |
无 |
设置生成文本的最大长度,包括输入长度。 |
model.model_config.max_length |
int |
可选 |
无 |
同 |
model.model_config.max_new_tokens |
int |
可选 |
无 |
设置生成新文本的最大长度,不包括输入长度,与 |
model.model_config.min_length |
int |
可选 |
无 |
设置生成文本的最小长度,包括输入长度。 |
model.model_config.min_new_tokens |
int |
可选 |
无 |
设置生成新文本的最小长度,不包括输入长度,与 |
model.model_config.repetition_penalty |
float |
可选 |
1.0 |
设置生成重复文本的惩罚系数, |
model.model_config.block_size |
int |
可选 |
无 |
设置 Paged Attention中block 的大小,仅 |
model.model_config.num_blocks |
int |
可选 |
无 |
设置 Paged Attention中block 的总数,仅 |
model.model_config.return_dict_in_generate |
bool |
可选 |
False |
是否以字典形式返回 |
model.model_config.output_scores |
bool |
可选 |
False |
是否以字典形式返回结果时,包含每次前向生成时的输入softmax前的分数,默认为 |
model.model_config.output_logits |
bool |
可选 |
False |
是否以字典形式返回结果时,包含每次前向生成时模型输出的logits,默认为 |
model.model_config.layers_per_stage |
list(int) |
可选 |
None |
设置开启 pipeline stage 时,每个 stage 分配到的 transformer 层数。默认为 |
model.model_config.bias_swiglu_fusion |
bool |
可选 |
False |
是否使用 swiglu 融合算子,默认为 |
model.model_config.apply_rope_fusion |
bool |
可选 |
False |
是否使用 RoPE 融合算子,默认为 |
除了上述模型的基本配置,MoE模型需要单独配置一些MoE模块的超参,由于不同模型使用的参数会有不同,仅对通用配置进行说明:
参数名称 |
数据类型 |
是否可选 |
默认值 |
取值说明 |
|---|---|---|---|---|
moe_config.expert_num |
int |
必选 |
无 |
设置路由专家数量。 |
moe_config.shared_expert_num |
int |
必选 |
无 |
设置共享专家数量。 |
moe_config.moe_intermediate_size |
int |
必选 |
无 |
设置专家层中间维度大小。 |
moe_config.capacity_factor |
int |
必选 |
无 |
设置专家容量因子。 |
moe_config.num_experts_chosen |
int |
必选 |
无 |
设置每个 token 选择专家数目。 |
moe_config.enable_sdrop |
bool |
可选 |
False |
设置是否使能 token 丢弃策略 |
moe_config.aux_loss_factor |
list(float) |
可选 |
无 |
设置均衡性 loss 的权重。 |
moe_config.first_k_dense_replace |
int |
可选 |
1 |
设置 moe 层的使能 block,一般设置为 |
moe_config.balance_via_topk_bias |
bool |
可选 |
False |
设置是否使能 |
moe_config.topk_bias_update_rate |
float |
可选 |
无 |
设置 |
moe_config.comp_comm_parallel |
bool |
可选 |
False |
设置是否开启 ffn 的计算通信并行。 |
moe_config.comp_comm_parallel_degree |
int |
可选 |
无 |
设置 ffn 计算通信的分割数。数字越大,重叠越多,但会消耗更多内存。此参数仅在 |
moe_config.moe_shared_expert_overlap |
bool |
可选 |
False |
设置是否开启共享专家和路由专家的计算通信并行。 |
moe_config.use_gating_sigmoid |
bool |
可选 |
False |
设置 MoE 中 gating 的结果使用 sigmoid 函数进行激活。 |
moe_config.use_gmm |
bool |
可选 |
False |
设置 MoE 专家计算是否使用 GroupedMatmul。 |
moe_config.use_fused_ops_permute |
bool |
可选 |
False |
设置是否 MoE 使用 permute、unpermute 融合算子进行性能加速,仅在 |
moe_config.enable_deredundency |
bool |
可选 |
False |
设置是否开启去冗余通信,要求专家并行数是每个节点中NPU卡数量的整数倍,默认值: |
moe_config.npu_nums_per_device |
int |
可选 |
8 |
设置每个节点中 NPU 卡的数量,默认值: |
moe_config.enable_gmm_safe_tokens |
bool |
可选 |
False |
保证每个专家至少分配 1 个 tokens,避免极度负载不均衡情况下,GroupedMatmul 计算失败,默认值为 |
Mcore 模型配置
使用 MindSpore Transformers 拉起 mcore 模型的任务时,需要在 model_config 下对相关超参进行配置,包括模型选择、模型参数、计算类型、MoE 参数等。
由于不同的模型配置会有差异,这里介绍 MindSpore Transformers 中模型常用配置。
参数 |
数据类型 |
是否可选 |
默认值 |
取值说明 |
|---|---|---|---|---|
model.model_config.model_type |
string |
必选 |
None |
设置模型配置类,模型配置类需要与模型类匹配使用,即模型配置类中应包含所有模型类使用的参数。例如 |
model.model_config.architectures |
string / list(string) |
必选 |
None |
设置模型类,构建模型时可以根据模型类对模型进行实例化。例如可设置为 |
model.model_config.offset |
int / list(int) |
可选 |
0 |
在流水线并行(PP)中,设置每个stage层数的偏移量:当模型层数无法均分时,用于精确分配各阶段的层数。 |
model.model_config.vocab_size |
int |
可选 |
128000 |
模型的词表大小。 |
model.model_config.hidden_size |
int |
必选 |
0 |
Transformer 隐藏层大小。 |
model.model_config.ffn_hidden_size |
int |
可选 |
None |
Transformer 前馈层大小,对应 HuggingFace 中的 |
model.model_config.num_layers |
int |
必选 |
0 |
Transformer 层数,对应 HuggingFace 中的 |
model.model_config.max_position_embeddings |
int |
可选 |
4096 |
模型可以处理的最大序列长度。 |
model.model_config.hidden_act |
string |
可选 |
'gelu' |
用于 MLP 中的非线性的激活函数。可选配: |
model.model_config.num_attention_heads |
int |
必选 |
0 |
Transformer 注意力头数。 |
model.model_config.num_query_groups |
int |
可选 |
None |
组查询注意力机制的查询组数量,对应 HuggingFace 中的 |
model.model_config.kv_channels |
int |
可选 |
None |
多头注意力机制中的投影权重维度,对应 HuggingFace 中的 |
model.model_config.layernorm_epsilon |
float |
可选 |
1e-5 |
任何 LayerNorm 操作的 Epsilon 值。 |
model.model_config.add_bias_linear |
bool |
可选 |
True |
如果开启此项,则将在所有线性层中包含一个偏差项(QKV 投影、core attention 之后以及 MLP 层中的两个)。 |
model.model_config.tie_word_embeddings |
bool |
可选 |
True |
是否共享输入和输出 embedding 权重。 |
model.model_config.use_flash_attention |
bool |
可选 |
True |
是否在注意力层中使用 Flash Attention。 |
model.model_config.use_contiguous_weight_layout_attention |
bool |
可选 |
False |
确定 Self Attention 的 QKV 线性投影中的权重排列。仅影响 Self Attention 层。 |
model.model_config.hidden_dropout |
float |
可选 |
0.1 |
Transformer 隐藏状态的 Dropout 概率。 |
model.model_config.attention_dropout |
float |
可选 |
0.1 |
后注意力层的 Dropout 概率。 |
model.model_config.position_embedding_type |
string |
可选 |
'rope' |
用于注意层的位置嵌入类型。 |
model.model_config.params_dtype |
string |
可选 |
'float32' |
初始化权重时使用的 dtype。可以配置为 |
model.model_config.compute_dtype |
string |
可选 |
'bfloat16' |
Linear 层的计算 dtype。可以配置为 |
model.model_config.layernorm_compute_dtype |
string |
可选 |
'float32' |
LayerNorm 层的计算 dtype。可以配置为 |
model.model_config.softmax_compute_dtype |
string |
可选 |
'float32' |
用于在注意力计算期间计算 softmax 的 dtype。可以配置为 |
model.model_config.rotary_dtype |
string |
可选 |
'float32' |
自定义旋转位置嵌入的计算 dtype。可以配置为 |
model.model_config.init_method_std |
float |
可选 |
0.02 |
默认初始化方法的零均值正态的标准偏差,对应 HuggingFace 中的 |
model.model_config.moe_grouped_gemm |
bool |
可选 |
False |
当每个等级有多个专家时,在单次内核启动中压缩多个本地(可能很小)gemm,以利用分组 GEMM 功能来提高利用率和性能。 |
model.model_config.num_moe_experts |
int |
可选 |
None |
用于 MoE 层的专家数量,对应 HuggingFace 中的 |
model.model_config.num_experts_per_tok |
int |
可选 |
2 |
每个 token 路由到的专家数量。 |
model.model_config.moe_ffn_hidden_size |
int |
可选 |
None |
MoE 前馈网络隐藏层大小,对应 HuggingFace 中的 |
model.model_config.moe_router_dtype |
string |
可选 |
'float32' |
用于路由和专家输出加权平均的数据类型。对应 HuggingFace 中的 |
model.model_config.gated_linear_unit |
bool |
可选 |
False |
对 MLP 中的第一个线性层使用门控线性单元。 |
model.model_config.norm_topk_prob |
bool |
可选 |
True |
是否使用 top-k 概率进行归一化。 |
model.model_config.moe_router_pre_softmax |
bool |
可选 |
False |
为 MoE 启用 pre-softmax(pre-sigmoid)路由,这意味着 softmax 会在 top-k 选择之前进行。默认情况下,softmax 会在 top-k 选择之后进行。 |
model.model_config.moe_token_drop_policy |
string |
可选 |
'probs' |
丢弃 token 的策略。可以是 |
model.model_config.moe_router_topk_scaling_factor |
float |
可选 |
None |
Top-K 路由选择中路由得分的缩放因子,对应 HuggingFace 中的 |
model.model_config.moe_aux_loss_coeff |
float |
可选 |
0.0 |
辅助损耗的缩放系数。建议初始值为 |
model.model_config.moe_router_load_balancing_type |
string |
可选 |
'aux_loss' |
路由器的负载均衡策略。 |
model.model_config.moe_permute_fusion |
bool |
可选 |
False |
是否使用 moe_token_permute 融合算子,默认为 |
model.model_config.moe_router_force_expert_balance |
bool |
可选 |
False |
是否在专家路由中使用强制负载均衡。此选项仅用于性能测试,不用于一般用途,默认为 |
model.model_config.use_interleaved_weight_layout_mlp |
bool |
可选 |
True |
确定 MLP 的 linear_fc1 投影中的权重排列。仅影响 MLP 层。 |
model.model_config.moe_router_enable_expert_bias |
bool |
可选 |
False |
是否在无辅助损失负载均衡策略中,采用动态专家偏差的 TopK 路由。路由决策基于路由得分与专家偏差之和。 |
model.model_config.enable_expert_relocation |
bool |
可选 |
False |
是否启用动态专家迁移功能,以实现 MoE 模型中的负载平衡。启用后,专家将根据其负载历史记录在设备之间动态重新分配,以提高训练效率和负载平衡,默认为 |
model.model_config.expert_relocation_initial_iteration |
int |
可选 |
20 |
启动专家迁移的初始迭代。专家迁移将在经过这么多次训练迭代后开始。 |
model.model_config.expert_relocation_freq |
int |
可选 |
50 |
训练迭代中专家迁移的频率。初始迭代后,每 N 次迭代执行一次专家迁移。 |
model.model_config.print_expert_load |
bool |
可选 |
False |
是否打印专家负载信息。启用后,将在训练期间打印详细的专家负载统计信息,默认为 |
model.model_config.moe_router_num_groups |
int |
可选 |
None |
用于分组路由的专家分组数量,等价于 HuggingFace 中的 |
model.model_config.moe_router_group_topk |
int |
可选 |
None |
组限制路由的选定组数,等价于 HuggingFace 中的 |
model.model_config.moe_router_topk |
int |
可选 |
2 |
每个 token 路由到的专家数量,等价于 HuggingFace 中的 |
模型训练配置
启动模型训练时,除了模型相关参数,还需要设置trainer、runner_config、学习率以及优化器等训练所需模块的参数。MindSpore Transformers提供了如下配置项。
参数 |
说明 |
类型 |
|---|---|---|
trainer.type |
设置trainer类,通常不同应用场景的模型会设置不同的trainer类。 |
str |
trainer.model_name |
设置模型名称,格式为 |
str |
runner_config.epochs |
设置模型训练的轮数。 |
int |
runner_config.batch_size |
设置批处理数据的样本数,该配置会覆盖数据集配置中的 |
int |
runner_config.sink_mode |
是否开启数据下沉模式。 |
bool |
runner_config.sink_size |
设置每次从Host下发到Device的迭代数量,仅 |
int |
runner_config.gradient_accumulation_steps |
设置梯度累积步数,默认值为1,表示不开启梯度累积。 |
int |
runner_wrapper.type |
设置wrapper类,一般设置 |
str |
runner_wrapper.local_norm |
设置打印单卡上各参数的梯度范数。 |
bool |
runner_wrapper.scale_sense.type |
设置梯度缩放类,一般设置 |
str |
runner_wrapper.scale_sense.loss_scale_value |
设置loss动态尺度系数,模型loss可以根据该参数配置动态变化。 |
int |
runner_wrapper.use_clip_grad |
是否开启梯度剪裁,开启可避免反向梯度过大导致训练无法收敛的情况。 |
bool |
lr_schedule.type |
设置lr_schedule类,lr_schedule主要用于调整模型训练中的学习率。 |
str |
lr_schedule.learning_rate |
设置初始化学习率大小。 |
float |
lr_scale |
是否开启学习率缩放。 |
bool |
lr_scale_factor |
设置学习率缩放系数。 |
int |
layer_scale |
是否开启层衰减。 |
bool |
layer_decay |
设置层衰减系数。 |
float |
optimizer.type |
设置优化器类,优化器主要用于计算模型训练的梯度。 |
str |
optimizer.weight_decay |
设置优化器权重衰减系数。 |
float |
optimizer.fused_num |
设置 |
int |
optimizer.interleave_step |
设置选取待融合权重的step间隔数,每 |
int |
optimizer.fused_algo |
设置融合算法,支持 |
string |
optimizer.ema_alpha |
设置融合系数,仅在 |
float |
train_dataset.batch_size |
同 |
int |
train_dataset.input_columns |
设置训练数据集输入的数据列。 |
list |
train_dataset.output_columns |
设置训练数据集输出的数据列。 |
list |
train_dataset.construct_args_key |
设置模型 |
list |
train_dataset.column_order |
设置训练数据集输出数据列的顺序。 |
list |
train_dataset.num_parallel_workers |
设置读取训练数据集的进程数。 |
int |
train_dataset.python_multiprocessing |
是否开启Python多进程模式提升数据处理性能。 |
bool |
train_dataset.drop_remainder |
是否在最后一个批处理数据包含样本数小于batch_size时,丢弃该批处理数据。 |
bool |
train_dataset.repeat |
设置数据集重复数据次数。 |
int |
train_dataset.numa_enable |
设置NUMA的默认状态为数据读取启动状态。 |
bool |
train_dataset.prefetch_size |
设置预读取数据量。 |
int |
train_dataset.data_loader.type |
设置数据加载类。 |
str |
train_dataset.data_loader.dataset_dir |
设置加载数据的路径。 |
str |
train_dataset.data_loader.shuffle |
是否在读取数据集时对数据进行随机排序。 |
bool |
train_dataset.transforms |
设置数据增强相关选项。 |
- |
train_dataset_task.type |
设置dataset类,该类用于对数据加载类以及其他相关配置进行封装。 |
str |
train_dataset_task.dataset_config |
通常设置为 |
- |
auto_tune |
是否开启数据处理参数自动调优,详情可参考set_enable_autotune。 |
bool |
filepath_prefix |
设置数据优化后的参数配置的保存路径。 |
str |
autotune_per_step |
设置自动数据加速的配置调整step间隔,详情可参考set_autotune_interval。 |
int |
并行配置
为了提升模型的性能,在大规模集群的使用场景中通常需要为模型配置并行策略,详情可参考分布式并行,MindSpore Transformers中的并行配置如下。
参数 |
说明 |
类型 |
|---|---|---|
use_parallel |
是否开启并行模式。 |
bool |
parallel_config.data_parallel |
设置数据并行数。 |
int |
parallel_config.model_parallel |
设置模型并行数。 |
int |
parallel_config.context_parallel |
设置序列并行数。 |
int |
parallel_config.pipeline_stage |
设置流水线并行数。 |
int |
parallel_config.micro_batch_num |
设置流水线并行的微批次大小,在 |
int |
parallel_config.seq_split_num |
在序列流水线并行中设置序列分割数,该数应为序列长度的除数。 |
int |
parallel_config.gradient_aggregation_group |
设置梯度通信算子融合组的大小。 |
int |
parallel_config.context_parallel_algo |
设置长序列并行方案,可选 |
str |
parallel_config.ulysses_degree_in_cp |
设置Ulysses序列并行维度,与 |
int |
micro_batch_interleave_num |
设置多副本并行数,大于1时开启多副本并行。通常在使用模型并行时开启,主要用于优化模型并行产生的通信损耗,仅使用流水并行时不建议开启。详情可参考MicroBatchInterleaved。 |
int |
parallel.parallel_mode |
设置并行模式, |
int |
parallel.gradients_mean |
是否在梯度AllReduce后执行平均算子。通常半自动并行模式下设为 |
bool |
parallel.enable_alltoall |
是否在通信期间生成AllToAll通信算子。通常仅在MOE场景下设为 |
bool |
parallel.full_batch |
是否在并行模式下从数据集中读取加载完整的批数据,设置为 |
bool |
parallel.dataset_strategy |
仅支持 |
list |
parallel.search_mode |
设置全自动并行策略搜索模式,可选 |
str |
parallel.strategy_ckpt_save_file |
设置并行切分策略文件的保存路径。 |
str |
parallel.strategy_ckpt_config.only_trainable_params |
是否仅保存(或加载)可训练参数的切分策略信息,默认为 |
bool |
parallel.enable_parallel_optimizer |
是否开启优化器并行。 |
bool |
parallel.parallel_optimizer_config.gradient_accumulation_shard |
设置累计的梯度变量是否在数据并行的维度上进行切分,仅 |
bool |
parallel.parallel_optimizer_config.parallel_optimizer_threshold |
设置优化器权重参数切分的阈值,仅 |
int |
parallel.parallel_optimizer_config.optimizer_weight_shard_size |
设置优化器权重参数切分通信域的大小,要求该值可以整除 |
int |
parallel.pipeline_config.pipeline_interleave |
使能interleave,使用Seq-Pipe或ZeroBubbleV(也称为DualPipeV)流水线并行时需设置为 |
bool |
parallel.pipeline_config.pipeline_scheduler |
流水线调度策略,目前只支持 |
str |
配置并行策略时应满足:device_num = data_parallel × model_parallel × context_parallel × pipeline_stage。
模型优化配置
MindSpore Transformers提供重计算相关配置,以降低模型在训练时的内存占用,详情可参考重计算。
参数
说明
类型
recompute_config.recompute
是否开启重计算。
bool/list/tuple
recompute_config.select_recompute
开启选择重计算,只针对attention层的算子进行重计算。
bool/list
recompute_config.parallel_optimizer_comm_recompute
是否对由优化器并行引入的AllGather通信进行重计算。
bool/list
recompute_config.mp_comm_recompute
是否对由模型并行引入的通信进行重计算。
bool
recompute_config.recompute_slice_activation
是否对保留在内存中的Cell输出切片。该参数仅支持legacy模型。
bool
recompute_config.select_recompute_exclude
关闭指定算子的重计算,只对Primitive算子有效。
bool/list
recompute_config.select_comm_recompute_exclude
关闭指定算子的通讯重计算,只对Primitive算子有效。
bool/list
MindSpore Transformers提供细粒度激活值SWAP相关配置,以降低模型在训练时的内存占用,详情可参考细粒度激活值SWAP。
参数
说明
类型
swap_config.swap
是否开启激活值SWAP。
bool
swap_config.default_prefetch
设置激活值卸载至host时的内存释放时机与开始取回device的时机,仅在开启激活值SWAP且未设置layer_swap与op_swap时生效。
int
swap_config.layer_swap
选择特定的层使能激活值SWAP。
list
swap_config.op_swap
选择特定层中的特定算子使能激活值SWAP。
list
Callbacks配置
MindSpore Transformers提供封装后的Callbacks函数类,主要实现在模型训练过程中返回模型的训练状态并输出、保存模型权重文件等一些操作,目前支持以下几个Callbacks函数类。
MFLossMonitor
该回调函数类主要用于在训练过程中对训练进度、模型Loss、学习率等信息进行打印,有如下几个可配置项:
参数名称
数据类型
是否可选
默认值
取值说明
learning_rate
float
可选
None
设置
MFLossMonitor中初始化学习率。用于日志打印和训练进度计算。若未设置,则尝试从优化器或其他配置中获取。per_print_times
int
可选
1
设置
MFLossMonitor中日志信息的打印频率,单位为“步”。默认值为1,表示每训练一步打印一次日志信息。micro_batch_num
int
可选
1
设置训练中每一步处理的微批次(micro batch)数量,用于计算实际 loss 值。若未配置,则与 并行配置 中
parallel_config.micro_batch_num一致。micro_batch_interleave_num
int
可选
1
设置训练中每一步的多副本微批次大小,用于 loss 计算。若未配置,则与 并行配置 中
micro_batch_interleave_num一致。origin_epochs
int
可选
None
设置
MFLossMonitor中的总训练轮数(epochs)。若未配置,则与 模型训练配置 中runner_config.epochs一致。dataset_size
int
可选
None
设置
MFLossMonitor中数据集的样本总数。若未配置,则自动使用实际加载的数据集大小。initial_epoch
int
可选
0
设置
MFLossMonitor中训练起始轮数,默认值为0,表示从第0轮开始计数。断点续训时可用于恢复训练进度。initial_step
int
可选
0
设置
MFLossMonitor中训练起始步数,默认值为0。断点续训时可用于对齐日志和进度条。global_batch_size
int
可选
0
设置
MFLossMonitor中的全局批大小(即每个训练 step 所使用的总样本数)。若未配置,则根据数据集大小和并行策略自动计算。gradient_accumulation_steps
int
可选
1
设置
MFLossMonitor中的梯度累积步数。若未配置,则与 模型训练配置 中gradient_accumulation_steps一致。用于 loss 归一化和训练进度估算。check_for_nan_in_loss_and_grad
bool
可选
False
是否在
MFLossMonitor中开启损失值和梯度的 NaN/Inf 检测。开启后,若检测到溢出(NaN 或 INF),则终止训练,默认值为False。建议在调试阶段开启以提升训练稳定性。SummaryMonitor
该回调函数类主要用于收集Summary数据,详情可参考mindspore.SummaryCollector。
CheckpointMonitor
该回调函数类主要用于在模型训练过程中保存模型权重文件,有如下可配置项:
参数名称
数据类型
是否可选
默认值
取值说明
prefix
string
可选
'CKP'
设置保存权重文件名的前缀。例如生成
CKP-100.ckpt。若未配置,则使用默认值'CKP'。directory
string
可选
None
设置权重文件的保存目录。若未配置,则默认保存在
output_dir指定路径下的checkpoint/子目录中。save_checkpoint_seconds
int
可选
0
以时间间隔方式设置自动保存权重的周期(单位:秒)。与
save_checkpoint_steps互斥,优先级更高。例如每 3600 秒保存一次。save_checkpoint_steps
int
可选
1
以训练步数间隔方式设置自动保存权重的周期(单位:steps)。与
save_checkpoint_seconds互斥,若两者均设置,以时间优先。例如每1000步保存一次。keep_checkpoint_max
int
可选
5
最多保留的权重文件数量。当保存数量超过该值时,系统将按创建时间顺序删除最早的文件,确保总数不超过此限制。用于控制磁盘空间使用。
keep_checkpoint_per_n_minutes
int
可选
0
每隔 N 分钟保留一个权重。这是一种基于时间窗口的保留策略,常用于长期训练中平衡存储与恢复灵活性。例如设置为
60表示每小时至少保留一个权重。integrated_save
bool
可选
True
是否开启聚合保存权重文件:
•True:在保存权重文件时聚合所有device的权重,即所有device权重一致;
•False:所有device各自保存自己的权重。
在半自动并行模式下建议设为False,以避免保存权重文件时出现内存问题。save_network_params
bool
可选
False
是否仅保存模型权重,默认值为
False。save_trainable_params
bool
可选
False
是否额外单独保存可训练参数(即部分微调时模型的参数权重)。
async_save
bool
可选
False
是否异步执行权重保存。开启后保存操作不会阻塞训练主流程,提升训练效率,但需注意 I/O 资源竞争可能导致延迟写入。
remove_redundancy
bool
可选
False
保存权重时是否去除模型权重的冗余,默认值为
False。checkpoint_format
string
可选
'ckpt'
保存的模型权重格式,默认值为
ckpt。可选ckpt,safetensors。
注意:使用 Mcore 架构进行训练时,仅支持safetensors格式权重,此配置项不会生效。embedding_local_norm_threshold
float
可选
1.0
健康监测中用于检测 embedding 层梯度或输出范数异常的阈值。若 norm 超过该值,可能触发告警或数据跳过机制,防止训练发散。默认值为
1.0,可根据模型规模调整。
在callbacks字段下可同时配置多个Callbacks函数类,以下是callbacks配置示例。
callbacks:
- type: MFLossMonitor
- type: CheckpointMonitor
prefix: "name_xxb"
save_checkpoint_steps: 1000
integrated_save: False
async_save: False
Processor配置
Processor主要用于对输入模型的推理数据进行预处理,由于Processor配置项不固定,这里仅对MindSpore Transformers中的Processor通用配置项进行说明。
参数名称 |
数据类型 |
是否可选 |
默认值 |
取值说明 |
|---|---|---|---|---|
processor.type |
str |
必选 |
None |
设置使用的数据处理类(Processor)的名称,例如 |
processor.return_tensors |
str |
可选 |
'ms' |
设置数据处理后返回的张量类型。可设置为 |
processor.image_processor.type |
str |
必选 |
None |
设置图像数据处理类的类型。负责图像归一化、缩放、裁剪等操作,需与模型视觉编码器兼容。 |
processor.tokenizer.type |
str |
必选 |
None |
设置文本分词器(Tokenizer)的类型,例如 |
processor.tokenizer.vocab_file |
str |
必选 |
None |
设置 tokenizer 所需的词汇表文件路径(如 |
模型评估配置
MindSpore Transformers提供模型评估功能,同时支持模型边训练边评估功能,以下是模型评估相关配置。
参数名称 |
数据类型 |
是否可选 |
默认值 |
取值说明 |
|---|---|---|---|---|
eval_dataset |
dict |
必选 |
无 |
用于评估的数据集配置,使用方式与 |
eval_dataset_task |
dict |
必选 |
无 |
评估任务的配置,使用方式与数据集任务配置一致(如预处理、批大小等),用于定义评估流程。 |
metric.type |
string |
必选 |
无 |
设置评估的类型,如 |
do_eval |
bool |
可选 |
False |
是否开启边训练边评估功能。 |
eval_step_interval |
int |
可选 |
100 |
设置评估的 step 间隔,默认值为 |
eval_epoch_interval |
int |
可选 |
-1 |
设置评估的 epoch 间隔,默认值为 |
Profile配置
MindSpore Transformers提供Profile作为模型性能调优的主要工具,详情可参考性能调优指南。以下是Profile相关配置。
参数名称 |
数据类型 |
是否可选 |
默认值 |
取值说明 |
|---|---|---|---|---|
profile |
bool |
可选 |
False |
是否开启性能采集工具,默认值为 |
profile_start_step |
int |
可选 |
1 |
设置开始采集性能数据的 step 数,默认值为 |
profile_stop_step |
int |
可选 |
10 |
设置停止采集性能数据的 step 数,默认值为 |
profile_communication |
bool |
可选 |
False |
设置是否在多设备训练中收集通信性能数据,使用单卡训练时,该参数无效,默认值为 |
profile_memory |
bool |
可选 |
True |
设置是否收集 Tensor 内存数据,默认值为 |
profile_rank_ids |
list |
可选 |
None |
设置开启性能采集的 rank ids,默认值为 |
profile_pipeline |
bool |
可选 |
False |
设置是否按流水线并行每个 stage 的其中一张卡开启性能采集,默认值为 |
profile_output |
string |
必选 |
无 |
设置保存性能采集生成文件的文件夹路径。 |
profiler_level |
int |
可选 |
1 |
设置采集数据的级别,可选值为 |
with_stack |
bool |
可选 |
False |
设置是否收集 Python 侧的调用栈数据,默认值为 |
data_simplification |
int |
可选 |
False |
设置是否开启数据精简,开启后将在导出性能采集数据后删除 FRAMEWORK 目录以及其他多余数据,默认为 |
init_start_profile |
bool |
可选 |
False |
设置是否在 Profiler 初始化时开启采集性能数据,设置 |
mstx |
bool |
可选 |
False |
设置是否收集 mstx 时间戳记录,包括训练 step、HCCL 通信算子等,默认值为 |
指标监控配置
指标监控配置主要用于配置训练过程中各指标的记录方式,详情可参考训练指标监控。以下是MindSpore Transformers中通用的指标监控配置项说明:
参数名称 |
数据类型 |
是否可选 |
默认值 |
取值说明 |
|---|---|---|---|---|
monitor_config.monitor_on |
bool |
可选 |
False |
设置是否开启监控。默认为 |
monitor_config.dump_path |
string |
可选 |
'./dump' |
设置训练过程中 |
monitor_config.target |
list(string) |
可选 |
['.*'] |
设置指标 |
monitor_config.invert |
bool |
可选 |
False |
设置反选 |
monitor_config.step_interval |
int |
可选 |
1 |
设置记录指标的频率。默认为 |
monitor_config.local_loss_format |
string / list(string) |
可选 |
null |
设置指标 |
monitor_config.device_local_loss_format |
string / list(string) |
可选 |
null |
设置指标 |
monitor_config.local_norm_format |
string / list(string) |
可选 |
null |
设置指标 |
monitor_config.device_local_norm_format |
string / list(string) |
可选 |
null |
设置指标 |
monitor_config.optimizer_state_format |
string / list(string) |
可选 |
null |
设置指标 |
monitor_config.weight_state_format |
string / list(string) |
可选 |
null |
设置指标 |
monitor_config.throughput_baseline |
int / float |
可选 |
null |
设置指标 |
monitor_config.print_struct |
bool |
可选 |
False |
设置是否打印模型的全部可训练参数名。若为 |
monitor_config.check_for_global_norm |
bool |
可选 |
False |
设置是否开启进程级故障快恢功能。默认为 |
monitor_config.global_norm_spike_threshold |
float |
可选 |
3.0 |
设置 global norm 的阈值,当 global norm 超过时触发数据跳过。默认值为 |
monitor_config.global_norm_spike_count_threshold |
int |
可选 |
10 |
设置连续异常 global norm 累计的次数,当次数达到该阈值则触发异常中断,终止训练。默认值为 |
TensorBoard配置
TensorBoard配置主要用于配置训练过程中与TensorBoard相关的参数,便于在训练过程中实时查看和监控训练信息,详情可参考训练指标监控。以下是MindSpore Transformers中通用的TensorBoard配置项说明:
参数名称 |
数据类型 |
是否可选 |
默认值 |
取值说明 |
|---|---|---|---|---|
tensorboard.tensorboard_dir |
str |
必选 |
无 |
设置 TensorBoard 事件文件的保存路径。 |
tensorboard.tensorboard_queue_size |
int |
可选 |
10 |
设置采集队列的最大缓存值,超过该值便会写入事件文件,默认值为10。 |
tensorboard.log_loss_scale_to_tensorboard |
bool |
可选 |
False |
设置是否将 loss scale 信息记录到事件文件,默认为 |
tensorboard.log_timers_to_tensorboard |
bool |
可选 |
False |
设置是否将计时器信息记录到事件文件,计时器信息包含当前训练步骤(或迭代)的时长以及吞吐量,默认为 |
tensorboard.log_expert_load_to_tensorboard |
bool |
可选 |
False |
设置是否将专家负载记录到事件文件,默认为 |