构建微调训练任务
创建微调训练任务
创建NLP大模型微调任务步骤如下:
- 登录ModelArts Studio大模型开发平台,在“我的空间”模块,单击进入所需空间。
- 在左侧导航栏中选择“模型开发 > 模型训练”,单击界面右上角“创建训练任务”。
- 在“选择模型”页面,选择“模型广场 > 大语言模型 > 模型”,单击“确定”进入“创建训练任务”页面。
- 在“创建训练任务”页面,参考表1完成训练参数设置,参数默认值在创建训练任务的时候会带出。
表1 NLP大模型微调参数说明 参数分类
训练参数
参数说明
训练配置
选择模型
可以修改如下信息:
- 来源:选择“模型广场”。
- 类型:选择“大语言模型”,并选择训练所用的基础模型和版本,如:Pangu-NLP-N1-32K | V3.2.36.1。
训练类型
选择“微调”。
训练目标
选择“全量微调”
- 全量微调:在模型有监督微调过程中,对大模型的全部参数进行更新。这种方法通常会带来最优的模型性能,但需要大量的计算资源和时间,计算开销较高。
- LoRA微调:在模型微调过程中,只对特定的层或模块的参数进行更新,而其余参数保持冻结状态。这种方法可以显著减少计算资源和时间消耗,同时在很多情况下,依然能够保持较好的模型性能。
高级设置
checkpoints:在模型训练过程中,用于保存模型权重和状态的机制,详细配置参见断点续训配置。
开启断点续训后对于未训练完成的模型,可以通过单击训练任务名称,进入“训练结果”页签,通过“编辑训练”入口选中需要进行断点续训的checkpoints进行续训。
- 关闭:关闭后不保存checkpoints,无法基于checkpoints执行续训操作。
- 自动:自动保存训练过程中的所有checkpoints。
- 自定义:根据设置保存指定数量的checkpoints。
训练参数
热身比例
本案例中设置为0.01。
热身比例是指在模型训练过程中逐渐增加学习率的过程。在训练的初始阶段,模型的权重通常是随机初始化的,此时模型的预测能力较弱。如果直接使用较大的学习率进行训练,可能会导致模型在初始阶段更新过快,从而影响模型的收敛。
为了解决这个问题,可以在训练的初始阶段使用较小的学习率,然后逐渐增加学习率,直到达到预设的最大学习率。这个过程就叫做热身比例。通过使用热身比例,可以避免模型在初始阶段更新过快,从而有助于模型更好地收敛。
序列长度
本案例中设置为32768。
sequence_length,训练单条数据的最大长度,超过该长度的数据在训练时将被截断。
数据批量大小
本案例中设置为8。
数据集进行分批读取训练,设定每个批次数据的大小。
通常情况下,较大的数据批量可以使梯度更加稳定,从而有利于模型的收敛。然而,较大的数据批量也会占用更多的显存资源,这可能导致显存不足,并且会延长每次训练的时长。
学习率衰减比率
本案例中设置为0.1。
学习率衰减后的比率,用于控制训练过程中学习率的下降幅度。经过衰减后,学习率的最低值由初始学习率和衰减比率决定。其计算公式为:最低学习率 = 初始学习率 * 学习率衰减比率。也就是说,学习率在每次衰减后不会低于这个计算出来的最低值。
权重衰减系数
本案例中设置为0.1。
通过在损失函数中增加一个与模型权重大小相关的惩罚项,来鼓励模型保持权重较小,从而防止模型过于复杂或过拟合训练数据。
优化器
本案例中设置为adamw。
优化器参数指的是用于更新模型权重的优化算法的相关参数,可以选择adamw。
- adamw是一种改进的Adam优化器,它在原有的基础上加入了权重衰减(weight decay)的机制,可以有效地防止过拟合(overfitting)的问题。
学习率
本案例中设置为0.00002。
学习率决定了每次训练时模型参数更新的幅度。选择合适的学习率非常重要:如果学习率太大,模型可能会无法收敛;如果学习率太小,模型的收敛速度会变得非常慢。
训练轮数
本案例中设置为3。
指完成全部训练数据集训练的次数。
模型保存策略
本案例中设置为save_checkpoint_steps。
保存训练中间产物策略,支持按照步数或按照训练epoch保存。按需设置,如果设置为save_checkpoint_steps,会使用save_checkpoint_steps参数的设置。如果设置为save_checkpoint_epoch,会使用save_checkpoint_epoch参数的设置。
Checkpoint保存间隔
本案例中设置为100。
save_checkpoint_steps,训练过程中每隔多少个训练步长保存一次模型Checkpoint文件。
Checkpoint保存轮数
本案例中设置为1。
训练多少epoch的数据保存一份中间训练产物,可以和save_checkpoint_steps同时设置,根据checkpoint_save_strategy判断是否启用。
eg:2表示每训练2个epoch的数据保存一份中间产物
模型保存步数
本案例中设置为100。
指每训练一定数量的步骤(或批次)后,模型的状态就会被保存下来。
可以通过token_num = step * batch_size * sequence公式进行预估。其中:
- token_num:已训练的数据量。
- step:已完成的训练步数。
- batch_size:每个训练步骤中使用的样本数据量。
- sequence:每个数据样本中的Token数量。
数据量以Token为单位。
旋转位置编码
本案例中设置为1000000。
rotary_base,位置编码的基底值,增强模型对序列中位置信息的捕捉能力,数值越大,模型能够处理的序列长度更长,泛化能力更好,建议使用默认值。
Agent微调
本案例中设置为关闭。
训练Agent模型时,可以开启此参数。通过调整训练数据中的Prompt来引导模型在特定领域或任务上,生成更符合预期的回答。
使用此参数前,请先联系盘古NLP模型工程师调整Prompt和训练数据。
训练数据配置
训练集
选择训练模型所需的数据集。要求数据集经过发布操作,操作方法请参见构建微调训练任务数据集。
验证集
- 若选择“分割训练集”,则需进一步配置数据拆分比例。
- 若选择“选择数据集”,则需选择导入的数据集。
资源配置
计费模式
选择训练当前任务的计费模式。
训练单元
选择训练单元数。
单实例训练单元数
选择单实例训练单元数。
实例数
选择实例数。
订阅提醒
订阅提醒
该功能开启后,系统将在任务状态更新时,通过短信或邮件将提醒发送给用户。
发布模型
开启自动发布
开启自动发布后,模型训练完成的最终产物会自动发布为空间资产,以便对模型进行压缩、部署、评测等操作或共享给其他空间。
基本信息
名称
训练任务名称。
描述
训练任务描述。
表格中展示了本案例所需的微调训练参数,不同模型训练参数存在一定差异,请以前端页面展示为准。
- 参数填写完成后,单击“立即创建”。
- 创建好训练任务后,页面将返回“模型训练”页面,可随时查看当前任务的状态。
断点续训配置
断点续训练是指因为某些原因(例如容错重启、资源抢占、作业卡死等)导致训练作业还未完成就被中断,下一次训练可以在上一次的训练基础上继续进行。这种方式对于需要长时间训练的模型而言比较友好。
- 断点续训练是通过checkpoint机制实现。
checkpoint的机制:在模型训练的过程中,不断地保存训练结果(包括但不限于EPOCH、模型权重、优化器状态、调度器状态)。即便模型训练中断,也可以基于checkpoint接续训练。
- 当需要从训练中断的位置接续训练,只需要加载checkpoint,并用checkpoint信息初始化训练状态即可。
图1 checkpoint续训配置
- 模型训练过程中点开训练详情页面,会展示所有保存的checkpoint信息,选择需要恢复的checkpoint,可以看到三种续训方式,区别如表2所示。
表2 checkpoint续训方式清单 序号
续训方式
说明
1
从所选checkpoint创建新训练
创建新的训练任务,可以重新选择数据集,只会使用checkpoint中权重的信息,其余的如优化器状态、调度器状态不会读取。
2
从所选checkpoint继续训练
继续原有的任务,会读取模型权重、优化器状态、调度器状态并用于初始化,主要解决由于硬件、网络相关的故障导致训练的中断。
3
从所选checkpoint跳过step继续训练
继续原有的任务,会读取模型权重、优化器状态、调度器状态并用于初始化,但会跳过该checkpoint之后的部分数据(用户可配置),用于解决由于数据质量差导致的loss不收敛问题。
训练详情页的checkpoint输出发布成资产之后,与正常训练结束的模型产物一致,可以支持增量微调,LoRA微调,部署等功能。