白话大模型微调(Fine-tune)

吾名爱妃,性好静亦好动。好编程,常沉浸于代码之世界,思维纵横,力求逻辑之严密,算法之精妙。亦爱篮球,驰骋球场,尽享挥洒汗水之乐。且喜跑步,尤钟马拉松,长途奔袭,考验耐力与毅力,每有所进,心甚喜之。

 
吾以为,编程似布阵,算法如谋略,需精心筹谋,方可成就佳作。篮球乃团队之艺,协作共进,方显力量。跑步与马拉松,乃磨炼身心之途,愈挫愈勇,方能达至远方。愿交志同道合之友,共探此诸般妙趣。

诸君,此文尚佳,望点赞收藏,谢之!

 关于大模型的微调(Fine-tune)

        用一个简单的比喻解释微调的概念。想象你是一个小朋友,你的父亲教你打乒乓球。首先,父亲会给你展示基础的击球方式,让你学习如何把握住球拍、如何看准球、如何打出球,这就像大模型语言的预训练阶段。在这个阶段,你学习了打乒乓球的基本规则的技巧。但是,当你准备参加学校的乒乓球比赛时,你需要一些特殊的训练来提高技巧,比如学习如何更好的发球、如何更好的接对方的球,这就是微调阶段。这个阶段能帮助你更好的适应乒乓球比赛的规则,提高你的比赛成绩。最后,你的教练会观察你在训练中的表现,看看你的发球和接球技巧是否有所提高,这就像评估和调整阶段。如果你在某些方面表现得不好,你的教练可能会调整训练方式,帮助你改进。微调就像是参加乒乓球比赛前的特殊训练,能帮助你从一个会打乒乓球的小朋友,变成一个可以在比赛中赢得胜利的小选手。

        那么,是否需要非常高的门槛才可以完成会大模型的微调呢?很幸运的是,微调通过调用api就可以完成。如果你想对GPT模型进行微调,你只需要准备好微调所需的训练数据,例如问题和对应的回答,然后将其整理成专用的JSON格式文件,并发送到微调API即可。等待一段时间之后,你就可以获得一个专属的、微调后的GPT模型。

{"text": "Q: 中国的首都是哪里? A: 北京"}
{"text": "Q: 鲁迅是哪国的著名作家? A: 中国"}
{"text": "Q: 《红楼梦》的作者是谁? A: 曹雪芹"}

这种方式使得微调过程更加简单和方便,使更多的人能够从中受益。同时,使用API进行微调也提供了灵活性,可以根据具体需求进行自定义微调,以获得更好的模型性能。需要注意的是,在微调过程中,要确保使用高质量的训练数据并进行适当的参数调整,这是非常重要的,这样可以提高微调模型的质量和效果。

什么场景下适用模型微调

  • 需要采用特定的风格、语调

  • 需要处理复杂的任务

  • 需要提高输出的可靠性

  • 难以通过 Prompt 说明的新任务

  • 微调可以帮助模型更好地适应新的领域

通过训练使模型学习大量的样本数据,从而取得比prompt更好的效果。一方面,您不需要在prompt中提供大量的few-shots示例,能够有效节省成本;另一方面,由于训练的样本数量远多于prompt所能提供的样本数量,因此能取得比prompt调优更好的推理结果。

模型微调的步骤 

  • 准备并上传训练数据

  • 训练一个新的微调模型

  • 部署模型进行推理

  • 评估结果,如有需要返回到步骤1

 使用智谱AI 最新的ChatGLM-4进行模型微调

1. 到智谱AI 开放平台 (https://open.bigmodel.cn/)使用手机号快速进行注册,新用户注册并实名后可享500万tokens免费体验。本机只要有大于8G的GPU,是可以运行ChatGLM3-6B 在 4-bit 量化下的大模型,但是微调是无法在本机运行的,只有使用各大模型厂商提供的开放平台。​​​​​​

2. 获取对应的API KEY

3. 使用SDK 用Python来实现模型 API 的微调

① 安装SDK,python 版本推荐3.10 - 3.11

pip install zhipuai>=2.0.1

② 验证是否可以调用chatGLM4的API成功

from zhipuai import ZhipuAIclient = ZhipuAI(api_key="your api key")response = client.chat.completions.create(model="glm-4",messages=[{"role": "user","content": "你好!你叫什么名字"}],top_p=0.7,temperature=0.9,stream=False,max_tokens=2000,
)print(response.choices[0].message.content)

运行及运行结果:

python finetune.py

你好!我是一个人工智能助手,名叫智谱清言。我是基于智谱AI公司在2023年训练的ChatGLM模型开发的,很高兴为您提供帮助。有什么问题可以随时问我。

③ 准备训练数据

微调训练数据通常由一批包含输入和期望输出的数据构成,每条训练数据由单个输入(Prompt)以及对应的期望输出组成。目前仅支持以 json 格式的文件上传训练数据。通常情况下,提供更多的高质量训练数据,微调效果越好。反之,如果训练数据中存在问题、瑕疵,将对微调效果产生一定的负面影响。

新版数据示例(仅 chatglm3-6b 支持该版本数据,目前仅支持通过api接口上传)

按示例中的格式准备数据集,json 格式,每行一条,存储到文件中(train-file.jsonl)并调用文件管理接口上传文件:

{"messages": [{"role": "system", "content": "你是一位乐于助人,知识渊博的全能AI助手。"},{"role": "user", "content": "请介绍一下AlphaGo的基本原理。"}, {"role": "assistant", "content": "AlphaGo利用深度神经网络与树搜索算法相结合,通过对弈数据进行训练,逐步提升游戏水平,能够对围棋局面进行判断并选择最佳落子位置。"}]}

{"messages": [{"role": "system", "content": "你是一位乐于助人,知识渊博的全能AI助手。"},{"role": "user", "content": "请列举一些健康饮食的重要原则。"}, {"role": "assistant", "content": "健康饮食的重要原则包括:膳食应营养均衡,合理摄入各种营养素;多吃新鲜蔬果,适量饮水;少吃糖、油、盐,忌吃过量快餐;养成规律生活作息习惯,适量运动。"}]}

{"messages": [{"role": "system", "content": "你是一位乐于助人,知识渊博的全能AI助手。"},{"role": "user", "content": "请给出一些改善睡眠质量的建议。"}, {"role": "assistant", "content": "改善睡眠质量的建议包括:保证睡眠时间,避免睡眠不足;睡前放松身心,远离刺激;养成规律作息时间,不要频繁熬夜;适量运动,但不要运动过度;睡前可以喝一杯热牛奶等温和饮料。"}]}

④  上传训练数据

from zhipuai import ZhipuAI 
client = ZhipuAI(api_key="your api key") 
result = client.files.create(file=open("<path-to-file.jsonl>", "rb"),    
purpose="fine-tune")print(result.id)

注意:需要找联系客服开放文件上传权限,否则会报错

Error code: 434, with error text {"error":{"code":"1623","message":"没有上传文件权限,请联系客服开放"}}

上传成功后,获取上传的文件ID

from zhipuai import ZhipuAIclient = ZhipuAI(api_key="") # 请填写您自己的APIKeyclient.files.list()

获取到对应的文件ID后,上传训练数据成功

⑤ 创建微调任务

from zhipuai import ZhipuAIclient = ZhipuAI(api_key="") # 请填写您自己的APIKeyjob = client.fine_tuning.jobs.create(model="chatglm3-6b",training_file="file-xxx", # 请填写已成功上传的文件idvalidation_file="file-yyy", # 请填写已成功上传的文件idsuffix="<self-defined>",)job_id = job.idprint(job_id)

如果返回了对应的job_id,即代表创建微调任务成功

同时也可以通过一下方法查询当前微调任务的状态

from zhipuai import ZhipuAIclient = ZhipuAI(api_key="") # 请填写您自己的APIKeyclient.fine_tuning.jobs.list()

使用微调后的模型

参考模型调用接口,并替换成要调用的微调模型的 model_key,即微调任务详情接口中返回的fine_tuned_model。

from zhipuai import ZhipuAIclient = ZhipuAI(api_key="your api key")response = client.chat.completions.create(model="<fine_tuned_model>", #即微调任务详情接口中返回的fine_tuned_modelmessages=[{"role": "user","content": "请介绍一下AlphaGo的基本原理。"}],top_p=0.7,temperature=0.9,stream=False,max_tokens=2000,
)print(response.choices[0].message.content)

 ZhipuAI将调用微调后的新模型回答用户的提问。

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

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

相关文章

专业学习|系统建模与仿真的基础概念知识合集

学习笔记来源&#xff1a;http://tup.tsinghua.edu.cn/upload/books/yz/086457-01.pdf 一、系统 系统按照事物发展的连续性又可分为连续系统和离散系统。连续系统是指状态变量随 时间连续变化的系统,如图1-1所示;离散系统则是指状态变量只是在某个离散的时间点集合上发生变化…

Problems retrieving the embeddings data form OpenAI API Batch embedding job

题意&#xff1a;从OpenAI API批量嵌入作业中检索嵌入数据时遇到问题 问题背景&#xff1a; I have to embed over 300,000 products description for a multi-classification project. I split the descriptions onto chunks of 34,337 descriptions to be under the Batch e…

Linux--线程互斥(加锁)

目录 0.对原生线程封装的代码 1.为什么需要线程互斥 2.加锁 2.1.认识加锁和它的接口 2.2用一下接口 2.2.1 解决抢票问题 2.2.2设置局部锁 2.3从原理角度理解锁 2.4锁是如何实现的**** 0.对原生线程封装的代码 方便后续对锁的理解&#xff1a;Thread.hpp 详情请看&#…

mybatis-plus LambdaQueryWrapper条件构造器使用apply查询含有逗号‘,‘分隔的字段

mybatis-plus LambdaQueryWrapper apply自定义SQL条件使用 真实业务开发使用场景 数据库:postgreSQL 开发场景:SpringBoot2.5.7 数据库中数据如下 需求 查找, bingBdNumber字段为422875,要求数据库中bind_bd_number这一栏中只要有422875的就返回. 根据上图查422875需要返回…

【python】导入serial模块,读写串口数据(嵌入式软件自动化测试)

目录 环境准备安装pyserial硬件连接 基本函数使用获取串口设备列表初始化串口对象发送数据读取数据 环境准备 安装pyserial 1、python 3.6.7 2、pyserial模块封装了python对串口的访问 pip install serialpip install pyserial如果代码报错卸载掉serial 硬件连接 1、将串口…

Android 10.0 SystemUI下拉状态栏固定展开QsPanel不收缩功能实现

1. 前言 在10.0的系统ROM产品定制化开发中,在systemUi的原生下拉状态栏中,首次下拉展开quickQsPanel,第二次展开就显示 QsPanel,在产品开发中,需要下拉状态栏固定展开QsPanel,不需要二次展开,接下来分析下相关功能的实现,如图: 2.SystemUI下拉状态栏固定展开QsPanel不收…

Python和C++行人轨迹预推算和空间机器人多传感融合双图算法模型

&#x1f3af;要点 &#x1f3af;双图神经网络模型&#xff1a;最大后验推理和线性纠错码解码器 | &#x1f3af;重复结构和过约束问题超图推理模型 | &#x1f3af;无向图模型变量概率计算、和积消息传播图结构计算、隐马尔可夫模型图结构计算、矩阵图结构计算、图结构学习 |…

基于Java技术的致远汽车租赁系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;B/S模式、Java技术 工具&#xff1a;Visual Studio、MySQL数据库开发工具 系统展示 首页 用户注册…

现场可重构CPLD芯片应用案例—蓝牙音箱

我司英尚微提供的高性能数模混合现场可重构IC、通用可配置的模数混合芯片内部集成丰富的模拟资源和数字资源&#xff0c;可轻松替代电路中的各种标准器件&#xff0c;并按照客户要求组合成最优小型ASIC&#xff0c;缩短开发周期&#xff0c;降低成本。下面介绍LS98002现场可重构…

object-C 解答算法:移动零(leetCode-283)

移动零(leetCode-283) 题目如下图:(也可以到leetCode上看完整题目,题号283) 解题思路: 本质就是把非0的元素往前移动,接下来要考虑的是怎么移动,每次移动多少? 这里需要用到双指针,i 记录每次遍历的元素值, j 记录“非0元素值”需要移动到的位置; 当所有“非0元素值”都移…

链表面试练习习题(Java)

1. 思路&#xff1a; 创建两个链表&#xff0c;一个用来记录小于x的结点&#xff0c;一个用来记录大于等于x的结点&#xff0c;然后遍历完原链表后&#xff0c;将小于x的链表和大于等于x的链表进行拼接即可 public class Partition { public ListNode partition(ListNode pH…

如何将PDF转换成可以直接编辑的CAD图纸?

PDF图纸是为了让用户更好的阅览CAD文件&#xff0c;但是&#xff0c;当我们想要对其进行编辑的时候&#xff0c;PDF图纸就是一个麻烦了。那么PDF转换成CAD后可以编辑吗&#xff1f;如何将PDF转换成可以直接编辑的CAD图纸呢&#xff1f;本篇给你答案。 1、启动迅捷CAD编辑器&…

linux进行redis的安装并使用RDB进行数据迁移

现在有两台电脑&#xff0c;分别是A&#xff0c;B&#xff0c;现在我要把A电脑上的redis的数据迁移到B电脑上&#xff0c;B电脑上是没有安装redis的 1.找到A电脑的redis的版本 1.先启动A电脑的redis&#xff0c;一般来说&#xff0c;都是直接在linux的控制台输入&#xff1a;re…

Spring Cloud Loadbalancer 的使用

一、默认负载均衡策略 Spring Cloud LoadBalancer 默认的负载均衡策略是轮询。 轮询效果示例 我们需要示例一个请求分发到不同的模块上&#xff0c;所以我们需要创建多模块项目。 新建 Spring Boot &#xff08;3.0.2&#xff09;的 Maven 项目&#xff08;JDK 17&#xff09…

万界星空科技MES系统生产计划管理的功能

MES系统&#xff08;Manufacturing Execution System&#xff0c;制造执行系统&#xff09;的生产计划管理功能是其核心功能之一&#xff0c;旨在将企业的生产计划转化为实际的生产操作&#xff0c;并通过实时监控和调整来确保生产活动的顺利进行。以下是MES系统生产计划管理功…

STM32智能环境监测系统教程

目录 引言环境准备智能环境监测系统基础代码实现&#xff1a;实现智能环境监测系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;环境监测与管理问题解决方案与优化收尾与总结 1. 引言 智能环境监测系统通…

基于STM32智能电子锁设计

1.简介 随着时代的高速发展&#xff0c;家居安全也成为人们日常生活中的一个安全问题。目前传统的门锁使用的是机械密码&#xff0c;在安全性方面表现不佳。这些缺点可以通过改用智能电子密码锁来弥补。智能电子锁是一种使用了现代电子技术的高科技产品&#xff0c;它的出现解决…

ActiveMQ配置延迟投递和定时投递教程

配置activemq.xml中的<broker>标签添加schedulerSupport"true" schedulerSupport"true"更改完成重启生效 四大属性解释 Property nametypedescriptionAMQ_SCHEDULED_DELAYlong延迟投递的时间AMQ_SCHEDULED_PERIODlong重复投递的时间间隔AMQ_SCHEDU…

期权末日双买跨式策略-这才是末日轮稳定赚钱的方法吗?!

今天带你了解期权末日双买跨式策略-这才是末日轮稳定赚钱的方法吗&#xff1f;&#xff01;期权末日双买跨式策略是一种在期权到期日前预期市场会出现大幅波动时使用的策略。 期权双买跨式策略适合期权末日轮是因为它能利用临近到期日时市场潜在的大幅波动来获利。末日轮期权&…

AI数字人+数字孪生IOC智慧运营平台:提升业务场景智慧化运维水平

在人工智能时代&#xff0c;“AI数字人数字孪生IOC智慧运营平台”&#xff0c;不仅能够提升数字孪生系统的人机交互体验&#xff0c;还能实现高效的运维管理&#xff0c;可以有效推动多领域场景数字化转型和智能化升级。 案例分享 深圳新一代产业园NEXT PARK交流中心 深圳新一…