我带大家一起阅读一下LLaMA-Factory的源码,特别是大模型监督微调方面的源码,共同学习该框架提供的参数配置文件,方便我们从源码角度上对框架进行参数了解和调整,并致力于在此基础上添加自己的超参数。

安装

LaMA-Factory,全称Large Language Model Factory,即大型语言模型工厂。它支持多种预训练模型和微调算法,提供了一套完整的工具和接口,使得用户能够轻松地对预训练的模型进行定制化的训练和调整,以适应特定的应用场景,如智能客服、语音识别、机器翻译等。
**LLaMA-Factory源码**安装方法参照github源码给出的教程,我所使用的版本为0.9.1.dev0

微调

#运行
llamafactory-cli train qwen2__5_3b_lora.sft.yaml

由于我们运行的是llamafactory-cli的train方法,执行下面文件的方法

在这里插入图片描述

由于我们使用监督微调sft,而qwen2__5_3b_lora.sft.yaml的所有超参数通过方法get_train_args(args)获取进而产生model_args、data_args、finetuning_args等模型、数据、训练、微调、生成的参数对象进行传递,下一小节追溯超参数来源源码,执行下面的方法

在这里插入图片描述

转接到该文件LLaMA-Factory/src/llamafactory/train/sft/workflow.py,该文件为自监督微调的核心文件,是微调的整个过程,包含准备数据集、初始化训练器、训练、评估、预测的方法。其通过导入以下类并按顺序执行以下这些功能:

from ...data import SFTDataCollatorWith4DAttentionMask, get_dataset, get_template_and_fix_tokenizer# 数据集处理方法
from ...extras.constants import IGNORE_INDEX# 常数
from ...extras.misc import get_logits_processor# 标签处理
from ...extras.ploting import plot_loss# 损失值绘图
from ...model import load_model, load_tokenizer #加载token和模型
from ..trainer_utils import create_modelcard_and_push #保存参数
from .metric import ComputeAccuracy, ComputeSimilarity, eval_logit_processor # 准确度和相似度等计算工具类
from .trainer import CustomSeq2SeqTrainer #导入训练器

超参数来源源码

src/llamafactory/train/tuner.py中的get_train_args(args)方法进入src/llamafactory/hparams/parser.py,该文件用于超参数输入值的容错提醒。

之后get_train_args(args)方法执行_parse_train_args(args)方法跳入到下面方法

在这里插入图片描述

又通过进入_EVAL_ARGS数组内FinetuningArguments参数跳转到src/llamafactory/hparams/finetuning_args.py文件执行FinetuningArguments类,通过下面。我们随便挑选一个参数stage来识别设置我们自己想要的参数,只要参数与后面的Literal中的内容比如‘sft’相对应,算法便可以执行,我们通过该类:

  • 可以寻找一些qwen2__5_3b_lora.sft.yaml配置文件中没有的参数进行设置
  • 自己添加模型配置,修改和添加llama_factory的源码,以配置我们自己需要的超参数

相似的配置类包括同级路径下的data_args.py、evaluation_args.py、generating_args.py、model_args.py、parser.py

@dataclass
class FinetuningArguments(FreezeArguments, LoraArguments, RLHFArguments, GaloreArguments, BAdamArgument):
    pure_bf16: bool = field(
        default=False,
        metadata={"help": "Whether or not to train model in purely bf16 precision (without AMP)."},
    )
    stage: Literal["pt", "sft", "rm", "ppo", "dpo", "kto"] = field(
        default="sft",
        metadata={"help": "Which stage will be performed in training."},
    )

在这里插入图片描述

更多推荐