使用AI原生应用引擎完成模型调优
模型调优是一种通过对模型进行微调来适应特定任务或数据集的技术,适用于需要个性化定制或在特定任务上追求更高性能表现的场景。在模型调优过程中,用户需要构建一个符合业务场景任务的训练集,这个训练集通常由业务数据和业务逻辑构成。然后,用户需要调整模型的参数,以便模型可以更好地学习这个训练集。最后,用户需要训练模型,让模型可以在业务场景中更好地表现。模型调优的目标是提高模型在特定任务或数据集上的性能。通过模型调优,用户可以让模型更好地适应业务场景,从而提高模型在实际应用中的效果。
本文以AI原生应用引擎预置的baichuan-13B为基座模型,通过微调提升模型的数据分析和指标计算能力,帮助您快速掌握使用AI原生应用引擎完成模型调优并测试效果。
使用流程
通过图1您可以了解如何在AI原生应用引擎创建数据集、创建微调任务、部署推理模型以及在线测试模型效果。
准备工作
- 已注册华为账号并开通华为云。
- 已实名认证华为账号。
- 使用AI原生应用引擎前请检查账号状态,确保账号未处于欠费或冻结状态。
- 已订购大模型微调-SFT局部调优资源,订购方法请参见购买AI原生应用引擎按需计费资源。
步骤一:创建微调数据集
数据集是模型微调的基础,AI原生应用引擎统一纳管训练模型的数据集,将分散的数据进行集中式管理,从而节省了数据收集和管理的成本。
- 在AI原生应用引擎的左侧导航栏选择“知识中心 > 微调数据集”。
- 在“微调数据集”页面,单击右上角“创建微调数据集”。
- 在“创建微调数据集”页面,参照表1进行相关参数的配置。
表1 数据集基础配置参数说明 参数名称
参数说明
基础配置
数据集名称
自定义数据集名称。支持中英文、数字、下划线(_),长度2-50个字符,以中英文、数字开头。
本文以创建名称为“智能分析数据集”为例。
数据集描述
根据自己的需要对数据集进行描述,例如介绍数据集的用途、样例数据等。
标签
根据自己需要选择标识该适用数据集的模型、领域、行业等,例如大语言模型。
任务领域
选择“自然语言处理”。
数据集格式
选择“对话文本”。
文件内容要求为标准json数组,例如:
[{"instruction": "aaa", "input": "aaa", "output": "aaa"},{"instruction": "bbb", "input": "bbb", "output": "bbb"}]
数据接入
数据来源
选择数据集的数据来源。支持以下两种来源:
- 本地上传
- OBS接入
本地上传
当“数据来源”选择“本地上传”时,需配置此参数。
单击“文件上传”选择本地JSON格式的文件进行上传(仅支持JSON格式)。
OBS桶名
当“数据集来源”选择“OBS接入”时,需配置此参数。
在下拉列表中选择数据所在的OBS桶名。
OBS路径
当“数据集来源”选择“OBS接入”时,需配置此参数。
在下拉列表中选择数据所在的具体OBS路径。
调度类型
可选如下两种类型,其中本地文件上传仅支持一次性调度,OBS接入支持一次性调度或定时调度两种类型。
- 一次性调度
- 定时调度
版本模式
当“调度类型”选择“定时调度”时,需配置此参数。
- 覆盖模式:每次调度成功,会覆盖唯一的版本。
- 多版本模式:每次调度成功,会生成一个新版本。
执行时间
当“调度类型”选择“定时调度”时,需配置此参数。
设置每日执行时间。
立即执行
当“调度类型”选择“定时调度”时,需配置此参数。
选择是否立即执行。
- 单击“提交”。创建的数据集显示在“我创建的”页签的数据集列表中,创建数据集完成。
步骤二:创建模型微调流水线
模型微调任务是指调整大型语言模型的参数以适应特定任务的过程,通过在与任务相关的数据集上训练模型来完成。所需的微调量取决于任务的复杂性和数据集的大小。在深度学习中,微调用于改进预训练模型的性能。操作本步骤前请确保以下两点:
- 已订购大模型微调服务API在线调用-SFT局部调优,订购方法请参见购买AI原生应用引擎按需计费资源。
- 已创建格式为“对话文本”的微调数据集。
- 在AI原生应用引擎的左侧导航栏选择“模型中心 > 模型微调流水线”。
- 在模型微调流水线页面,单击“创建微调任务”,选择“通用能力增强微调”。
- 参照表2配置基础信息、模型、数据及任务。
表2 创建微调任务参数说明 参数名称
参数说明
基础信息
任务名称
自定义任务名称,例如“baichuan-13b-chat-sft-nl2sql”。
任务描述(可选)
自定义任务相关的描述。
模型配置
微调前模型
选择微调的模型,本文案例选择“baichuan”。
训练模式
默认选择“LoRA”。
LoRA(Low-Rank Adaptation,低秩适应),是一种将预训练模型权重冻结,并将可训练的秩分解矩阵注入Transformer架构每一层的技术,该技术可减少下游任务的可训练参数数量。
微调后名称
自定义模型微调后的新名称。支持英文、数字、中划线(-)、下划线(_),长度1-64个字符,仅支持字母或下划线开头。
例如“baichuan-13b-chat-sft-nl2sql”。
数据配置
数据集
在下拉列表中选择步骤一:创建微调数据集创建的“智能分析数据集”。
数据集版本
在下拉列表中选择数据集版本。
训练数据比例
填写训练数据比例,如果填为0,则任务不执行训练阶段。
训练数据比例是指用于训练模型的数据在完整数据集中所占的比例。
在实际应用中,训练数据比例的选择取决于许多因素,例如可用数据量、模型复杂度和数据的特征等。通常情况下,会选择较大的训练数据比例,以便训练出更准确的模型。一般来说,训练数据比例在70%到90%之间是比较常见的选择。
验证数据比例
填写验证数据比例,如果填为0,则任务不执行验证阶段。
验证数据比例是指模型训练过程中,用于验证模型当前训练效果的数据在完整数据集中所占的比例。
验证集的比例对于机器学习模型的性能评估非常重要。如果验证集的比例过小,可能导致模型在验证集上表现不够稳定,无法准确评估模型的性能。如果验证集的比例过大,可能会导致训练集的样本量不足,影响模型的训练效果。因此,在选择验证集的比例时,需要根据具体情况进行调整,以保证模型的性能评估和训练效果的准确性。
测试数据比例
填写测试数据比例。如果填为0,则任务不执行测试阶段。
测试数据比例是指模型训练结束之后,用于测试模型训练效果的数据在完整数据集中所占的比例。
通常,测试数据比例在20%到30%之间较为常见,但具体比例取决于数据集的大小和质量,以及模型的复杂度和训练时间等因素。较小的测试数据比例可能导致过拟合,而过大的比例则可能导致欠拟合。因此,选择适当的测试数据比例对于训练出准确可靠的机器学习模型非常重要。
任务配置
资源池
选择执行任务的资源池,在下拉列表可以看到各资源池的可用卡数,根据实际情况选择。
- 单击“下一步”,参照表3和表4以及模型、数据集等实际情况配置模型微调任务的基础参数、LoRA参数。
- 配置完成后,单击“创建”。新创建的微调任务显示在“微调任务”页面的任务列表中。
- 在任务列表中“操作”列单击“启用”开始训练模型。
单击任务名称,进入任务详情界面查看运行日志和Loss曲线。
- 观察日志是否出现Error信息,如果有则表示训练失败,请根据日志提示定位原因并解决。
- 根据Loss曲线观察损失值的下降情况,据此调整训练的超参数来寻找一组最优参数。
- 微调任务执行完成后,单击“操作”列的“发布”,发布模型。
步骤三:部署模型
部署模型是将模型部署为在线服务,通过创建部署服务实现,创建成功后,可以对在线服务可以进行预测和调用。本文需要为基座模型(原模型)和微调后的新模型分别创建模型服务。由于在线运行需消耗资源,请确保账户未欠费。
- 在AI原生应用引擎的左侧导航栏选择“模型中心 > 我的模型服务”。
- 在“我的模型服务”页面右上角单击“部署模型服务”。
- 在“创建部署服务”页面,参照表5配置模型信息。
表5 模型信息参数说明 参数名称
参数说明
模型来源
选择模型来源,本文以选择“微调的模型”为例。
选择模型
在下拉列表选择相应来源的具体模型。本文选择在步骤二:创建模型微调流水线中微调后的新模型。
服务名称
自定义服务名称,支持中英文、数字、中划线(-)、下划线(_)、点(.),长度2-36个字符,仅支持以中英文开头。此处以创建“baichuan-13b-chat-sft-nl2sql-s”为例。
模型服务描述
根据需要填写服务相关描述。
标签
为模型服务选择标签分类。可从以下几个维度选择(支持多选):
- 行业
- 适用领域
- 通用
- 配置部署模型参数,参数说明如表6所示。
表6 微调的模型部署参数说明 参数名称
参数说明
实例个数
设置模型服务部署的实例个数。
不同的模型部署1个实例需要的推理单元个数不同,比如,ChatGLM3-6B需要2个实例。
不同的模型因为模型参数量不同,模型参数量越多,需要消耗的资源越多,因此需要的推理单元个数越多。
推理单元资源
在下拉列表可以查看已购买的推理单元的可用个数,根据实际情况选择。
如果推理单元个数不足以满足实例个数,则需减少实例个数以使推理单元资源满足需求。
说明:在推理单元到期后,部署的模型将被下架,可通过购买推理单元资源恢复。
流控配置
超出流控值,则触发限流,用户的请求会因为流控而失败。
- 无限制
- 10次/秒
- 50次/秒
- 100次/秒
- 200次/秒
- 单击“保存”,部署模型服务,新部署的服务显示在“我部署的”页签中以查看模型服务的部署情况。
- 参照2~5,为基座模型创建名称为“baichuan-13b-chat-s”的模型服务。
步骤四:测试模型调优效果
通过在线测试模型服务,可检验模型的准确性、可靠性及反应效果,发现模型中存在的问题和局限性,确保模型能够在实际应用中正常运行,并且能够准确地预测和处理数据。调测模型前请确保部署模型服务已成功,即模型服务状态处于“运行中”。
- 在AI原生应用引擎的左侧导航栏选择“模型中心 > 模型调测”,进入“模型调测”页面。
- 在“模型类型”下选择“文本对话”并配置表7所示参数。
表7 调测文本对话类型模型参数说明 参数名称
参数说明
模型服务
选择要调测的模型服务,在下拉列表选择步骤三:部署模型中部署的模型服务。
输出方式
可选非流式、流式。二者区别如下:
- 非流式:调用大语言模型推理服务时,根据用户问题,获取大语言模型的回答,大语言模型完整生成回答后一次性返回。
- 流式:调用大语言模型推理服务时,根据用户问题,获取大语言模型的回答,逐个字词的快速返回模式,不需等待大语言模型生成完成。
输出最大token数
表示模型输出的最大token数。
温度
较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定。建议该参数和“多样性”只设置1个。
多样性
影响输出文本的多样性,取值越大,生成文本的多样性越强。建议该参数和“温度”只设置1个。
存在惩罚
介于-2.0和2.0之间的数字。正值会尽量避免重复已经使用过的词语,更倾向于生成新词语。
频率惩罚
介于-2.0和2.0之间的数字。正值会尽量避免使用常见的单词和短语,更倾向于生成较少见的单词。
- 在右侧“效果预览”区域,可通过以下两种方式进行模型测试。
- 在对话输入框输入测试语句后按Enter键或单击进行模型测试。
- 单击“引用已有提示语模板”,弹出“选择模板”面板,可通过分类筛选我创建的、我收藏的或平台预置的提示语模板,然后按Enter键或单击进行模型测试。
输入相同的问题,可以看到微调前模型返回结果是错误的,而微调后模型返回了正确的计算指标数据的关键要素。