项目地址 https://github.com/hiyouga/LLaMA-Factory
模型层参数
这段代码是使用Python的dataclasses
模块定义的一个数据类ModelArguments
,用于管理和存储与模型微调相关的参数。这个类的设计是为了方便地处理和传递命令行参数或配置文件中的参数,这些参数通常用于指定模型训练过程中的各种设置。
下面是每个字段的含义:
model_name_or_path
:指定模型权重或标识符的路径,可以是本地的路径,也可以是huggingface.co/models或modelscope.cn/models上的模型名称。
adapter_name_or_path
:适配器权重或标识符的路径,用于加载特定的适配器。
cache_dir
:预训练模型下载的存储路径。
use_fast_tokenizer
:是否使用快速的tokenizer(基于tokenizers库)。
resize_vocab
:是否调整tokenizer的词汇表和嵌入层的尺寸。
split_special_tokens
:在分词过程中是否拆分特殊tokens。
model_revision
:使用的特定模型版本,可以是分支名称、标签名称或提交ID。
quantization_bit
:用于模型量化的位数。
quantization_type
:在int4训练中使用的量化数据类型。
double_quantization
:在int4训练中是否使用双重量化。
rope_scaling
:用于RoPE嵌入的缩放策略。
flash_attn
:是否启用FlashAttention-2以加快训练速度。
shift_attn
:是否启用LongLoRA提出的shift短注意力(S^2-Attn)。
use_unsloth
:是否使用unsloth的优化来训练LoRA。
disable_gradient_checkpointing
:是否禁用梯度检查点。
upcast_layernorm
:是否将layernorm权重升级为fp32。
upcast_lmhead_output
:是否将lm_head的输出升级为fp32。
hf_hub_token
:登录Hugging Face Hub的认证令牌。
ms_hub_token
:登录ModelScope Hub的认证令牌。
export_dir
:导出模型的存储路径。
export_size
:导出模型文件分片的大小(以GB为单位)。
export_quantization_bit
:导出模型量化的位数。
export_quantization_dataset
:用于量化导出模型的数据集路径或名称。
export_quantization_nsamples
:用于量化的样本数量。
export_quantization_maxlen
:用于量化的模型输入的最大长度。
export_legacy_format
:是否以.bin
文件保存而不是.safetensors
。
export_hub_model_id
:如果将模型推送到Hugging Face hub,则指定仓库的名称。
print_param_status
:出于调试目的,打印模型参数的状态。__post_init__
方法在对象初始化后调用,用于设置额外的属性和执行一些验证。例如,它检查split_special_tokens
和use_fast_tokenizer
是否冲突,验证量化位数的有效性,并在需要量化数据集时检查其是否存在。to_dict
方法将数据类实例转换为一个字典,这有助于将参数以字典形式传递给函数或保存到配置文件中。这个类的使用方式通常是在训练脚本中创建一个实例,并从命令行参数或配置文件中填充其字段。然后,这个实例被传递给训练函数,训练函数使用这些参数来配置和执行模型训练。
微调层参数
这段代码定义了一个名为 FinetuningArguments
的 Python 类,该类用于处理与模型微调相关的参数。下面是代码的详细解读:
@dataclass
装饰器:这是一个 Python 标准库中的装饰器,用于自动生成特殊方法(如 __init__()
、__repr__()
等),从而使得类实例能够像数据类一样使用。
class FinetuningArguments(FreezeArguments, LoraArguments, RLHFArguments)
: 这个类继承了 FreezeArguments
、LoraArguments
和 RLHFArguments
三个父类,这三个类可能定义了与模型微调相关的参数。
r"""..."""
: 这是多行字符串,用于为类和属性提供文档字符串(docstring)。
stage
: 这是一个可选的枚举字段,用于指定训练中的阶段。默认值为 "sft"
。
finetuning_type
: 这是一个可选的枚举字段,用于指定微调方法。默认值为 "lora"
。
use_llama_pro
, disable_version_checking
, plot_loss
: 这些都是可选的布尔字段,分别用于指定是否仅使扩展块中的参数可训练、是否禁用版本检查以及是否保存训练损失曲线。
def __post_init__(self)
: 这是一个特殊方法,在实例初始化后自动调用。这个方法主要用于处理一些后初始化的逻辑。
def split_arg(arg)
: 这是一个内部函数,用于将字符串参数拆分为列表。
save_to_json
和 load_from_json
: 这两个方法分别用于将实例内容保存为 JSON 格式和从 JSON 文件创建实例。
assert
语句:用于检查某些条件是否满足,如果不满足则抛出 AssertionError
异常。
raise ValueError
: 用于抛出 ValueError
异常。这个类的实例可以用于处理与模型微调相关的参数,包括指定训练阶段、微调方法、是否保存训练损失曲线等。
FreezeArguments 参数解读
FreezeArguments
类是一个Python数据类,用于存储和管理与“冻结”或部分参数训练相关的参数。这种训练方式在微调期间只更新模型参数的子集,可以减少训练所需的计算资源,或者用于数据有限的情况下微调模型。以下是
FreezeArguments
类中字段的解释:
name_module_trainable
:此可选字段允许用户指定应设置为可训练的模型模块。用户可以提供用逗号分隔的模块名称列表,或使用关键字“all”表示所有可用模块都应设置为可训练。帮助文本为不同模型架构提供了模块名称的示例,例如LLaMA的“mlp”和“self_attn”,或者BLOOM、Falcon和ChatGLM的“mlp”和“self_attention”。实际的选择取决于正在使用的特定模型架构。
num_layer_trainable
:此可选字段指定模型中应设置为可训练的层数。默认值为3,但用户可以根据自己的微调任务需要将其设置为任何整数值。每个字段的
metadata
属性包含一个 help
键,提供了关于字段代表含义以及如何使用的详细描述。这些信息可以通过文档字符串访问,或者在为命令行界面生成帮助信息时使用。总的来说,
FreezeArguments
类旨在与其他参数类(如 LoraArguments
和 RLHFArguments
)结合使用,为机器学习模型的微调提供一组全面的选项。
LoraArguments 参数解读LoraArguments
类是一个Python数据类,用于存储和管理与LoRA(低秩适应)训练相关的参数。LoRA是一种微调大型语言模型的技术,可以减少计算资源的需求。
以下是 LoraArguments
类中字段的解释:
additional_target
:此可选字段允许您指定除LoRA层本身之外,应设置为可训练并在最终检查点中保存的模块名称。
lora_alpha
:此可选字段设置LoRA微调的缩放因子。如果未提供,则默认为 lora_rank * 2
。
lora_dropout
:此可选字段指定LoRA微调时要使用的丢弃率。默认值为0.0,表示不应用丢弃。
lora_rank
:此可选字段设置LoRA微调的内在维度。默认值为8,决定了LoRA技术引入的额外参数的大小。
lora_target
:此可选字段指定应应用LoRA的目标模块的名称。您可以提供用逗号分隔的模块名称列表,或使用“all”表示对所有可用模块应用LoRA。元数据为不同模型架构提供了模块名称的示例,如LLaMA、BLOOM、Falcon、ChatGLM、Baichuan、Qwen、InternLM2等。
lora_bf16_mode
:此可选字段指示是否以bfloat16精度训练LoRA适配器。默认值为False,表示使用全精度(通常是float32)。
use_rslora
:此可选字段指定是否对LoRA层使用秩稳定缩放因子。默认值为False。
create_new_adapter
:此可选字段指示是否创建一个带有随机初始化权重的新的适配器。默认值为False。每个字段的
metadata
属性包含一个 help
键,提供了关于字段代表含义以及如何使用的详细描述。这些信息可以通过文档字符串访问,或者在为命令行界面生成帮助信息时使用。LoraArguments
类旨在与其他参数类(如 FreezeArguments
和 RLHFArguments
)结合使用,为使用LoRA技术微调机器学习模型提供一组全面的选项。
RLHFArguments参数解读
RLHFArguments
类是一个Python数据类,用于存储和管理与PPO(Proximal Policy Optimization)和DPO(Deep Policy Optimization)训练相关的参数。这些技术通常用于强化学习中的策略优化,特别是在训练语言模型时。
以下是 RLHFArguments
类中字段的解释:
dpo_beta
:此可选字段设置DPO损失中的beta参数。默认值为0.1。
dpo_loss
:此可选字段指定要使用的DPO损失类型。支持的选项有“sigmoid”、“hinge”、“ipo”和“kto_pair”。默认值为“sigmoid”。
dpo_ftx
:此可选字段设置DPO训练中监督式微调损失的系数。默认值为0。
ppo_buffer_size
:此可选字段设置在PPO优化步骤中经验缓冲区要包含的迷你批次数。默认值为1。
ppo_epochs
:此可选字段设置在PPO优化步骤中要执行的轮数。默认值为4。
ppo_logger
:此可选字段指定在PPO训练中使用的日志记录器。支持的选项有“wandb”和“tensorboard”。默认值为None,表示不使用日志记录器。
ppo_score_norm
:此可选字段指示在PPO训练中是否使用得分归一化。默认值为False。
ppo_target
:此可选字段设置PPO训练中自适应KL控制的目标KL值。默认值为6.0。
ppo_whiten_rewards
:此可选字段指示在PPO训练中是否对奖励进行白化处理,然后再计算优势。默认值为False。
ref_model
:此可选字段指定用于PPO或DPO训练的参考模型的路径。默认值为None。
ref_model_adapters
:此可选字段指定参考模型适配器的路径。默认值为None。
ref_model_quantization_bit
:此可选字段设置参考模型的量化位数。支持的选项为4或8位,或者None表示不量化。默认值为None。
reward_model
:此可选字段指定用于PPO训练的奖励模型的路径。默认值为None。
reward_model_adapters
:此可选字段指定奖励模型适配器的路径。默认值为None。
reward_model_quantization_bit
:此可选字段设置奖励模型的量化位数。支持的选项为4或8位,或者None表示不量化。默认值为None。
reward_model_type
:此可选字段指定PPO训练中奖励模型的类型。支持的选项有“lora”、“full”和“api”。默认值为“lora”,表示仅支持LoRA训练。每个字段的
metadata
属性包含一个 help
键,提供了关于字段代表含义以及如何使用的详细描述。这些信息可以通过文档字符串访问,或者在为命令行界面生成帮助信息时使用。RLHFArguments
类旨在与其他参数类结合使用,为使用PPO和DPO技术训练机器学习模型提供一组全面的选项。
DataArguments 管理与训练和评估机器学习模型输入数据相关的参数
DataArguments
类是一个Python数据类,用于存储和管理与训练和评估机器学习模型输入数据相关的参数。这些参数定义了数据处理的各个方面,包括数据集的选择、预处理和流式传输。
以下是 DataArguments
类中字段的中文解释:
template
:此可选字段指定用于在训练和推理中构建提示的模板。
dataset
:此可选字段命名要使用的数据集。多个数据集可以用逗号分隔。
dataset_dir
:此可选字段提供包含数据集的文件夹的路径。
split
:此可选字段指示用于训练和评估的数据集拆分。
cutoff_len
:此可选字段设置模型输入在分词之后的最大长度。
reserved_label_len
:此可选字段指定在分词之后为标签保留的最小长度。它必须小于 cutoff_len
。
train_on_prompt
:此可选字段确定在训练期间是否禁用提示上的掩码。
streaming
:此可选字段启用数据集流式传输,允许模型以连续流的方式处理数据,而不是将整个数据集加载到内存中。
buffer_size
:此可选字段设置在数据集流式传输期间用于随机抽样示例的缓冲区大小。
mix_strategy
:此可选字段指定在混合数据集时使用的策略(例如,串联或交错,以及下采样或过采样)。
interleave_probs
:此可选字段提供从多个数据集中抽样数据的概率。数据集之间用逗号分隔。
overwrite_cache
:此可选字段确定是否覆盖已缓存的训练和评估集。
preprocessing_num_workers
:此可选字段指定用于预处理数据的进程数。
max_samples
:此可选字段为每个数据集截断示例数量,用于调试目的。
eval_num_beams
:此可选字段设置评估时使用的束数。它将传递给 model.generate
方法。
ignore_pad_token_for_loss
:此可选字段指示是否在损失计算中忽略与填充标签对应的标记。
val_size
:此可选字段设置开发集的大小,可以是0到1之间的整数或浮点数。
sft_packing
:此可选字段在监督式微调阶段启用问题和答案的打包。
cache_path
:此可选字段提供保存或加载预处理数据集的路径。__post_init__
方法在类实例初始化后调用,执行一些验证检查。它确保 reserved_label_len
小于 cutoff_len
,流式传输模式具有整数值的验证集大小,并且 max_samples
不与流式传输兼容。DataArguments
类旨在与其他参数类结合使用,为使用这些参数加载、预处理和流式传输输入数据以训练模型的过程提供支持。
GeneratingArguments
GeneratingArguments
类是一个Python数据类,用于存储和管理与指定解码参数相关的参数。这些参数用于控制模型在生成文本时的行为,例如是否使用采样、温度参数、Top-P采样、Top-K过滤、束搜索、最大长度、重复惩罚和长度惩罚等。
以下是 GeneratingArguments
类中字段的中文解释:
do_sample
:此可选字段指示是否使用采样,如果不使用采样,则使用贪心解码。
temperature
:此可选字段用于调整下一个标记的概率值。
top_p
:此可选字段指定保留的最高概率标记的最小集合,这些标记的概率之和至少为 top_p
或更高。
top_k
:此可选字段指定用于Top-K过滤的最高概率词汇表标记的数量。
num_beams
:此可选字段指定束搜索中使用的束数。值为1意味着不使用束搜索。
max_length
:此可选字段设置生成标记的最大长度。它可能会被 max_new_tokens
覆盖。
max_new_tokens
:此可选字段设置要生成的标记的最大数量,忽略提示中的标记数量。
repetition_penalty
:此可选字段用于重复惩罚的参数。值为1.0意味着没有惩罚。
length_penalty
:此可选字段是与束搜索一起使用的长度惩罚的指数参数。to_dict
方法将类的实例转换为一个字典,其中包含类的所有字段及其值。如果 max_new_tokens
字段的值大于0,则从字典中移除 max_length
字段;否则,移除 max_new_tokens
字段。这个方法可能用于将类的实例转换为其他格式,例如传递给函数或保存到文件中。GeneratingArguments
类旨在与其他参数类结合使用,为使用这些参数控制模型生成文本的行为的过程提供支持。EvaluationArguments
类是一个Python数据类,用于存储和管理与指定评估参数相关的参数。这些参数定义了如何评估机器学习模型,包括评估任务名称、评估数据集的路径、每个GPU的批处理大小、随机种子、使用的语言、用于少样本学习的示例数量、保存评估结果的路径以及下载评估数据集的模式。以下是
EvaluationArguments
类中字段的中文解释:
task
:此字段指定评估任务的名称。
task_dir
:此可选字段提供包含评估数据集的文件夹的路径。
batch_size
:此可选字段设置每个GPU上的评估批处理大小。
seed
:此可选字段指定用于数据加载器的随机种子。
lang
:此可选字段指定评估中使用的语言。
n_shot
:此可选字段指定用于少样本学习的示例数量。
save_dir
:此可选字段提供保存评估结果的路径。
download_mode
:此可选字段指定用于评估数据集的下载模式。默认值为 DownloadMode.REUSE_DATASET_IF_EXISTS
,表示如果数据集已存在,则重用。__post_init__
方法在类实例初始化后调用,执行一些验证检查。如果 save_dir
已经存在,则引发一个值错误,提示用户使用另一个路径。EvaluationArguments
类旨在与其他参数类结合使用,为使用这些参数控制模型评估过程的过程提供支持。
生成式模型的愈发完善,让我感受到了深刻的危机。我已经不再是我。而她正在抹杀一群劳动者的价值。但任何时代的改革都需要代价。这个代价值得我们所有的期待。
用我的专用邀请链接,注册 OpenBayes,双方各获得 60 分钟 RTX 4090 使用时长,支持累积,永久有效:
https://openbayes.com/console/signup?r=nlpygq_pw7E
推荐使用openbayes进行生成式模型加速计算