训练参数说明
更新时间:2024-09-08
1)数据参数
参数名 | 取值类型 | 是否必选 | 默认值 | 枚举值 | 描述 |
---|---|---|---|---|---|
--data-path | str | 是 | None | NA | 预训练数据集文件路径 |
--split | str | 否 | 969, 30, 1 | NA | Train/Validate/Test使用数据占比 |
--train-data-path | str | 否 | None | NA | 训练集路径,不和--data-path 和--split 共同使用 |
--valid-data-path | str | 否 | None | NA | 验证集路径,不和--data-path 和--split 共同使用 |
--test-data-path | str | 否 | None | NA | 测试集路径,不和--data-path 和--split 共同使用 |
--data-cache-path | str | 否 | None | NA | 存储路径,用于缓存可重用的数据集索引 |
--no-mmap-bin-files | bool | 否 | False | NA | 关闭.bin 文件内存映射 |
--mock-data | bool | 否 | False | NA | 跳过真实数据读取过程,使用自动生成的模拟数据 |
--dataloader-type | str | 否 | single | single、cyclic | 单轮或多轮数据读取 |
--num-workers | int | 否 | 2 | NA | Dataloader worker进程数目 |
--tokenizer-type | str | 是 | None | NullTokenizer、Llama2Tokenizer、HFTokenizer(推荐) | Tokenizer类型 |
--hf-tokenizer-path | str | 否 | None | NA | huggingface tokenizer路径 |
--use-fast-tokenizer | bool | 否 | False | NA | 使用HFTokenizer类型时,指定使用 fast 版本 |
--tokenizer-model | str | 否 | None | NA | 使用非HFTokenizer类型时,指定 tokenizer model文件地址 |
--seq-length | int | 是 | None | NA | 序列长度 |
2)模型组网参数
自动组网参数
参数名 | 取值类型 | 是否必选 | 默认值 | 枚举值 | 描述 |
---|---|---|---|---|---|
--model-name | string | 是 | 无 | 可选值为“模型支持列表”中对应【Model Family】或【Model Architecture】值 | 模型名称,支持两种指定方式:(1)指定模型系列(Model Family)名称,比如 llama2,此时需要根据如下组网参数来描述不同尺寸模型的具体结构;(2)指定模型架构(Model Architecture)名称,比如 llama2-7b,系统会按开源模型结构来自动配置结构参数,同时部分超参用户仍可调整; |
详细组网参数
参数名 | 取值类型 | 是否必选 | 默认值 | 枚举值 | model-name为具体架构时是否自动配置 | 描述 |
---|---|---|---|---|---|---|
--num-layers | int | 是 | None | NA | 是 | 层数 |
--hidden-size | int | 是 | None | NA | 是 | 隐层维数 |
--ffn-hidden-size | int | 否 | None | NA | 是 | FFN隐层维数; |
--num-attention-heads | int | 是 | None | NA | 是 | 自注意力的head数 |
--group-query-attention | bool | 否 | False | NA | 是 | 使用 GQA |
--num-query-groups | int | 否 | 1 | NA | 是 | GQA 中,Query 头分组数目,每组共享KV头 |
--position-embedding-type | string | 是 | learned_absolute | learned_ab、olute、rope、alibi | 是 | Position Embedding类型 |
--max-position-embeddings | int | 是 | None | NA | 否 | 使用 learned_absolute 类型时,指定位置 Embedding 最大序列长度 |
--rotary-interleaved | bool | 否 | False | NA | 是 | 使用 Interleaved Rotary Embedding |
--rotary-percent | float | 否 | 1.0 | NA | 否 | Rotary dimension百分比 |
--rotary-base | int | 否 | 10000 | NA | 否 | Rotary Base 数值 |
--rotary-seq-len-interpolation-factor | int | 否 | None | NA | 否 | 序列长度线性插值因子,用于 rotary embedding; |
--attention-dropout | float | 否 | 0.1 | NA | 是 | Post attention dropout概率 |
--hidden-dropout | float | 否 | 0.1 | NA | 是 | Hidden state transformer dropout概率 |
--normalization | string | 否 | LayerNorm | LayerNorm、RMSNorm | 是 | normalization类型 |
--norm-epsilon | float | 否 | 1e-5 | NA | 否 | 指定 Layernorm 或 Rmsnorm 中的 Epsilon 数值 |
--use-normhead | bool | 否 | False | NA | 是 | baichuan 模型中,部分尺寸会使用normhead |
--swiglu | bool | 否 | False | NA | 是 | 使用 swiglu 激活函数 |
--disable-bias-linear | bool | 否 | False | NA | 是 | Linear 层中不添加 bias |
--add-qkv-bias | bool | 否 | False | NA | 是 | 仅在QKV Linear中添加 bias |
--make-vocab-size-divisible-by | int | 否 | 128 | NA | 否 | Pad Vocab 大小可以被指定数值整除 |
--untie-embeddings-and-output-weights | bool | 否 | False | NA | 是 | 取消 Embedding 和 Ouput 层的权重共享 |
3)初始化参数
主要用于从零预训练;
参数名 | 取值类型 | 是否必选 | 默认值 | 枚举值 | 描述 |
---|---|---|---|---|---|
--seed | int | 否 | 1234 | NA | 随机种子,用于python、numpy、pytorch、cuda 等 |
--data-parallel-random-init | bool | 否 | False | NA | 确保数据并行中不同 Rank 的模型权重随机初始化 |
--init-method-std | float | 否 | 0.02 | NA | 权重初始化时,零均值正态分布的标准差 |
--init-method-xavier-uniform | bool | 否 | False | NA | 使用Xqvier 参数初始化方法 |
4)优化器和学习率参数
参数名 | 取值类型 | 是否必选 | 默认值 | 枚举值 | 描述 |
---|---|---|---|---|---|
--lr | float | 是 | None | NA | 学习率 |
--min-lr | fload | 否 | 0.0 | NA | 学习率最小值 |
--lr-decay-style | str | 是 | linear | constant、linear、cosine、inverse-square-root | 学习率衰减方式 |
--lr-decay-iters | int | 否 | None | NA | 指定迭代次数用于学习率衰减 |
--lr-warmup-fraction | float | 否 | None | NA | 学习率warmup比例 |
--optimizer | str | 否 | adam | adam、sgd | 优化器类型 |
--weight-decay | float | 是 | 0.01 | NA | L2 正则权重衰减系数 |
--clip-grad | float | 否 | 1.0 | NA | 梯度clipping |
--adam-beta1 | float | 否 | 0.9 | NA | adam beta1系数 |
--adam-beta2 | float | 否 | 0.999 | NA | adam beta2系数 |
--adam-eps | float | 否 | 1e-8 | NA | adam eps项 |
--sgd-momentum | fload | 否 | 0.9 | NA | sgd 优化器动量因子 |
5)Checkpoint 读取和保存参数
参数名 | 取值类型 | 是否必选 | 默认值 | 枚举值 | 描述 |
---|---|---|---|---|---|
--load | str | 否 | None | NA | 加载模型的文件夹路径 |
--no-load-optim | bool | 否 | False | NA | 不从 checkpoint 中加载优化器状态 |
--no-load-rng | bool | 否 | False | NA | 不从 checkpoint 中加载 rng 状态 |
--save | str | 否 | None | NA | 保存模型的文件夹路径 |
--save-interval | int | 否 | None | NA | 保存模型ckpt的间隔 |
--no-save-optim | bool | 否 | False | NA | 不保存优化器状态 |
--no-save-rng | bool | 否 | False | NA | 不保存 RNG 状态 |
--ckpt-step | int | 否 | None | NA | 指定读取具体 step 的checkpoint |
6)混合精度参数
参数名 | 取值类型 | 是否必选 | 默认值 | 枚举值 | 描述 |
---|---|---|---|---|---|
--fp16 | bool | 否 | False | NA | FP16开关 |
--bf16 | bool | 否 | False | NA | BF16开关 |
--loss-scale | float | 否 | None | NA | 用于 FP16训练,若指定数值,将采用静态 loss 缩放方法,否则将采用动态 loss 缩放 |
--initial-loss-scale | float | 否 | 2**32 | NA | 用于 FP16训练,指定动态 loss 缩放时的初始缩放因子 |
--min-loss-scale | float | 否 | 1.0 | NA | 用于 FP16训练,指定动态 loss 缩放时的最小缩放因子 |
--loss-scale-window | float | 否 | 1000 | NA | 用于 FP16训练,指定动态调整缩放因子的窗口大小 |
--accumulate-allreduce-grads-in-fp32 | bool | 否 | False | NA | 使用 FP32 进行梯度累积和平均;采用 BF16训练时,默认开启该选项 |
7)分布式参数
参数名 | 取值类型 | 是否必选 | 默认值 | 枚举值 | 描述 |
---|---|---|---|---|---|
--tensor-model-parallel-size | int | 否 | 1 | NA | 张量并行维数 |
--pipeline-model-parallel-size | int | 否 | 1 | NA | 流水并行维数 |
--num-layers-per-virtual-pipeline-stage | int | 否 | None | NA | 使用 Interleaved 1F1B 时,指定每个model chunk的层数 |
--no-overlap-p2p-communication | bool | 否 | False | NA | Interleaved pipeline p2p通信隐藏开关 |
--distributed-backend | str | 否 | NCCL | nccl、gloo | 指定分布式训练时的通信后端 |
--distributed-timeout-minutes | int | 否 | 10 | NA | torch.distributed 接口的通信操作超时时间 |
--use-distributed-optimizer | bool | 否 | Fasle | NA | Distributed optimizer开关(ZeRO1) |
--overlap-grad-reduce | bool | 否 | False | NA | 开启梯度reduce-scatter和计算 overlap |
--overlap-param-gather | bool | 否 | False | NA | 开启参数allgather 和 计算 overlap |
--context-parallel-size | int | 否 | 1 | NA | Context 序列并行维数 |
--expert-model-parallel-size | int | 否 | 1 | NA | 专家并行维数 |
--tp-comm-overlap | bool | 否 | false | NA | 开启 tp 通信和计算 overlap |
8)显存策略参数
参数名 | 取值类型 | 是否必选 | 默认值 | 枚举值 | 描述 |
---|---|---|---|---|---|
--sequence-parallel | bool | 否 | False | NA | 使用 Tensor 并行时,开启Sequence parallel用于显存优化 |
--recompute-activations | bool | 否 | False | NA | selective 重计算开关 |
--recompute-granularity | str | 否 | None | full、selective | 重计算粒度 |
--recompute-method | str | 否 | None | uniform、block | 重计算方式 |
--recompute-num-layers | int | 否 | 1 | NA | 重计算层数 |
--distribute-saved-activations | bool | 否 | False | NA | 中间值结果按tensor model parallel维度切分开关 |
--offload-optimizer | str | 否 | disabled | disabled、auto、manual | 开启optimizer offload功能,指定为auto 时框架自动计算需要 offload 的显存大小 |
--offload-optimizer-percent | float | 否 | 1.0 | NA | --offload-optimizer=manual时,指定优化器 offload 比例 |
--no-overlap-offload-optimizer | bool | 否 | False | NA | 开启optimizer offload功能时,关闭数据传输和计算 overlap |
--cpu-adam-threads | int | 否 | 1 | NA | 在 CPU 上进行优化器计算时的线程数 |
9)MoE 训练参数
参数名 | 取值类型 | 是否必选 | 默认值 | 枚举值 | 描述 |
---|---|---|---|---|---|
--moe-router-load-balancing-type | string | 否 | aux_loss | aux_loss、sinkhorn、none | router 负载均衡策略 |
--moe-router-topk | int | 否 | 2 | NA | 每个 token 需要路由的专家数目 |
--moe-grouped-gemm | bool | 否 | False | NA | 每个rank 存在多个专家时,使用 grouped gemm加速专家计算 |
--moe-aux-loss-coeff | float | 否 | 0.0 | NA | aux loss 缩放系数 |
--moe-z-loss-coeff | float | 否 | None | NA | z-loss 缩放系数 |
--moe-input-jitter-eps | float | 否 | None | NA | 输入 tensor 添加噪声 |
--moe-token-dropping | bool | 否 | False | NA | 暂不支持;用于指定当达到专家容量时是否丢弃 token; |
--moe-token-dispatcher-type | str | 否 | allgather | allgather、alltoall | token 分发时采用的通信模式 |
10)SFT训练参数
参数名 | 取值类型 | 是否必选 | 默认值 | 枚举值 | 描述 |
---|---|---|---|---|---|
--chat-template | str | 否 | None | alpaca、baichuan、baichuan2、llama2、llama2_zh、llama3、mistral、qwen | 对于 SFT 训练,必须传递对话模板 |
--sft-dataset-config | str | 否 | None | NA | 数据集配置文件路径 |
--sft-dataset | str | 否 | None | NA | 数据集名称,可以传递多个,对应--data-path 中的数据集文件; |
--sft-train-dataset | str | 否 | None | NA | 仅训练的数据集名称,可以传递多个,对应--train-data-path 中的数据集文件。和 --sft-dataset 不能同时使用。 |
--sft-valid-dataset | str | 否 | None | NA | 仅验证的数据集名称,可以传递多个,对应--valid-data-path 中的数据集文件。和 --sft-dataset 不能同时使用。 |
--sft-test-dataset | str | 否 | None | NA | 仅测试的数据集名称,可以传递多个,对应--test-data-path 中的数据集文件。和 --sft-dataset 不能同时使用。 |
--sft-data-streaming | bool | 否 | False | NA | 开启流式数据读取和解析 |
--streaming-buffer-size | int | 否 | 16384 | NA | streaming 模式下,用于 shuffle 的 buffer size |
--sft-num-preprocess-workers | int | 否 | None | NA | 数据预处理 worker 数目 |
--train-on-prompt | bool | 否 | False | NA | promot 参与训练 |
--variable-seq-lengths | bool | 否 | False | NA | 开启变长数据训练;SFT 训练默认会开启变长,无需用户控制; |
--sft-data-mix-strategy | str | 否 | concat | concat、interleave_under、interleave_over | 数据混合策略, 当前采用 huggingface dataset提供的混合策略机制 |
--is-tokenized-data | bool | 否 | False | NA | 输入的数据是否已经进行 tokenizer 转换 |
--packing-sft-data | bool | 否 | False | NA | 开启数据 packing 训练(本次版本新增参数) |
11)其他训练参数
参数名 | 取值类型 | 是否必选 | 默认值 | 枚举值 | 描述 |
---|---|---|---|---|---|
--micro-batch-size | int | 否 | None | NA | 单次迭代每个rank的batch size |
--global-batch-size | int | 是 | None | NA | 分布式训练全局batch size |
--train-iters | int | 是 | None | NA | 训练的迭代轮数 |
--eval-iters | int | 否 | 100 | NA | 评估的迭代步数 |
--eval-interval | int | 否 | 1000 | NA | 在验证集上进行评估的间隔步数 |
--log-interval | int | 否 | 100 | NA | 日志打印的间隔步数 |
--tensorboard-dir | str | 否 | None | NA | tensorboard 文件写入路径 |
--timing-log-level | int | 否 | 0 | 0/1/2 | 细粒度指标打印级别 |
--timing-log-option | str | 否 | minmax | max、minmax、all | 打印 timing log时,可以选择打印最大值、或最小及最大值、或所有值; |
--tensorboard-log-interval | int | 否 | 1 | NA | tensorboard log写入间隔 |
--log-timers-to-tensorboard | bool | 否 | False | NA | 开启 timing 指标写入 tensorboard |
--log-validation-ppl-to-tensorboard | bool | 否 | False | NA | 将 validation perplexity 数据写入 tensorboard |
--wandb-project | str | 否 | '' | NA | wandb 项目名称 |
--wandb-exp-name | str | 否 | '' | NA | wandb 实验名称 |