LLM - Model、Data、Training、Generate Agruments 超参解析

目录

一.引言

二.常用参数

◆ ModelArguments

◆ DataArguments

◆ TrainingArguments

◆ GeneratingArguments

三.代码实现

◆ Python 代码

◆ Shell 代码

四.总结


一.引言

LLM 相关训练框架都会引入 ModelArguments、DataArguments、TrainingArguments、GeneratingArguments 并通过 Transformer.HfArgumentParser 进行整合,实现了两行代码处理训练全程的参数问题。

ModelArguments - 模型参数

DataArguments - 数据集参数

TrainingArguments - 训练参数

GeneratingArguments - 生成参数

二.常用参数

◆ ModelArguments

@dataclass
class ModelArguments:
    model_name_or_path: Optional[str] = field(default="baichuan-inc/Baichuan2-7B-Base")

ModelArguments 主要存储模型加载与配置的相关参数,一般还有以下参数,大家可以自定义:

参数名称默认类型含义
model_name_or_pathNonestr模型地址或名称
cache_dirNonestr缓存地址
use_fast_tokenizerFalsebool使用快速 tokenizer
padding_sideleftstr模型 pad 选择
quantization_bitNoneint量化 bit 选择
compute_typeNonetorch.dtype模型参数类型
checkpoint_dirNonestr微调参数地址
modeNonestrreward、lora
plot_lossFalsebool打印训练 Loss

◆ DataArguments

@dataclass
class DataArguments:
    data_path: str = field(
        default=None, metadata={"help": "Path to the training data."}
    )

DataArguments 主要负责数据集相关参数,数据集通过 dataset 构成,通常包含下述参数:

参数名称默认类型含义
data_pathNonestr数据集地址
process_numNoneint并行处理
max_source_length512intsource 最大长度
max_target_length512inttarget 最大长度
max_samplesNoneint最大样本数
ignore_pad_tokenNoneintloss 计算是否忽略
prompt_templateNonestr样本生成 prompt 模板

◆ TrainingArguments

@dataclass
class TrainingArguments(transformers.TrainingArguments):
    cache_dir: Optional[str] = field(default=None)
    optim: str = field(default="adamw_torch")
    model_max_length: int = field(
        default=512,
        metadata={
            "help": "Maximum sequence length. Sequences will be right padded (and possibly truncated)."
        },
    )
    use_lora: bool = field(default=False)
    output_dir: str = field(default="")

TrainingArguments 主要存储模型微调,训练相关的参数:

参数名称默认类型含义
finetuning_typelorastr微调类型
lora_targetq_proj,v_projstr微调 Layer
lora_rank8intlora 降维维度
lora_alpha32.0floatlora 微调比例因子
lora_dropout0.1floatdropout 比例
num_hidden_layers32intDecode 数量
num_layer_trainable3intfreeze layer 数量
name_module_trainablemlpstrfreeze 训练层选择
output_dirNonestr模型输出地址

◆ GeneratingArguments

@dataclass
class GeneratingArguments:
    do_sample: Optional[bool] = field(
        default=True,
        metadata={"help": "Whether or not to use sampling, use greedy decoding otherwise."}
    )

GeneratingArguments 主要负责 model generate 生成的配置:

参数名称默认类型含义
do_sampleTruebool采样或贪心
temperature0.95float调整下一个 token 的概率
top_p0.7floattoken 概率 top 区间
top_k50inttoken 词库数量
num_beams1intbeam search 数量
max_lengthNoneint最大生成 token 数
max_new_tokens512int最多新 toekn 生成数
repatition_penalty1.0float重复惩罚
length_penalty1.0float长度惩罚

之前单独整理了生成的参数和代码,可以参考: LLM - model batch generate 生成文本

三.代码实现

◆ Python 代码

from typing import Optional
from dataclasses import dataclass, field
import transformers


...

    添加上述的 Argument Class

...


if __name__ == '__main__':
    parser = transformers.HfArgumentParser((ModelArguments, DataArguments, TrainingArguments, GeneratingArguments))
    model_args, data_args, training_args, generate_args = parser.parse_args_into_dataclasses()

    print(model_args)
    print(data_args)
    print(training_args)
    print(generate_args)

两行搞定多类参数,参数对应属性使用 args.xxx 调用即可。

Shell 代码

#!/bin/bash

python GetConfigByArgs.py \
    --report_to "none" \
    --data_path "data/belle_chat_ramdon_10k.json" \
    --model_name_or_path "baichuan-inc/Baichuan2-7B-Base" \
    --output_dir "output" \
    --model_max_length 512 \
    --num_train_epochs 4 \
    --per_device_train_batch_size 16 \
    --gradient_accumulation_steps 1 \
    --save_strategy epoch \
    --learning_rate 2e-5 \
    --lr_scheduler_type constant \
    --adam_beta1 0.9 \
    --adam_beta2 0.98 \
    --adam_epsilon 1e-8 \
    --max_grad_norm 1.0 \
    --weight_decay 1e-4 \
    --warmup_ratio 0.0 \
    --logging_steps 1 \
    --gradient_checkpointing True \
    --deepspeed ds_config.json \
    --bf16 False \
    --tf32 False

通过 -- 传递我们需要的参数即可。

四.总结

这个没啥总结的了,就是觉得写法比较优雅,后面自己的脚本也可以借用。

### 大型语言模型基础面试问题 #### 定义与基本概念 大型语言模型(Large Language Model, LLM)是指那些数量巨大、训练数据集庞大且能够执行多种自然语言处理任务的人工智能模型。这些模型通过大量的文本数据进行预训练,从而具备了一定的语言理解和生成能力[^1]。 ```python class LargeLanguageModel: def __init__(self, parameters_count, training_data_size): self.parameters_count = parameters_count self.training_data_size = training_data_size def generate_text(self, prompt): # Generate text based on the given prompt using trained parameters and data. pass ``` #### 架构特点与发展历程 LLM的发展经历了四个主要阶段:早期探索期、技术突破期、性能提升期以及应用拓展期。随着计算资源的增长和技术的进步,LLM逐渐从简单的神经网络演变为复杂的多层结构,并实现了前所未有的大规模并行化训练方式。 #### 关键差异对比 相比于传统的预训练语言模型(Pre-trained Language Model, PLM),LLM具有三个显著的不同之处: - **规模上的飞跃**:拥有更多的数数量; - **更强的数据适应性**:可以更好地利用未标注的大规模语料库; - **更广泛的下游应用场景**:不仅限于特定的任务领域,而是能够在多个方面展现出强大的泛化能力和迁移学习效果。 #### 数据获取与管理策略 对于构建高质量的LLM而言,确保充足而优质的输入数据至关重要。这通常涉及到制定清晰的数据可用性声明和选择合适的数据存储解决方案来保存海量的历史对话记录或其他形式的文字材料[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BIT_666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值