阿里云百炼SFT微调实践

news2024/11/17 20:27:51

1. 场景识别

用户进行SFT前需要对应用场景进行识别和分析,一般进行模型微调的诉求是希望提升对应业务场景的能力,用户需要明确哪些能力是需要进行重点提升的。

  • 场景划分上来讲,以垂类场景进行划分可分为教育、医疗、金融、法律、电商、旅游、娱乐、人力资源、物流与运输等场景。
  • 以语言能力进行划分,可分为信息抽取、阅读理解、创意生成、角色扮演、推理等能力维度。

场景识别和分析的目的在于可以帮助用户更好地去界定需要通过模型微调去提升什么能力,从而更有针对性地进行数据准备、微调配置和评测构建。

2. 数据准备

SFT数据需要根据对应场景能力要求进行准备,比如公文写作场景就需要准备不同公文写作主题的问答数据,数学作业助手场景就需要准备不同类型的数学考题问答数据。准备数据时候需要特别关注数据质量多样性两个方面,需要确保数据质量相对较好,否则基于质量差的数据进行SFT会拿到反向效果,同时需要注意保持数据中问题和回答的多样性,数据过于雷同会导致模型过拟合以致效果不及预期。

用户经常问到的一个问题是进行有效SFT需要多大数据量,严谨来说目前没有一个广泛认可的答案,通用能力对齐方向,LIMA和AlpaGasus等相关工作表示几千条高质量SFT数据就可以拿到较好的对齐效果,但另一方面在开源大模型实践上,前沿大模型正用到越来越多的数据进行SFT,比如Llama 3模型用到了百万级别的SFT数据。

经验性来讲,普通场景上进行有效SFT一般至少需要上千条精标数据,不同场景和要求下所需的数据量会有差别。需要特别注意的是训练效果好坏并不是说只取决于数据量,也尤其需要考虑数据的多样性和质量,大量内容非常雷同的数据可能不如少量内容较为多样的数据,大量质量差的数据可能不如少量质量好的数据。

以小学数学作业助手应用场景为例,我们需要准备对应的问答数据,数据格式要求上目前百炼平台上SFT模块采用的是ChatML格式,两个简单的SFT数据例子如下所示。

{"messages": [{"role": "user", "content": "Brennan was researching his school project and had to download files from the internet to his computer to use for reference. After downloading 1200 files, he deleted 60% of them because they were not helpful. He downloaded 300 more files but again realized that 4/5 of them were irrelevant. How many valuable files was he left with after deleting the unrelated files he downloaded in the second round?"}, {"role": "assistant", "content": "To find out how many valuable files Brennan was left with, we need to calculate the number of files he kept after each deletion.\n\n1. **First Round:**\n   - Brennan initially downloaded 1200 files.\n   - He deleted 60% of them because they were not helpful.\n   - The number of files deleted = 60% of 1200 = 0.60 * 1200 = 720 files.\n   - The number of files he kept = 1200 - 720 = 480 files.\n\n2. **Second Round:**\n   - Brennan downloaded an additional 300 files.\n   - 4/5 of these files were irrelevant, so he kept 1/5 of them.\n   - The number of files he kept from the second round = 1/5 * 300 = 60 files.\n\n3. **Total Valuable Files:**\n   - The total number of valuable files Brennan was left with = the number of files he kept from the first round + the number of files he kept from the second round.\n   - Total valuable files = 480 + 60 = 540 files.\n\nTherefore, Brennan was left with 540 valuable files after deleting the unrelated files he downloaded in the second round."}]}
{"messages": [{"role": "user", "content": "考虑一场由蓝队和熊队进行的冰球比赛。整场比赛共射门40次。如果熊队比蓝队少射门12次,那么两队各射门多少次?"}, {"role": "assistant", "content": "我们用 $B$ 表示蓝队投篮的次数,$T$ 表示熊队投篮的次数。根据题目,我们有以下两个方程:\n\n1. $B + T = 40$ (两队共投了 40 次篮)\n2. $B = T + 12$ (蓝队比熊队多投了 12 次篮)\n\n我们可以通过解这个方程组来找到 $B$ 和 $T$ 的值。\n\n将第二个方程代入第一个方程,我们得到:\n\n\\[T + 12 + T = 40\\]\n\n合并同类项:\n\n\\[2T + 12 = 40\\]\n\n两边同时减去 12:\n\n\\[2T = 28\\]\n\n两边同时除以 2:\n\n\\[T = 14\\]\n\n现在我们知道了 $T = 14$,可以通过将 $T$ 代入一个原方程来找到 $B$ 的值。使用 $B = T + 12$:\n\n\\[B = 14 + 12\\]\n\n\\[B = 26\\]\n\n因此,蓝队投了 26 次篮,而熊队投了 14 次篮。"}]}

准备数据过程中一个常有的问题是数据量不足的问题,从保证数据质量的角度考虑,数据量不足情况下 最好基于专业人员进行数据构造和标注;百炼上目前也有提供基于self-instruct方法的SFT数据增强功能, 在有高质量样例数据且判断模型生成数据可用情况下,可以使用该功能进行数据扩增,用户需要上传一份 精标数据样例文件,在数据增强窗口提交任务进行数据生成。

3. 模型微调

模型微调用户一般比较关注如下几个问题:选择什么模型?用哪种训练方式?超参怎么配置?

3.1 模型选择

以Qwen系列模型的选择为例,模型版本角度,尽量选最新的模型版本,其效果会好一些,比如同等参数量模型Qwen 2系列表现好于Qwen 1.5系列;参数量角度,效果优先考虑情况下,优先选择大参数量模型比如Qwen-Max,而成本和推理速度优先情况下则选择满足用户效果需求的最小参数模型。

3.2 训练方式

训练方式的选择上,目前百炼上提供了全参训练和高效训练(即LoRA训练)两种方式,高效训练通过训练一些额外的低秩矩阵参数达成微调,相对于直接进行全参微调的方式,高效训练对模型通用能力的影响更小。因此,在用户数据量较少或者希望通用能力保留较好的情况下建议优先选择高效训练。

3.3 超参配置

超参配置上,严谨来说,不同场景、不同数据、不同目标需求下需要的超参不一样,因此只能给一些比较宽泛的、经验性的建议,需要结合场景做进一步实验和调整。经验性来讲,用户数据量如果是几千条级别,建议初始尝试epoch可以设置为3~5,如果是万条以上级别,建议epoch可以设置为1~2,具体需要结合实验效果进行判断;高效训练建议学习率取1e-4到1e-5量级,全参训练对应学习率可以稍低一些,学习率调整策略除非用户有比较强先验,否则建议取linear或cosine一类经典配置。LoRA秩值越大,理论上越接近于全参微调,调整alpha值大致等同于调整learning rate,目标模块为Auto相比于ALL,对应调整参数量一般更少,目前配置上百炼默认给了一个版本,无先验情况下可以先按该配置进行训练。

3.4 实践案例

以小学数学作业助手应用场景为例,用户构造了约1万条数据,出于效率考虑选择Qwen Turbo模型,基于该模型进行SFT,对应参数配置如下,在百炼上提交训练任务等待训练完成即可。

4. 能力评测

模型微调完成后,一般会根据具体场景和要求进行能力评测。一般用户进行SFT的诉求是想基于自有行业数据提升对应领域的能力,若用户有标准评测流程,可通过模型部署拿到api接口,接入到自有评价体系进行评测;若用户评测主要靠人工或模型标注,可通过百炼提供的人工评测或自动评测完成。此外,百炼评测模块也提供了如C-Eval、MMLU、GSM8K、BBH等多项评测基准,可直接选择模型提交job进行评测。

以本文使用的小学数学作业助手应用场景为例,考虑GSM8K评测数据集可用于衡量模型简单数学问答能力的强弱,因此可直接在百炼上选中模型和GSM8K评测数据集进行评测。

如下表所示,对比SFT前后模型表现,SFT后模型数学能力有一定提升。

用户使用的基模

基于3k条数据进行微调

基于10k条数据进行微调

GSM8K评测分数

75.74

76.35

76.8

5. 模型部署

用户微调并评测选择好模型后,可直接在百炼平台上进行部署,部署完毕即可通过API调用该模型应用于业务场景上,如下所示,在百炼体验界面上可选中对应模型自动生成API调用示例代码。

6. 常见问题

6.1 效果问题

LLM的SFT与传统机器学习场景类似,同样会面对下面几种失败情况:

  • 过拟合:由于训练样本较少、缺乏多样性、以及训练轮数过多的情况,导致模型在新样本上泛化能力较差,一般建议通过提升数据集的多样性来缓解该问题。
  • 欠拟合:由于LLM一般具有较大的参数规模,欠拟合的现象,一般是较少的训练轮数和较低的learning rate导致,而不是模型能力导致。
  • 灾难性遗忘:很多用户在使用LLM SFT场景下,会担心模型丢失通用能力,现阶段的方法一般是混合通用SFT数据的方式进行缓解,百炼平台提供数据混合的方案,用户可以混入通用数据集缓解通用能力丢失问题。

6.2 模型微调 vs. 知识库检索

当考虑采用模型微调还是知识库检索方案,可以考虑以下几个要素:

  • 任务场景:特定领域的任务场景,如任务分类、情感分析、文本排序等NLU任务,以及结构化数据提取、文章总结等NLG任务,一般采用模型微调是较好的选择,模型微调前可以先尝试in-context learning的方案,随着基础模型的能力提升,很多任务场景借助in-context learning可以取得较好的结果。
  • 知识更新:相比于采用模型微调更新领域知识,借助知识库检索的方案,能够较低成本支持外部知识的动态更新,以及缓解模型输出的幻觉问题;
  • 资源约束:相比于模型微调和部署的成本,知识库检索一般具有更低的使用成本。
  • 数据标注:模型微调往往依赖标签数据,在数据标注难以获取的情况下,一种方案是借助数据生成方式进行扩展,备选方式是采用in-context learning和知识库检索的方案。

当然模型微调和知识库检索,也并不是二选一的关系,很多复杂的业务场景,可以综合采用模型微调和知识库检索的技术方案,以客服场景为例,可以借助模型微调可以解决客服回答的语气、表达习惯、自我认知等问题,场景涉及的专业知识可以结合知识库,动态引入到模型上下文中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2166960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IP地址的打卡路径是什么?

众多周知,IP地址使我们浏览网站的“必需品”,他会在我们进行网络活动时起到通关文牒一般的作用。那么,放我们进行网络活动时,我们的“通关文牒”上面会在哪些地点留下痕迹,IP地址的流转路径是什么? 第一关…

2024国庆节有哪些必囤的好物产品?一文了解那些入手不亏的国庆好物

国庆假期即将来临。对于追求品质生活的朋友们来说,这无疑是一个不容错过的购物机会。那么,在这个国庆,哪些好物值得你重点关注呢?我特地整理了一份推荐清单,这些产品不仅经过我的亲身体验,更以其卓越的实用…

建投数据自主研发相关系统获得欧拉操作系统及华为鲲鹏技术认证书

近日,经欧拉生态创新中心和华为技术有限公司测评,建投数据自主研发的投资项目管理系统、全面风险管理信息系统、商业不动产业务系统,完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920(Taisha 200)的兼容性…

快速创建第一个Spring Boot 项目

一、介绍 Spring Boot 是一个开源的 Java 基础框架,它基于 Spring 框架,用于创建独立、生产级别的基于 Spring 的应用程序,你可以“跑起来”(run)你的 Spring 应用程序。Spring Boot 让基于 Spring 的应用开发变得更容…

Spring Boot 3.x 配置 Spring Doc以及导入postman带图详解

一、pom.xml配置 <!-- API⽂档⽣成&#xff0c;基于swagger3 --><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.0.2</version></dependency>…

【简单介绍】DevOps是什么?

由于 DevOps 方法的广泛采用以及由此产生的快速产品交付和部署&#xff0c;许多部门已采用更敏捷的方法来开发生命周期。在满足市场速度和规模要求的同时&#xff0c;设计安全的软件一直是现代 IT 公司共同面临的问题。结果&#xff0c;超过 52% 的组织因为担心上市速度落后而放…

蛋白家族系列:FGF

成纤维细胞生长因子&#xff08;FGF&#xff09;是一种广谱有丝分裂原&#xff0c;作为多肽配体&#xff0c;可以旁分泌或内分泌方式发挥作用。FGF通过与成纤维细胞生长因子受体&#xff08;FGFR&#xff09;介导的信号轴刺激或维持代谢、组织稳态和发育所需的特定细胞功能。 &…

构建高可用和高防御力的云服务架构第四部分:REDIS(4/5)

本文的目的是深入探讨Redis在构建高可用和高防御力云服务架构中的应用。我们将分析Redis的工作原理、核心特性以及如何通过Redis优化云服务架构的性能和安全性。此外&#xff0c;我们还将提供实际案例和最佳实践&#xff0c;帮助读者更好地理解和应用Redis&#xff0c;以构建更…

双十一好货推荐有哪些?五大双十一种草好物推荐!

现在的双十一显然已经成为了品牌和消费者之间的重要交汇点。在这一天&#xff0c;各大电商平台推出了各种促销活动&#xff0c;让我们有机会买到心仪的商品。那么双十一好货推荐有哪些&#xff1f;为了帮助大家更好地把握这个特殊的购物时机&#xff0c;我们精心准备了五大双十…

如何准备秋招入行游戏开发?

如何准备秋招入行游戏开发? 秋招非常非常重要&#xff01;绝不能轻易错过&#xff01;&#xff01;! 早起的鸟儿有虫吃&#xff0c; 这句话对于企业和应届生双方而言都是适用的。 对于有校招需求的企业而言&#xff0c; 秋招是一年中规模最大的招聘项目之一&#xff0c; …

css-functions伪类选择器系列二

一张图浏览CSS Functions 概述 本文主要讲述CSS的部分伪类选择器第二篇&#xff0c;包括&#xff1a;:nth-child、:nth-last-child、:nth-of-type和:nth-last-of-type。 :nth-child() :nth-child伪类是根据父元素的子元素列表中的索引来选择元素。 语法 :nth-child是以一…

wireshark使用要点

目录 IP过滤 端口过滤 内容过滤 过滤udp 过滤tcp IP过滤 ip.src XXX.XXX.XXX.XXX 只显示消息源地址为XXX.XXX.XXX.XXX的信息 ip.dst XXX.XXX.XXX.XXX 只显示消息目的地址为XXX.XXX.XXX.XXX的信息 ip.addr XXX.XXX.XXX.XXX显示消息源地址为XXX.XXX.XXX.XXX&#xff0…

LInux操作系统安装Jenkins

1、什么是Jenkins Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 2、Jenkins的作用 持续的软件版本发布/测试项目。 监控…

零基础入门ComfyUI(一)初识ComfyUI

前言 AIGC 中文本生成图片的两大阵营&#xff0c;Stable Diffusion 和 Midjourney 。Midjourney 于 22 年3 月面世&#xff0c;22 年 7 月份的公测 v3 版本火出圈&#xff0c;迅速成为讨论焦点。同年7月Stable Diffusion问世&#xff0c;解决了绘画的细节及效率问题&#xff0c…

数字游戏C++

题目: 题目就是让你输入一个长度为88的0101串&#xff0c;让你求出中间1有几个。 wo一看到这题&#xff0c;立马想到暴力求解&#xff1a;循环八遍&#xff0c;每次输入一个char&#xff0c;减掉四十八加一起&#xff0c;输出&#xff0c; 细细一想&#xff1a;诶&#xff0c;…

【数据结构】基数排序高位优先(MSDF)

基数排序常用写法是低位优先(LSD)&#xff0c;在网上有很多&#xff0c;还有一种写法是高位优先排序(MSDF) 高位优先资料比较少&#xff0c;而且老师布置了一个高位优先的题目&#xff0c;所以也尝试了高位优先的写法&#xff0c;下面来说说吧&#xff0c;程序可以实现功能&…

【Midjourney】如何使用Midjourney生成惊艳的艺术作品:从提示词到完美图像的全攻略

文章目录 一、Midjourney简介1.1 Midjourney的工作原理1.2 Midjourney的应用场景 二、如何使用Midjourney生成图像2.1 选择Midjourney生成工具2.2 提示词的构建2.2.1 避免简单描述2.2.2 使用详细描述 2.3 提示词示例2.4 使用GPT生成提示词 三、参数解释3.1 版本 (Version)3.2 宽…

NRF21540—低功耗蓝牙,蓝牙mesh、Thread和Zigbee和2.4 GHz私有协议范围扩展射频前端模块

nRF21540是一款射频前端模块(FEM)&#xff0c;可用于改善短距离无线产品的传输范围和连接鲁棒性。作为一款辅助性设备&#xff0c;nRF21540是一种“即插即用型”的无线传输范围扩展器&#xff0c;可与nRF52和nRF53系列的高级多协议无线SoC搭配使用&#xff0c;所需的外部器件数…

【MATLAB】TOA/TDOA测距定位,三维任意(>3)个锚节点,对一个未知点进行定位

文章目录 摘要引言理论基础TOA定位原理TDOA定位原理三维定位模型TOA方程TDOA方程算法实现完整代码运行结果摘要 随着无线通信和定位技术的快速发展,时间到达(TOA)和时间差到达(TDOA)定位方法在多种应用场景中得到了广泛应用。本文讨论了在三维空间中使用TOA/TDOA测距定位…

25 基于51单片机的温度电流电压检测系统(压力、电压、温度、电流、LCD1602)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;通过DS18B20检测温度&#xff0c;滑动变阻器连接数模转换器模拟电流、电压&#xff0c;通过LCD1602显示&#xff0c;程序里设置温度阈值为40&#xff0c;电流阈值为60&am…