配置文件说明

查看源文件

概述

在模型的训练和推理过程中通常需要配置不同的参数,MindFormers支持使用YAML文件集中管理和调整可配置项,使模型的配置更加结构化,同时提高了其可维护性。

YAML文件内容说明

MindFormers提供的YAML文件中包含对于不同功能的配置项,下面按照配置项的内容对其进行说明。

基础配置

基础配置主要用于指定MindSpore随机种子以及加载权重的相关设置。

参数

说明

类型

seed

设置全局种子,详情可参考mindspore.set_seed

int

run_mode

设置模型的运行模式,可选trainfinetuneevalpredict

str

output_dir

设置保存log、checkpoint、strategy等文件的路径

str

load_checkpoint

加载权重的文件或文件夹路径,目前有3个应用场景:
1. 支持传入完整权重文件路径
2. 支持传入离线切分后的权重文件夹路径
3. 支持传入包含lora权重和base权重的文件夹路径
各种权重的获取途径可参考权重转换功能

str

auto_trans_ckpt

是否开启在线权重自动转换功能,详情可参考权重转换功能

bool

resume_training

是否开启断点续训功能,详情可参考断点续训功能

bool

load_ckpt_format

加载的模型权重的格式,可选ckptsafetensors

str

remove_redundancy

加载的模型权重是否去除了冗余。默认值为False

bool

Context配置

Context配置主要用于指定mindspore.set_context中的相关参数。

参数

说明

类型

context.mode

设置后端执行模式,0表示GRAPH_MODE,MindFormers目前仅支持在GRAPH_MODE模式下运行

int

context.device_target

设置后端执行设备,MindFormers仅支持在Ascend设备上运行

str

context.device_id

设置执行设备ID,其值必须在可用设备范围内,默认值为0

int

context.enable_graph_kernel

是否开启图算融合去优化网络执行性能, 默认值为False,详情可参考图算融合

bool

context.max_call_depth

设置函数调用的最大深度,其值必须为正整数,默认值为1000

int

context.max_device_memory

设置设备可用的最大内存,格式为"xxGB",默认值为1024GB

str

context.mempool_block_size

设置内存块大小,格式为"xxGB",默认值为1GB

str

context.save_graphs

在执行过程中保存编译图。
1. False0表示不保存中间编译图。
2. 1表示运行时会输出图编译过程中生成的一些中间文件。
3. True2表示生成更多后端流程相关的IR文件。
4. 3表示生成可视化计算图和更多详细的前端IR图。

bool/int

模型配置

由于不同的模型配置会有差异,这里仅对MindFormers中模型的通用配置进行说明。

参数

说明

类型

model.arch.type

设置模型类,构建模型时可以根据模型类对模型进行实例化

str

model.model_config.type

设置模型配置类,模型配置类需要与模型类匹配使用,即模型配置类中应包含所有模型类使用的参数

str

model.model_config.num_layers

设置模型层数,通常指模型Decoder Layer的层数

int

model.model_config.seq_length

设置模型序列长度,该参数表示模型所支持的最大序列长度

int

model.model_config.hidden_size

设置模型隐藏状态的维数

int

model.model_config.vocab_size

设置模型词表大小

int

model.model_config.top_k

设置推理时从概率最大的top_k个tokens中采样

int

model.model_config.top_p

设置推理时从概率最大且概率累计不超过top_p的tokens中采样

int

model.model_config.use_past

是否开启模型增量推理,开启后可使用Paged Attention提升推理性能,在模型训练时必须设置为False

bool

model.model_config.max_decode_length

设置生成文本的最大长度,包括输入长度

int

model.model_config.max_length

max_decode_length,与max_decode_length同时设置时,max_length生效

int

model.model_config.max_new_tokens

设置生成新文本的最大长度,不包括输入长度,与max_length同时设置时,max_new_tokens生效

int

model.model_config.min_length

设置生成文本的最小长度,包括输入长度

int

model.model_config.min_new_tokens

设置生成新文本的最小长度,不包括输入长度,与min_length同时设置时,min_new_tokens生效

int

model.model_config.repetition_penalty

设置生成重复文本的惩罚系数,repetition_penalty不小于1,等于1时不对重复输出进行惩罚

int

model.model_config.block_size

设置Paged Attention中block的大小,仅use_past=True时生效

int

model.model_config.num_blocks

设置Paged Attention中block的总数,仅use_past=True时生效,应满足batch_size×seq_length<=block_size×num_blocks

int

model.model_config.return_dict_in_generate

是否以字典形式返回generate接口的推理结果,默认为False

bool

model.model_config.output_scores

是否以字典形式返回结果时,包含每次前向生成时的输入softmax前的分数,默认为False

bool

model.model_config.output_logits

是否以字典形式返回结果时,包含每次前向生成时模型输出的logits,默认为False

bool

MoE配置

除了上述模型的基本配置,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

设置每个token选择专家数目

int

moe_config.enable_sdrop

设置是否使能token丢弃策略sdrop,由于MindFormers的MoE是静态shape实现所以不能保留所有token

bool

moe_config.aux_loss_factor

设置均衡性loss的权重

list[float]

moe_config.first_k_dense_replace

设置moe层的使能block,一般设置为1,表示第一个block不使能moe

int

moe_config.balance_via_topk_bias

设置是否使能aux_loss_free负载均衡算法

bool

moe_config.topk_bias_update_rate

设置aux_loss_free负载均衡算法bias更新步长

float

moe_config.comp_comm_parallel

设置是否开启ffn的计算通信并行。默认值:False

bool

moe_config.comp_comm_parallel_degree

设置ffn计算通信的分割数。数字越大,重叠越多,但会消耗更多内存。此参数仅在comp_com_parallel启用时有效

int

模型训练配置

启动模型训练时,除了模型相关参数,还需要设置trainer、runner_config、学习率以及优化器等训练所需模块的参数,MindFormers提供了如下配置项。

参数

说明

类型

trainer.type

设置trainer类,通常不同应用场景的模型会设置不同的trainer类

str

trainer.model_name

设置模型名称,格式为'{name}_xxb',表示模型的某一规格

str

runner_config.epochs

设置模型训练的轮数

int

runner_config.batch_size

设置批处理数据的样本数,该配置会覆盖数据集配置中的batch_size

int

runner_config.sink_mode

是否开启数据下沉模式,详情可参考下沉模式

bool

runner_config.sink_size

设置每次从Host下发到Device的迭代数量,仅sink_mode=True时生效

int

runner_config.gradient_accumulation_steps

设置梯度累积步数,默认值为1,表示不开启梯度累积

int

runner_wrapper.type

设置wrapper类,一般设置'MFTrainOneStepCell'即可

str

runner_wrapper.scale_sense.type

设置梯度缩放类,一般设置'DynamicLossScaleUpdateCell'即可

str

runner_wrapper.scale_sense.use_clip_grad

是否开启梯度剪裁,开启可避免反向梯度过大导致训练无法收敛的情况

bool

runner_wrapper.scale_sense.loss_scale_value

设置loss动态尺度系数,模型loss可以根据该参数配置动态变化

int

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

train_dataset.batch_size

runner_config.batch_size

int

train_dataset.input_columns

设置训练数据集输入的数据列

list

train_dataset.output_columns

设置训练数据集输出的数据列

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

通常设置为train_dataset的引用,包含train_dataset的所有配置项

-

auto_tune

是否开启数据处理参数自动调优,详情可参考set_enable_autotune

bool

filepath_prefix

设置数据优化后的参数配置的保存路径

str

autotune_per_step

设置自动数据加速的配置调整step间隔,详情可参考set_autotune_interval

int

并行配置

为了提升模型的性能,在大规模集群的使用场景中通常需要为模型配置并行策略,详情可参考分布式并行,MindFormers中的并行配置如下。

参数

说明

类型

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

设置流水线并行的微批次大小,在parallel_config.pipeline_stage大于1时,应满足parallel_config.micro_batch_num >= parallel_config.pipeline_stage

int

parallel_config.gradient_aggregation_group

设置梯度通信算子融合组的大小

int

micro_batch_interleave_num

设置多副本并行数,大于1时开启多副本并行。通常在使用模型并行时开启,主要用于优化模型并行产生的通信损耗,仅使用流水并行时不建议开启。详情可参考MicroBatchInterleaved

int

parallel.parallel_mode

设置并行模式,0表示数据并行模式, 1表示半自动并行模式, 2表示自动并行模式, 3表示混合并行模式,一般设置为半自动并行模式

int

parallel.gradients_mean

是否在梯度AllReduce后执行平均算子。通常半自动并行模式下设为False,数据并行模式下设为True

bool

parallel.enable_alltoall

是否在通信期间生成AllToAll通信算子。通常仅在MOE场景下设为True,默认值为False

bool

parallel.full_batch

是否在并行模式下加载完整batch的数据集,在自动并行模式和半自动并行模式下设置为True,在数据并行模式下设置为False

bool

parallel.search_mode

设置全自动并行策略搜索模式,可选recursive_programming, dynamic_programmingsharding_propagation,仅在全自动并行模式下生效,实验性接口

str

parallel.strategy_ckpt_save_file

设置并行切分策略文件的保存路径

str

parallel.strategy_ckpt_config.only_trainable_params

是否仅保存(或加载)可训练参数的切分策略信息,默认为True,当网络中存在冻结的参数但又需要切分时将该参数设为False

bool

parallel.enable_parallel_optimizer

是否开启优化器并行。
1. 在数据并行模式下将模型权重参数按device数进行切分
2. 在半自动并行模式下将模型权重参数按parallel_config.data_parallel进行切分

bool

parallel.parallel_optimizer_config.gradient_accumulation_shard

设置累计的梯度变量是否在数据并行的维度上进行切分,仅enable_parallel_optimizer=True时生效

bool

parallel.parallel_optimizer_config.parallel_optimizer_threshold

设置优化器权重参数切分的阈值,仅enable_parallel_optimizer=True时生效。

int

parallel.parallel_optimizer_config.optimizer_weight_shard_size

设置优化器权重参数切分通信域的大小,要求该值可以整除parallel_config.data_parallel,仅enable_parallel_optimizer=True时生效。

int

配置并行策略时应满足device_num = data_parallel × model_parallel × context_parallel × pipeline_stage

模型优化配置

MindFormers提供重计算相关配置,以降低模型在训练时的内存占用,详情可参考重计算

参数

说明

类型

recompute_config.recompute

是否开启重计算

bool

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输出切片

bool

Callbacks配置

MindFormers提供封装后的Callbacks函数类,主要实现在模型训练过程中返回模型的训练状态并输出、保存模型权重文件等一些操作,目前支持以下几个Callbacks函数类。

  1. MFLossMonitor

    该回调函数类主要用于在训练过程中对训练进度、模型Loss、学习率等信息进行打印,有如下几个可配置项:

    参数

    说明

    类型

    learning_rate

    设置MFLossMonitor中初始化学习率,默认值为None

    float

    per_print_times

    设置MFLossMonitor中日志信息打印间隔,默认值为1,即每一步打印一次日志信息

    int

    micro_batch_num

    设置训练中每一步的批数据大小,用于计算实际的loss值,若不配置该参数,则与并行配置parallel_config.micro_batch_num一致

    int

    micro_batch_interleave_num

    设置训练中每一步的多副本批数据大小,用于计算实际的loss值,若不配置该参数,则与并行配置micro_batch_interleave_num一致

    int

    origin_epochs

    设置MFLossMonitor中训练的轮数,若不配置该参数,则与模型训练配置runner_config.epochs一致

    int

    dataset_size

    设置MFLossMonitor中初始化数据集大小,若不配置该参数,则与实际训练使用的数据集大小一致

    int

    initial_epoch

    设置MFLossMonitor中训练起始轮数,默认值为0

    int

    initial_step

    设置MFLossMonitor中训练起始步数,默认值为0

    int

    global_batch_size

    设置MFLossMonitor中全局批数据样本数,若不配置该参数,则会根据数据集大小以及并行策略自动计算

    int

    gradient_accumulation_steps

    设置MFLossMonitor中梯度累计步数,若不配置该参数,则与模型训练配置gradient_accumulation_steps一致

    int

    check_for_nan_in_loss_and_grad

    设置是否在MFLossMonitor中开启溢出检测,开启后在模型训练过程中出现溢出则退出训练,默认值为False

    bool

  2. SummaryMonitor

    该回调函数类主要用于收集Summary数据,详情可参考mindspore.SummaryCollector

  3. CheckpointMonitor

    该回调函数类主要用于在模型训练过程中保存模型权重文件,有如下几个可配置项:

    参数

    说明

    类型

    prefix

    设置保存文件名称的前缀

    str

    directory

    设置保存文件名称的目录

    str

    save_checkpoint_seconds

    设置保存模型权重的间隔秒数

    int

    save_checkpoint_steps

    设置保存模型权重的间隔steps数

    int

    keep_checkpoint_max

    设置保存模型权重文件的最大数量,如果保存路径内存在超出数量的模型权重文件,会从创建时间最早的文件开始删除,以保证文件总数不超过keep_checkpoint_max

    int

    keep_checkpoint_per_n_minutes

    设置保存模型权重的间隔分钟数

    int

    integrated_save

    开启聚合保存权重文件。
    1. 设为True时表示在保存权重文件时聚合所有device的权重,即所有device权重一致
    2. 设为False时表示所有device各自保存自己的权重
    使用半自动并行模式时通常需要设置为False,以避免保存权重文件时出现内存问题

    bool

    save_network_params

    是否仅保存模型权重,默认值为False

    bool

    save_trainable_params

    是否额外保存可训练的参数权重,即部分微调时模型的参数权重,默认为False

    bool

    async_save

    是否异步执行保存模型权重文件

    bool

    remove_redundancy

    是否去除模型权重的冗余,默认值为False

    bool

    checkpoint_format

    保存的模型权重的格式,默认值为ckpt。可选ckptsafetensors

    str

callbacks字段下可同时配置多个Callbacks函数类,以下是callbacks配置示例。

callbacks:
  - type: MFLossMonitor
  - type: CheckpointMonitor
    prefix: "name_xxb"
    save_checkpoint_steps: 1000
    integrated_save: False
    async_save: False

Processor配置

Processor主要用于对输入模型的推理数据进行预处理,由于Processor配置项不固定,这里仅对MindFormers中的Processor通用配置项进行说明。

参数

说明

类型

processor.type

设置数据处理类

str

processor.return_tensors

设置数据处理类返回的张量类型,一般使用'ms'

str

processor.image_processor.type

设置图像数据处理类

str

processor.tokenizer.type

设置文本tokenizer类

str

processor.tokenizer.vocab_file

设置文本tokenizer读取文件路径,需要与tokenizer类相对应

str

模型评估配置

MindFormers提供模型评估功能,同时支持模型边训练边评估功能,以下是模型评估相关配置。

参数

说明

类型

eval_dataset

使用方式与train_dataset相同

-

eval_dataset_task

使用方式与eval_dataset_task相同

-

metric.type

使用方式与callbacks相同

-

do_eval

是否开启边训练边评估功能

bool

eval_step_interval

设置评估的step间隔,默认值为100,设置小于0表示关闭根据step间隔评估功能

int

eval_epoch_interval

设置评估的epoch间隔,默认值为-1,设置小于0表示关闭根据epoch间隔评估功能,不建议在数据下沉模式使用该配置

int

metric.type

设置评估的类型

str

Profile配置

MindFormers提供Profile作为模型性能调优的主要工具,详情可参考性能调优指南,以下是Profile相关配置。

参数

说明

类型

profile

是否开启性能采集工具,详情可参考mindspore.Profiler

bool

profile_start_step

设置开始采集性能数据的step数

int

profile_stop_step

设置停止采集性能数据的step数

int

profile_communication

设置是否在多设备训练中收集通信性能数据,使用单卡训练时,该参数无效,默认值为False

bool

profile_memory

设置是否收集Tensor内存数据

bool

init_start_profile

设置是否在Profiler初始化时开启采集性能数据,设置profile_start_step时该参数不生效。开启profile_memory时需要将该参数设为True

bool

TensorBoard配置

TensorBoard配置主要用于配置训练过程中与TensorBoard相关的参数,便于在训练过程中实时查看和监控训练信息。以下是MindFormers中通用的TensorBoard配置项说明:

参数

说明

类型

tensorboard.tensorboard_dir

设置 TensorBoard 日志目录,指定 TensorBoard 保存日志的文件夹路径

str

tensorboard.tensorboard_queue_size

设置 TensorBoard 最大队列长度,控制日志写入的速度

int

tensorboard.log_loss_scale_to_tensorboard

设置是否将 loss scale 信息记录到 TensorBoard

bool

tensorboard.log_timers_to_tensorboard

设置是否将计时器信息记录到 TensorBoard,计时器信息包含当前训练步骤(或迭代)的时长以及吞吐量

bool

Tensorboard保存事件文件(events.*)的实际路径是tensorboard.tensorboard_dir/rank_id,使用以下命令可以启动Tensorboard Web可视化服务:

tensorboard --logdir=/path/events.* --host=0.0.0.0 --port=6006

# 参数说明
logdir: TensorBoard保存事件文件的路径
host:   默认是 127.0.0.1,表示只允许本机访问;设置为 0.0.0.0 可以允许外部设备访问,请注意信息安全
port:   设置服务监听的端口,默认是 6006