目录
文章目录
基于llamafactory微调
微调操作指南
- 具体的基于llamafactory微调操作指南,可以见另一篇笔记:基于NPU的LLama factory安装&微调大模型使用指南https://blog.csdn.net/weixin_43836433/article/details/144702095?spm=1001.2014.3001.5501
微调参数介绍
- llamafactory涉及的微调参数一般包括以下这些,保存在
yaml
文件中
-
bf16
: 是否使用半精度浮点数bf16
进行训练。bf16
是一种低精度浮点数类型,好处是,可以减少内存使用并可能加速训练,但可能会降低模型性能,。在深度学习中,我们可以选择不同的数值精度来进行模型的训练和计算。不同的精度会影响计算资源的使用、训练速度和模型的精确度。下面我用更通俗的语言解释一下这些术语: FP16 (Half Precision,半精度): 这种方式使用16位的浮点数来保存和计算数据。想象一下,如果你有一个非常精细的秤,但现在只用这个秤的一半精度来称重,这就是FP16。它不如32位精度精确,但计算速度更快,占用的内存也更少。 BF16 (BFloat16): BF16也是16位的,但它在表示数的方式上和FP16不同,特别是它用更多的位来表示数的大小(指数部分),这让它在处理大范围数值时更加稳定。你可以把它想象成一个专为机器学习优化的“半精度”秤,尤其是在使用特殊的硬件加速器时。 FP32 (Single Precision,单精度): 这是使用32位浮点数进行计算的方式,可以想象为一个标准的、全功能的精细秤。它在深度学习中非常常见,因为它提供了足够的精确度,适合大多数任务。 Pure BF16: 在表示数的方式上和FP16不同,特别是它用更多的位来表示数的大小(指数部分),这让它在处理大范围数值时更加稳定。你可以把它想象成一个专为机器学习优化的“半精度”秤,尤其是在使用特殊的硬件加速器时。 FP32 (Single Precision,单精度): 这是使用32位浮点数进行计算的方式,可以想象为一个标准的、全功能的精细秤。它在深度学习中非常常见,因为它提供了足够的精确度,适合大多数任务。 Pure BF16: 这种模式下,所有计算都仅使用BF16格式。这意味着整个模型训练过程中,从输入到输出,都在使用为机器学习优化的半精度计算。
-
cutoff_len
: 训练数据集的长度截断,也可以看作是训练数据的最大长度。超过这个长度的样本将被裁剪。 -
dataset
: 训练数据集的文件列表。这些文件包含模型所需的训练数据。使用的数据集列表,所有字段都需要按上文在data_info.json里注册,多个数据集用","分隔 -
dataset_dir
: 训练数据集文件的目录。 数据集所在目录,可以直接使用项目自带的data目录 -
do_train
: 是否进行训练。如果设置为 false,则模型将进入评估模式。 -
eval_steps
: 模型在每次训练后评估的步数。如果设置为 10,模型将在每 10 个训练步后进行一次评估。 -
eval_strategy
: 评估策略。可以设置为 “steps”(每次训练后评估)或 “epochs”(每个epoch后评估)。 -
finetuning_type
: 微调训练的类型,枚举值,有"lora",“full”,"freeze"等,比如设置为 “lora”,表示使用 LoRA(Low-Rank Adaptation)进行微调。 Full:这种方式就是从头到尾完全训练一个模型。想象一下,你有一块白纸,你要在上面画出一幅完整的画作,这就是Full Training。你从零开始,逐步训练模型,直到它能够完成你想要的任务。 Freeze:这种方式有点像是在一幅半完成的画上继续作画。在模型中,有些部分(通常是模型的初级部分,如输入层或底层特征提取部分)是已经训练好的,这部分会被“冻结”,不再在训练过程中更新。你只更新模型的其他部分,这样可以节省训练时间和资源。 LoRA:这是一种比较新的技术,全称是“Low-Rank Adaptation”。可以理解为一种轻量级的模型调整方式。它主要是在模型的某些核心部分插入小的、低