狂追ChatGPT:开源社区的“平替”热潮

news2024/11/27 22:34:09

b1442dc73bf80cd4be7052327404768d.png

目前,不少优质的类ChatGPT模型都只能通过API接入,而一些开源LLM的效果与ChatGPT相比差距不小。不过,近期开源社区开始密集发力了。


其中,Meta的LLaMA模型泄漏是开源“ChatGPT”运动的代表性事件。基于LLaMA模型,开源社区近期接连发布了ChatLLaMa、Alpaca、Vicuna、Koala等模型,效果直追GPT-3.5,它也因此成为了开源LLM领域的创新地。

4月12日,Databricks完全开源了12B参数的指令跟随LLMDolly 2.0,包括训练代码、数据集(15000个prompt/response pairs)和模型权重,这些都可以随意商用。Dolly 2.0 基于EleutherAI pythia模型系列而开发。同一天,为了以更低成本、更快速度训练类ChatGPT模型,微软发布了DeepSpeed-Chat。

来自开源社区的“ChatGPT平替”浪潮正在爆发,LLM的生态构建将迎来新变革。

作者 | Toooold

OneFlow编译

翻译 | 贾川

当今,开源社区一直在寻求一种独立于OpenAI和ChatGPT的方法,正如早期的飞行器想要摆脱重力一样。

今年三月初,斯坦福大学AI研究所(Stanford HAI)分享了一种成功方法“Alpaca: A Strong, Replicable Instruction-Following Model(https://github.com/tatsu-lab/stanford_alpaca)”,证明指令调优是一种有前途的方法。于是,这场ChatGPT“平替”的竞争开始了!

(本文在遵循CC BY-NC-SA 4.0协议的基础上由OneFlow编译发布,译文转载请联系OneFlow获得授权。原文:https://toooold.com/2023/04/08/magnificient_underdogs.html?continueFlag=91058ca99dd78323ff38cb1f8e6b2d7c)

1

再思考大型语言模型之“大”

LLM指的是“大型语言模型”,通常认为只有足够大的模型才能达到GPT的性能水平。然而,斯坦福的Alpaca提出了一条重要信息:只需对较小模型进行有限的指令调优,同样也能在重要任务中表现良好。这可以分成两个方面来解释:较小的模型和重要任务。

在Alpaca对Llama的7B模型进行指令调优之前,人们普遍认为模型越大,性能才能达到GPT的水平,而且可能需要一个175B的模型才能够与GPT-3相媲美。Alpaca利用Llama的预训练模型为基础,仅使用来自GPT模型的一个非常小的调优数据集(只有52000个样本),建立了一个具有对话功能的LLM。这表明:在拥有良好的指令调优数据集的情况下,只要语言模型足够强大,就可以达到良好的性能,而不需要非常大的模型来匹配GPT-3。

此外,Alpaca和Llama还表明,LLM并不需要在所有任务中表现得很好。例如,Alpaca和Llama 7B在处理编程相关任务时表现不佳,但在对话和一般任务方面表现良好。指令调优提供的逐步方法是,添加更多知识到Alpaca模型中并利用其已学到的对话功能。例如,通过添加额外的2万个编程特定样本,可以让codealpaca在许多编程任务中表现良好。

另一方面,OpenAI展示了其超大型模型的工程债,例如可用时间有限以及ChatGPT Plus客户每3小时只能进行25个查询等等。这些结果表明:较小的LLM可能是更好的选择。

事实上,现在Llama和Alpaca 7B已经能够运行在最便宜的设备上,如Macbook Air、树莓派4和谷歌Pixel 6手机上,因此它们成为了AI时代的新“毁灭战士”。

它能运行LLaMA 7B吗?这会不会是“它能运行Doom吗”的新表述?——@ylecun

2

更多的ChatGPT开源“平替”加入这场角逐

Llama和Alpaca率先开启了这场角逐,随后更多的LLM模型也加入了其中。它们带来了更多的数据,以改进Alpaca;同时还有更快的调优方法或其他网络结构来代替Llama。

Alpaca需要更多的调优数据。来自“Guanaco: A Multilingual Instruction-Following Language Model Based on LLaMA 7B”(https://github.com/Guanaco-Model/Guanaco-Model.github.io)的Guanaco通过将Alpaca的指令用多种语言重新编写,并添加新的指令以对齐多种语言、理解内容等方式,引入了530k的多语言数据。像“Chinese-Vicuna: A Chinese Instruction-following LLaMA-based Model”(https://github.com/Facico/Chinese-Vicuna)和Chinese-LLaMA-Alpaca(https://github.com/ymcui/Chinese-LLaMA-Alpaca)这样的语言特定模型也提供了优化。源自“Vicuna: An Open-Source Chatbot Impressing GPT-4 with 90% ChatGPT Quality”(https://github.com/lm-sys/FastChat#vicuna-weights)的Vicuna则专注于改进Alpaca的聊天功能。

微软的低秩(Low Rank)采用方式“LoRA”对加速tuning起了很大作用。这个想法很好:它将权重“冻结(freezed)”,但“在Transformer架构的每个层中注入可训练的秩分解矩阵(rank decomposition matrices)”,使得调优速度可以提高3倍。LoRA技术不仅对语言模型有用,它还有助于更快地调优文本到图像任务中的稳定扩散(stable diffusion)模型。(https://github.com/cloneofsimo/lora

与此同时,Llama在这个框架中并不是那么重要,可以被替换成其他模型。Meta的Llama不允许对任何代码或权重进行商用。为更加独立,Lit-llama编写了Llama推理代码,但它仍需要使用Llama权重。开源社区提供了一些选择,其中GLM和RWKV是最有前途的两个模型。

GLM(https://arxiv.org/abs/2103.10360)是一系列不同尺寸的模型。它采用的方法与Meta的Llama不同,其6B模型具有聊天功能,可称为ChatGLM。与此同时,RWKV非常独特。它没有跟随像GPT中的堆叠式解码器Transformer结构,而是使用了类似RNN的递归网络,因此其上下文长度在理论上是无限的,而且其推理速度更快,内存成本更低。RWKV可以达到Transformer模型的质量,其对话版本可作为ChatRWKV找到。

当然,我们也没有忘记上一代的GPT家族。Databricks开源了他们使用GPT-neox网络结构和应用指令调优的Dolly。结果也不错!

我们可以在Language Model Evaluation Harness框架(https://github.com/EleutherAI/lm-evaluation-harness)中比较LLM的性能,基准在这里 https://bellard.org/ts_server/。截至目前(2023年4月上旬),这场角逐中LLama的表现最好。

3

更多社区支持

近年来,受Alpaca的启发,使用self-instruct进行精调变得愈发流行。借助框架,微调也变得更加容易。其中,xtuning是一个易于使用且优秀的框架。最近,xtuning宣布使用Alpaca-Lora进行INT4调优(使用GPT-4的知识进行调优也是一个不错的想法),进一步推动了数据采集的发展。GLM团队还提出了更加高效的调优方法,如P-tuning-v2。

社区还推崇脱离GPU的独立性。从3月初开始,像llama.cpp和alpaca.cpp这样的工作提供了工程优化,使得我们能够在CPU上运行量化模型。然而需要明白“天下没有免费的午餐”,量化可能会导致精度等方面的损失,因此需要参考上述LLM基准测试以了解更多细节。

值得一提的是,像llama-index和LangChain这样的下游工具支持将这些开源的GPT竞争对手作为替代后端。请参考这些工具的文档,了解使用自定义LLM的更多细节

https://github.com/jerryjliu/llama_index/blob/main/docs/how_to/customization/custom_llms.md)。

4

Alpaca是完美的方法吗?

Alpaca引起了人们对比赛中这些LLM大模型的关注,但我们也必须承认它们存在一些缺点:法律问题、数据偏见、编码和数学问题。

Alpaca使用Llama作为其源结构,但Llama不允许商用,且其权重未公开,除非通过申请。

alpaca_data.json的52000条指令调优数据具有很好的多样性,但随后研究表明其存在质量问题,可在此处找到修复方法:https://github.com/gururise/AlpacaDataCleaned

GPT-4在数学和推理方面的能力已经更加强大,但Alpaca仍然无法获取足够的调优数据以执行此类任务。

5

总结
 

在1910年,一架比空气重的飞行器完成了从伦敦到巴黎的旅行,用时25小时11分钟。当时没有人能想到大约50年后人类会登上月球,这一壮举只有通过人类共同努力探索所有可能性才能实现。

我相信Alpaca是AIGC时代最早的“飞行器”之一,我们很快就会有开源实现来超越GPT模型。

题图源:Midjourney

其他人都在看

  • “ChatGPT们”的淘金时代

  • 大型语言模型的推理演算

  • GPT-4创造者:第二次改变AI浪潮的方向

  • 谷歌科学家:ChatGPT秘密武器的演进与局限

  • 比快更快,开源Stable Diffusion刷新作图速度

  • OneEmbedding:单卡训练TB级推荐模型不是梦

  • GLM训练加速:性能最高提升3倍,显存节省1/3

欢迎Star、试用OneFlow: github.com/Oneflow-Inc/oneflow/icon-default.png?t=N2N8http://github.com/Oneflow-Inc/oneflow/

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

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

相关文章

条款08: 别让异常逃离析构函数

文章目录背景知识析构函数背景知识 下面是一段测试代码&#xff1a; class Test { public:Test(int para){m_num para;};void test_throw(){throw(3);};~Test() {cout<<"delete Test"<<m_num<<endl;//test_throw();};int m_num; }; int main() …

牛客乔迁新居,新址在……

有个好消息想向大家公布&#xff1a;牛客&#xff08;上海办公室&#xff09;搬家啦&#xff01; 自3月27日起&#xff0c;牛客&#xff08;上海办公室&#xff09;正式乔迁至上海市长宁区长宁路999号兆丰广场办公楼G层G15。新的办公室坐落在上海长宁区的中心地带&#xff0c;…

Talk预告 | 浙江大学特聘研究员廖依伊:面向自动驾驶仿真平台的神经渲染

本期为TechBeat人工智能社区第477期线上Talk&#xff01; 北京时间3月1日(周三)20:00&#xff0c;浙江大学信电学院特聘研究员——廖依伊的Talk将准时在TechBeat人工智能社区开播&#xff01; 她与大家分享的主题是: “面向自动驾驶仿真平台的神经渲染”&#xff0c;届时将探…

VSCode 配置PyQt5 开发环境

前提要求&#xff1a;Windows 安装Anaconda。 如果没有安装&#xff0c;请参考文章:Windows安装Anaconda使用教程 1、PyQt 5 安装 在配置python环境的时候需要注意&#xff0c;PyQt5需要python 3.5以上的版本&#xff0c;在python环境中(conda、pipenv)安装pyqt5相关组件Py…

4.13(LoadLibrary)

接着之前预习的知识&#xff0c;我观察的自己编译出来的bin LoadLibraryExA LoadLibraryExA函数进去&#xff0c;现时用RtInitAnsiString函数初始化了ANSI的计数字符串&#xff0c;底层是调用了LoadLibraryExW函数&#xff0c;在LoadLibrarExW函数里做了unicode的计数字符串的…

分子生物学 第三章 基因、基因组及基因组学

文章目录第三章 基因、基因组及基因组学第一节 基因1 基因认识的三个阶段2 基因的特征(1)跳跃基因(2)断裂基因3 基因的分类4 基因的结构5 基因的大小6 基因的数目第二节 基因组1 基因组的概念2 噬菌体基因组3 细菌基因组以大肠杆菌(原核生物的代表)为研究对象4 酵母基因组以酵母…

Python之拯救Xubuntu22.04误删/usr/bin/python3.10(二十二)

0.首先删除/usr/bin/python3.10,会导致以下错误: <1>.报错1: ModuleNotFoundError: No module named ‘apt_pkg’ <2>.报错2: bash: /usr/lib/command-not-found: /usr/bin/python3: 解释器错误: 没有那个文件或目录 <3>.报错3: 通过亲身操作,以下步骤可…

【Linux】来写一个tcp的服务端+客户端

本文首发于 慕雪的寒舍 今天让我们来写一个tcp的服务器/客户端代码。 完整代码见我的gitee 链接 阅读本文前&#xff0c;建议先阅读&#x1f449; udp服务器 由于本文采用自建图床&#xff0c;CSDN可能因带宽不够&#xff0c;出现外链图片缓存失败。 1.基本框架 tcp的服务器…

walt 调度算法

Walt 算法 WALT负载统计原理_walt算法_森森浅浅笙笙的博客-CSDN博客 CPU负载均衡之WALT学习【转】_mb5fdcad0be2e90的技术博客_51CTO博客 1、A task’s demand is the maximum of its contribution to the most recently completed window and its average demand over the p…

webgl-attribute、uniform、varying三者的区别

通用js: let canvas document.getElementById(webgl) canvas.width window.innerWidth canvas.height window.innerHeight let ctx canvas.getContext(webgl) attribute&#xff1a; 范围: 只适用于vertexShader&#xff0c;将js代码中的数据传递给vertexShader。 使用方…

知识图谱扩充|蜕变测试|蜕变关系

目录 前言&#xff1a;概念定义 什么是蜕变测试&#xff1f; 那么&#xff0c;怎么进行蜕变测试呢&#xff1f; 1. 生成蜕变关系 a 等价关系 b 混排关系 c 交集关系 d 并集关系 2. 生成蜕变用例 3. 执行蜕变用例 4. 校验蜕变关系 学术报告 一、蜕变测试MT 二、蜕变…

【id:32】【20分】B. Date(类与构造)

题目描述 下面是一个日期类的定义&#xff0c;请在类外实现其所有的方法&#xff0c;并在主函数中生成对象测试之。 注意&#xff0c;在判断明天日期时&#xff0c;要加入跨月、跨年、闰年的判断 例如9.月30日的明天是10月1日&#xff0c;12月31日的明天是第二年的1月1日 2月…

vue2路由(下)

编程式路由导航 通过点击按钮实现push和replace俩种模式的跳转 实现&#xff1a;就是通过$router原型里面的方法 也能实现路由的跳转和后退&#xff0c;分别采用的是$router里面的black和forward方法 感觉就是BOM对象中的history对象里面的方法 正是前进&#xff0c;后是后…

快鲸scrm | 三个步骤,快速打造企业长效私域营销阵地

快鲸scrm对企业微信私域流量玩法进行系统梳理&#xff0c;把企业微信用户运营拆解为“获客”、“转化”和“服务”这三个关键步骤&#xff0c;从点到面&#xff0c;为企业私域运营提供可行性的解决方案。 一、构建私域流量管理机制 用户是企业发展的基础&#xff0c;用户增长对…

三电技术之电控技术

三电技术之电控技术 1 基本功能 整车控制系统能够实现对汽车动力、舒适度、安全性以及能耗等多方面进行调整优化&#xff0c;配合大数据让电动汽车拥有更好的操作性和可靠性&#xff0c;具体来讲整车控制器对电动汽车主要有以下功能&#xff1a; 数据交互管理&#xff1a;整…

mybatis-plus-join MPJ连表查询 这样写太香了!

mybatis-plus作为mybatis的增强工具&#xff0c;它的出现极大的简化了开发中的数据库操作&#xff0c;但是长久以来&#xff0c;它的联表查询能力一直被大家所诟病。一旦遇到left join或right join的左右连接&#xff0c;你还是得老老实实的打开xml文件&#xff0c;手写上一大段…

【unity实战】用对象池设计制作Dash冲锋残影的效果

什么是对象池? 在Unity中,对象池是一种重复使用游戏对象的技术。使用对象池的好处是可以减少游戏对象的创建和销毁,从而提高游戏的性能。如果不使用对象池,每次需要创建游戏对象时,都需要调用Unity的Instantiate函数,这会导致内存分配和垃圾回收的开销。而使用对象池,可…

李宏毅 深度学习【持续更新】

目录pytorch快速入门csdn快速入门OS包PIL包Opencv包Dataset类Tensorboard的使用torchvision.transforms 的使用torchvision中数据集的使用DataLoader的使用(torch.utils.data)神经网络的搭建nn.Module深度学习 李宏毅Chatgpt1 研究方向2 Chatgpt学习的步骤3 Fine tune vs. Prom…

【Linux内网穿透】使用SFTP工具快速实现内网穿透

文章目录内网穿透简介1. 查看地址2.局域网测试连接3.创建tcp隧道3.1. 安装cpolar4.远程访问5.固定TCP地址内网穿透简介 是一种通过公网将内网服务暴露出来的技术&#xff0c;可以使得内网服务可以被外网访问。以下是内网穿透的一些应用&#xff1a; 远程控制&#xff1a;通过内…

九【springboot】

Springboot一 Spring Boot是什么二 SpringBoot的特点1.独立运行的spring项目三 配置开发环境四 配置开发环境五 创建 Spring Boot 项目1.在 IntelliJ IDEA 欢迎页面左侧选择 Project &#xff0c;然后在右侧选择 New Project&#xff0c;如下图2.在新建工程界面左侧&#xff0c…