广告行业中那些趣事系列64:低成本训练一个媲美ChatGPT效果的Vicuna模型

导读:本文是“数据拾光者”专栏的第六十四篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇主要从理论到实践介绍低成本训练一个媲美ChatGPT效果的Vicuna模型,对于希望搭建自己的大语言模型并应用到实际业务场景感兴趣的小伙伴可能有帮助。

欢迎转载,转载请注明出处以及链接,更多关于自然语言处理、推荐系统优质内容请关注如下频道。
知乎专栏:数据拾光者
公众号:数据拾光者

摘要:本篇主要从理论到实践介绍低成本训练一个媲美ChatGPT效果的Vicuna模型。首先介绍了背景,实际工作中需要利用大语言模型进行语料标注和文本分类任务;然后介绍了Vicuna的理论知识,包括模型简介、工作流程和当前存在的问题;接着重点介绍了从0到1搭建自己的Vicuna模型,包括fastChat加载Vicuna模型、模型权重获取、模型加载和推理、模型微调、模型评估以及更适配中文场景的Chinese-Vicuna。对于希望搭建自己的大语言模型并应用到实际业务场景感兴趣的小伙伴可能有帮助。

下面主要按照如下思维导图进行学习分享:

44affa76b11fbf1de8c75ea170559371.png

01 背景

随着ChatGPT火爆全网,将大语言模型应用到实际的工作也越来越重要。我们希望使用ChatGPT来进行数据标注和文本分类任务中,虽然公司已经提供了ChatGPT、GPT4等大模型的接口,但是随着产研界越来越多的大语言模型权重被开源,构造自己的大语言模型也不可或缺,一方面可以有效的降低成本,毕竟调用openai的接口是要花钱的,而且是按token收费的;另一方面,也能很好的避免“卡脖子”问题,一旦外界的大语言模型无法使用,可以快速的有自己的替代品使用,不会影响业务的进展。

02 Vicuna理论知识

2.1 Vicuna简介

调研了当前比较热门的开源大语言模型,主要有斯坦福开源的羊驼(Stanford Alpaca),伯克利、斯坦福等机构联名发布的小羊驼(Vicuna)等。使用GPT-4评估各模型效果,Vicuna-13B模型仅花费300美元的训练成本,就可以达到媲美ChatGPT的效果,非常惊艳。下面是各模型效果对比:

b6655bfb730a3fffa81d1485f9d1b9fe.png

图1 使用GPT4评估各模型效果

通过上图中可以看出,Vicuna-13B已经达到ChatGPT模型92%的效果。如果有小伙伴想体验下Vicuna-13B模型效果,可以通过下面的链接:

https://chat.lmsys.org/

下面是我用Vicuna-13B模型通过CARP提示词方法识别输入文本是否和汽车相关的示例,关于CARP相关介绍可以看下我之前写过的一篇文章《广告行业中那些趣事系列63:使用chatgpt类大模型进行文本分类任务》。整体来看识别效果还不错,下面是示例图:

7c4c6c2fdc39d02226852d94210309b8.png

图2 Vicuna-13B模型通过CARP进行文本分类

2.2 Vicuna工作流程

Vicuna工作流程如下图所示:

e4129cb3b4f51e42c86ab528176c4b2a.png

图3 Vicuna工作流程图

首先,通过ShareGPT.com官网收集了7W组用户对话。用户可以在ShareGPT.com分享他们的ChatGPT对话;

然后,使用这些有监督的指令在LLaMa模型上微调。Vicuna作者增强了Alpaca提供的训练脚本,从而更好地处理多轮对话和长序列。模型训练通过PyTorch FSDP使用8个A100 GPU在一天内完成;

接着,基于FastChat实现了一个轻量级分布式服务系统;

最后,利用GPT-4在80个不同的问题上评估模型效果。将各模型的输出作为提示词和问题一起提供给GPT-4,然后由GPT-4评估哪个模型效果更好。分别对比LLaMA、Alpaca、Vicuna和Bard/ChatGPT模型的数据集和训练成本,下面是详细对比数据:

1c2aa0c4be0f49e18a46feec794acf48.png

图4 各模型训练成本和数据集对比

2.3 Vicuna存在的问题

和其他大型语言模型一样,Vicuna有一定的局限性:

  • 在涉及推理和数学等任务方面表现不佳;

  • 输出内容的事实准确性存在不足;

  • 输出内容的安全性(这里包括政治、歧视等)存在不足。

03 从0到1搭建自己的Vicuna模型

3.1 通过fastChat加载Vicuna模型

本文主要通过fastChat加载Vicuna模型,fastChat是一个基于聊天机器人的可以训练、服务和评估大语言模型的开放平台,其核心功能包括:

(1)支持当前最先进模型(例如Vicuna、FastChat-T5)的权重,包括模型训练和评估;

(2)支持Web UI和OpenAI兼容的RESTful API的分布式多模型服务系统。

fastChat在github上已经有2.5W的star,感兴趣的小伙伴可以通过下面了解:

https://github.com/lm-sys/FastChat

3.2 Vicuna模型权重获取

Vicuna是在LLaMA 模型的基础上微调得到的,为了符合 LLaMA 模型license授权,Vicuna只发布了delta 权重。通俗的说就是本来Vicuna可以发布一个完整的模型,现在为了符合LLaMA 模型license授权只能把模型权重分成两个部分,一部分是原始的LLaMA 模型权重,另一部分就是delta 权重。我们只需要将这两部分权重合并起来(也就是将每一层参数相加)就可以得到完整的 Vicuna 的权重。Vicuna模型权重合并脚本如下:

python3 -m fastchat.model.apply_delta \
--base-model-path /path/to/llama-13b \
--target-model-path /path/to/output/vicuna-13b \
--delta-path lmsys/vicuna-13b-delta-v1.1

原始的LLaMA 模型权重可以通过git clone下载,但是下载比较慢,建议直接去huggingface.里下载:

https://huggingface.co/huggyllama/llama-13b/tree/main

Vicuna的delta 权重也可以去huggingface.里下载:

https://huggingface.co/huggyllama/llama-13b/tree/main

3.3 模型加载和推理

使用如下命令加载Vicuna模型:

python3 -m fastchat.serve.cli \
--model-path model/vicuna/vicuna-13b \
--style rich \
--num-gpus 2

如果加载Vicuna-13B需要至少28GB的 GPU 内存,Vicuna-7B需要14GB GPU 内存。继续用上面的例子进行汽车标签的文本分类任务,我们使用CARP的prompt方法,下面是Vicuna-13B模型文本分类的结果:

1fc45b12cee5e4f53f3f47bdcb0993dc.png

图5 Vicuna-13B模型进行文本分类

从上面的例子可以看出,模型效果还是不错的。后面会针对我们实际的业务场景构造一个测试集,然后分别尝试用chatgpt和Vicuna-13B进行效果对比。

3.4 模型微调

上面说过,Vicuna是基于LLaMA模型进行微调的,从ShareGPT.com公共API中收集了7W组用户共享的对话。为了提升数据的质量,Vicuna将HTML转换回markdown,并过滤掉一些不适当或低质量的样本。不仅如此,还将长对话切分成适合Vicuna模型最大上下文长度的小片段。

训练方面,Vicuna代码是基于之前的Stanford Alpaca进行开发的,同时支持多轮对话。超参方面和羊驼Alpaca模型类似:

  • Global Batch Size:128

  • 学习率:2e-5      

  • Epochs:3    

  • Max length:2048

  • 权重衰减:0

Vicuna在Stanford Alpaca的基础上进行了如下三个方面优化:

  1. 多轮对话:为了考虑多轮对话调整了训练损失,仅计算chatbot输出的微调损失;

  2. 内存优化:为了让Vicuna能够理解长文本,将Alpaca最大上下文长度从512扩展到2048,这大大增加了GPU内存需求。通过使用梯度检查点和快闪注意力来应对内存压力;

  3. 通过Spot点实例降低成本:数据集规模扩充了40倍,文本序列长度也扩充了4倍,使得训练难度激增。Vicuna采用SkyPilot托管点实例方法来降低成本,通过利用带有自动恢复和自动区域切换的更便宜的Spot点实例来降低成本。通过这种方法将Vicuna-7B模型的训练成本从500刀降低到140刀,Vicuna-13B模型的训练成本从1000到降低到140刀。降低成本是非常重要的,这让一些中小公司也有机会训练属于自己的“大”模型。

3.5 模型评估

评估AI 聊天机器人是很有挑战性的工作,因为需要涉及到语言理解、推理和上下文理解。随着AI 机器人越来越先进,当前很多开源的benchmarks已经不再合适了。比如当前先进的聊天机器人可以很容易的回答Stanford Alpaca构建的评估集,这使得模型评估变得更难。除此之外,一方面训练集和测试集存在相互污染的问题,另一方面构建评估集本身成本也很高。为了解决上面的问题,Vicuna提出了使用GPT-4来评估聊天机器人效果,其实就是让当前最强的大语言模型来评估其他大语言模型的效果,具体评估方法如下:

首先,设计了八类问题,比如Fermi问题、角色扮演、撰写代码和数学等。通过这些问题测试聊天机器人各方面的能力。通过精心构建提示词可以让GPT-4生成多样性高并且富有挑战的问题,这些问题对于基线模型来说也很难;然后从每类任务中选择十个问题,分别收集LLaMA、Alpaca、ChatGPT、Bard和Vicuna五个聊天机器人的答案;最后通过GPT-4对这些答案进行打分,主要会从是否有帮助、相关性、准确性等方面进行评估,下面是评估结果:

bd13837cb6c696ed176f2c442de56695.png

图6 通过GPT-4评估各种大模型

可以看出Vicuna明显优于LLaMA和Alpaca,略优于Bard,和ChatGPT相比则较差。关于评估的细节可以参考下面的网址:

https://github.com/lm-sys/vicuna-blog-eval

3.6 更适配中文场景的Chinese-Vicuna

最近又调研到一个基于LLaMA模型使用中文指令的Chinese-Vicuna,github有3900多star,应该会更适配我们实际的中文应用场景。感兴趣的小伙伴可以了解下:

https://github.com/Facico/Chinese-Vicuna

总结和反思

本篇主要从理论到实践介绍低成本训练一个媲美ChatGPT效果的Vicuna模型。首先介绍了背景,实际工作中需要利用大语言模型进行语料标注和文本分类任务;然后介绍了Vicuna的理论知识,包括模型简介、工作流程和当前存在的问题;接着重点介绍了从0到1搭建自己的Vicuna模型,包括fastChat加载Vicuna模型、模型权重获取、模型加载和推理、模型微调、模型评估以及更适配中文场景的Chinese-Vicuna。对于希望搭建自己的大语言模型并应用到实际业务场景感兴趣的小伙伴可能有帮助。

参考资料

  1. https://github.com/lm-sys/FastChat

  2. https://lmsys.org/blog/2023-03-30-vicuna/

  3. https://github.com/Facico/Chinese-Vicuna

最新最全的文章请关注我的微信公众号或者知乎专栏:数据拾光者。

1cf01a3ee27ebd158dee919430eb85a8.png

码字不易,欢迎小伙伴们点赞和分享。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

研发机器配网方案(针对禁止外网电脑的组网方案)

背景:公司是研发型小公司,难免会使用A某D和K某l 等国内免费软件,这两个是业界律师函发得最多的软件。最简单的方案是离网使用,但是离网使用比较麻烦的是要进行文件传输,需要使用U盘拷贝,另外研发型企业一般…

有向图的强联通分量-SCC-Tarjan算法

有向图的强联通分量(SCC)Tarjan算法 强连通分量(Strongly Connected Components,SCC)的定义是:极大的强连通子图。 下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强…

c语言练手项目【编写天天酷跑游戏2.0】EASYX图形库的运用。代码开源,素材已打包

天天酷跑项目的开发 项目前言 项目是基于Windows,easyX图形库进行开发的, 开发环境:Visual Studio 2022 项目技术最低要求: 常量,变量,数组,循环,函数。 文章目录 天天酷跑项目的…

Hadoop概念学习(无spring集成)

Hadoop 分布式的文件存储系统 三个核心组件 但是现在已经发展到很多组件的s 或者这个图 官网地址: https://hadoop.apache.org 历史 hadoop历史可以看这个: https://zhuanlan.zhihu.com/p/54994736 优点 高可靠性: Hadoop 底层维护多个数据副本,所…

初识网络 --- 浅了解一些基础概念

文章目录 初识网络局域网与广域网 初识协议协议分层 OSI七层模型TCP/IP 四层(五层)模型网络传输基本流程协议报头局域网通信原理传输流程图数据包封装和分用 初识网络 在每台计算机独立的情况下:假设现在有三台计算机,每台计算机…

2024考研408-操作系统 第五章-输入输出IO管理 学习笔记

文章目录 一、I/O管理概述1.1、I/O设备的概念与分类1.1.1、什么是I/O设备?1.1.2、I/O设备的分类:按照使用特性1.1.2、I/O设备的分类:按传输速率分类1.1.3、I/O设备的分类:按照信息交换的单位分类知识点回顾与重要考点 1.2、I/O控制…

SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式

Redis 从入门到精通【应用篇】之SpringBoot Redis 配置哨兵模式 Lettuce 和Jedis 文章目录 Redis 从入门到精通【应用篇】之SpringBoot Redis 配置哨兵模式 Lettuce 和Jedis前言Lettuce和Jedis区别1. 连接方式2. 线程安全性 教程如下1. Lettuce 方式配置1.1. 添加 Redis 和 Let…

【目标跟踪】1、基础知识

文章目录 一、卡尔曼滤波二、匈牙利匹配 一、卡尔曼滤波 什么是卡尔曼滤波?——状态估计器 卡尔曼滤波用于在包含不确定信息的系统中做出预测,对系统下一步要做什么进行推测,且会结合推测值和观测值来得到修正后的最优值卡尔曼滤波就是利用…

git 和adb

一、git 1、git的作用 git是一个版本控制系统,是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 我的理解就是代码管理器: 第一点你可将代码备份到git仓上; 第二点可记录的你修改记录; 第三点…

周训龙老兵参观广西森林安全紧急救援装备演练

7月21日上午,周训龙老兵参观广西紧急救援促进中心在南宁市青秀山举行森林安全紧急救援装备演练,多功能水罐消防车、无人救援机等先进设备轮番上阵,展示了广西应对突发事件的紧急救援速度和水平。广西壮族自治区应急厅不情愿参此次演练活动。 …

Python Flask构建微信小程序订餐系统 (十)

🔥 编辑会员信息 🔥 编辑会员信息可以通过点击会员列表操作,也可以点击会员信息详情点击进行操作 🔥 修改编程会员信息列表布局 🔥 修改 web/templates/member/index.html 文件,添加跳转到编辑会员信息的页面 web/templates/member/set.html 🔥 创建用于会员…

Mybatis单元测试,不使用spring

平时开发过程中需要对mybatis的Mapper类做单元测试,主要是验证语法是否正确,尤其是一些复杂的动态sql,一般项目都集成了spring或springboot,当项比较大时,每次单元测试启动相当慢,可能需要好几分钟&#xf…

OpenCV图像处理-图像分割-MeanShift

MeanShift 1. 基本概念2.代码示例 1. 基本概念 MeanShift严格说来并不是用来对图像进行分割的,而是在色彩层面的平滑滤波。它会中和色彩分布相近的颜色,平滑色彩细节,侵蚀掉面积较小的的颜色区域,它以图像上任意一点P为圆心&…

优思学院|六西格玛案例分析 - 降低焊接缺陷率

大家都知道六西格玛方法中的控制图有助于监测流程的稳定性和识别特有原因的发生。对流程周期性地采样,当测量结果在控制上限和下限内,而且围绕着一条中心线时,我们就说流程是受控的。注意上述控制上限和下限有别于规范限。 我们来看看一家工…

电脑安装双系统ubuntu18.04+windows后开机直接进入Windows解决方法

电脑型号:联想拯救者Y9000K2021H 系统:Windows11Ubuntu18.04双系统 问题:笔记本安装双系统后,Windows系统下处理word或者看论文;Ubuntu18.04系统安装ros进行机械臂控制等的研究。但最近开机后发现没有系统选项了&#…

知识库数据导出为excel-使用JavaScript实现在浏览器中导出Excel文件

我们智能客服知识库机器人已经开发完成,后端数据库是使用的qdrant向量数据库,但是该数据库并没有导出备份功能,所以我按简单的纯前端实现知识库导出excel数据 使用第三方库(如SheetJS) SheetJS是一个流行的JavaScript库,可帮助处理…

App隐私及合规评估服务

随着移动应用种类和数量呈爆发式增长,APP侵害用户权益事件层出不穷,为规范个人信息的收集使用,打击涉及个人信息违法犯罪行为,我国相继出台多个涉及个人信息保护相关法律法规。与此同时,中央网信办、工信部、公安部、市…

获取大疆无人机的飞控记录数据并绘制曲线

机型M350RTK,其飞行记录文件为加密的,我的完善代码如下 gitgithub.com:huashu996/DJFlightRecordParsing2TXT.git 一、下载安装官方的DJIFlightRecord git clone gitgithub.com:dji-sdk/FlightRecordParsingLib.git飞行记录文件在打开【我的电脑】&am…

Istio Pilot源码学习(二):ServiceController服务发现

本文基于Istio 1.18.0版本进行源码学习 4、服务发现:ServiceController ServiceController是服务发现的核心模块,主要功能是监听底层平台的服务注册中心,将平台服务模型转换成Istio服务模型并缓存;同时根据服务的变化&#xff0c…

OpenHarmony与HarmonyOS联系与区别

目录 1. 背景 2.OpenHarmony 3.HarmonyOS 4.鸿蒙生态 5.OpenHarmony与HarmonyOS的技术上实现区别 1.语言支持 2.SDK 的不同 3.运行调测方式不同 4.对APK的兼容性不同 5.包含关系 6.调试命令 6.何时选择OpenHarmony或是HarmonyOS? 1. 背景 开篇就说“关于…