使用AI Gallery微调大师训练模型
AI Gallery支持将模型进行微调,训练后得到更优模型。
场景描述
模型微调是深度学习中的一种重要技术,它是指在预训练好的模型基础上,通过调整部分参数,使其在特定任务上达到更好的性能。 在实际应用中,预训练模型是在大规模通用数据集上训练得到的,而在特定任务上,这些模型的参数可能并不都是最合适的,因此需要进行微调。
AI Gallery的模型微调,简单易用,用户只需要选择训练数据、创建微调任务,模型微调就会对数据进行训练,快速生成模型。
约束限制
- 如果模型的“任务类型”是“文本问答”或“文本生成”,则支持模型微调。如果模型的“任务类型”是除“文本问答”和“文本生成”之外的类型(即自定义模型),则模型文件必须满足自定义模型规范(训练)才支持模型自定义训练。
- 当使用自定义镜像进行模型微调时,要确认镜像是否满足自定义镜像规范,否则无法成功完成自定义训练。
进入模型微调
- 登录AI Gallery。
- 单击“模型”进入模型列表。
- 选择需要进行微调训练的模型,单击模型名称进入模型详情页。
- 在模型详情页,选择“训练 > 微调大师”进入微调工作流页面。
选择训练任务类型
选择模型微调的训练任务类型。
- 当模型的“任务类型”是“文本问答”或“文本生成”时,“训练任务类型”默认和模型“任务类型”一致。“训练任务类型”支持修改,如果模型文件满足自定义模型规范(训练),则“训练任务类型”支持选择“自定义”。
- 当模型的“任务类型”是除“文本问答”和“文本生成”之外的类型(即自定义模型)时,则“训练任务类型”默认为“自定义”,支持修改为“文本问答”或“文本生成”。
- 当使用自定义镜像进行模型微调时,“训练任务类型”默认为“自定义”,且不支持修改。
准备数据
- 本地上传数据需要确保数据已按照数据集要求完成编排。如果是自定义模型,此处的数据集要求即为模型文件“dataset_readme.md”里的内容。
- 单个文件最大5GB,所有文件总大小不超过50G。
设置并启动作业
- 在微调工作流的“作业设置”环节配置训练作业参数。
- 算法配置,会显示已选模型的信息,基于已选模型选择微调方式。
- 当“训练任务类型”是“文本问答”或“文本生成”时,AI Gallery支持的微调方式是LoRA。
- 当“训练任务类型”是“自定义”时,微调方式来自于模型文件“train_params.json” 。
低秩适应(LoRA)是一种重参数化方法,旨在减少具有低秩表示的可训练参数的数量。权重矩阵被分解为经过训练和更新的低秩矩阵。所有预训练的模型参数保持冻结。训练后,低秩矩阵被添加回原始权重。这使得存储和训练LoRA模型更加高效,因为参数明显减少。
- 超参数设置,基于训练作业配置超参。超参指的是模型训练时原始数据集中实际字段和算法需要字段之间的映射关系。
- 当“训练任务类型”是“文本问答”或“文本生成”时,则常见的超参说明请参见表1。
- 当“训练任务类型”是“自定义”时,超参信息来自于模型文件“train_params.json” 。如果不使用可选超参,建议单击右侧的删除按钮,删除参数。
表1 常见超参说明 参数名称
参数类型
说明
data_url
String
数据OBS存储路径。
train_url
String
微调产物输出OBS路径。
train_data_file
String
训练数据文件名。
test_data_file
String
测试数据文件名。
prompt_field
String
数据prompt列名。
response_field
String
数据response列名。
history_field
String
数据history列名。
prefix
String
数据格式化时使用的前缀。
instruction_template
String
数据格式化时使用的指令模板。
response_template
String
数据格式化时使用的回答模板。
lora_alpha
int
Lora scaling的alpha参数。
lora_dropout
float
Lora dropout概率。
lora_rank
int
Lora attention维度。
per_device_train_batch_size
int
用于训练的每个GPU/TPU core/CPU的批处理大小。
gradient_accumulation_steps
int
梯度累计步数。
max_steps
int
训练最大步数,如果数据耗尽,训练将会在最大步数前停止。
save_steps
int
checkpoint保存步数。
logging_steps
int
日志输出步数。
learning_rate
float
初始学习率。
max_grad_norm
float
梯度裁剪最大范数。
warmup_ratio
float
热身步数比。
max_seq_length
int
数据最大序列长度。
finetuned_model
String
前序微调产物OBS路径。
bits
int
模型量化bit数,如4、8。
max_eval_samples
int
最大测试数据数。
- 计算规格选择,按需选择计算规格。单击“选择”,在弹窗中选择资源规格,单击“确定”。
- 在“所在区”选择计算规格所在的区域。默认显示全部区域的计算规格。
- 选择计算规格不可用的资源会置灰。右侧“配置信息”区域会显示计算规格的详细数据,AI Gallery会基于资产和资源情况分析该任务是否支持设置“商品数量”,用户可以基于业务需要选择任务所需的资源卡数。
如果选择付费资源,则请确认账号未欠费,且余额高于所选计算规格的收费标准,否则可能会导致AI Gallery工具链服务异常中断。AI Gallery的计算规格的计费说明请参见计算规格说明。
- 算法配置,会显示已选模型的信息,基于已选模型选择微调方式。
- 作业参数配置完成后,单击“启动作业”。
- 在“订单信息确认”页面,确认服务信息和费用,单击“确定”提交模型训练任务。
单击“返回模型训练”跳转到微调大师页面,可以查看训练作业状态。当“状态”为“训练完成”时,表示微调任务完成。
- 单击操作列的“查看模型”跳转到微调获得的新模型的详情页面。
- 单击操作列的“任务详情”可以在弹窗中查看“训练信息”、“训练日志”和“指标效果”。
- 单击操作列的“更多 > 删除任务”,可以删除微调任务,但是微调获得的新模型不会被删除。
查看训练效果
启动模型微调任务后,在微调大师列表单击操作列的“任务详情”,在弹窗中选择“指标效果”页签,可以查看训练效果。
指标名称 |
指标说明 |
---|---|
NPU/GPU利用率 |
在训练过程中,机器的NPU/GPU占用情况(横坐标时间,纵坐标占用率)。 |
显存利用率 |
在训练过程中,机器的显存占用情况(横坐标时间,纵坐标占用率)。 |
吞吐 |
在训练过程中,每卡处理tokens数量(tokens/s/p)。每种框架计算方式不一致,例如,ATB可通过“samples per second*seq_lenth/总卡数”得到tokens/s/p,输出给throughout字段,seq_lenth取值在训练脚本中可以查看。 单机8卡吞吐量一般为1650tokens/s/p,双机16卡吞吐量一般为1625tokens/s/p。
说明:
自定义训练或自定义镜像训练,需要提前在训练启动脚本(例如“train.py”)中定义好迭代次数、LOSS和吞吐数据的存放位置,以及存放格式(必须是“迭代次数|loss|吞吐”),才能在此处正常查看吞吐和“训练LOSS”曲线。 |
训练LOSS |
训练阶段的LOSS变化,模型在日志里用LOSS关键词记录数据,按照训练迭代周期记录LOSS值。 |
微调产物说明
模型微调完成后,会得到一个新模型,即微调产物。
在微调大师页面,单击操作列的“查看模型”跳转到微调获得的新模型的详情页面。选择“模型文件”页签可以查看微调产物。各文件说明请参见表3。
文件名 |
文件说明 |
---|---|
gallery_train文件夹 |
自定义模型的模型训练文件,仅当使用自定义模型微调时才会有这个微调产物,内容和预训练模型里的gallery_train文件一致。 |
training_logs/user_params.json |
微调配置参数信息,AI Gallery会自动将微调设置的参数信息记录在此文件下。 |
“README.md” |
模型的基础信息。内容和预训练模型里“模型文件”页签的“README.md”一致。 |
其他文件 |
当使用自定义模型微调时,可能还会有一些其他微调产物,这是由自定义模型的训练脚本文件train.py决定的,如果训练脚本定义了归档其他训练产物,就会在此处呈现。 |