NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

GPT 3.5 与 Llama 2 微调的综合比较

  • 2023-09-27
    北京
  • 本文字数:2409 字

    阅读完需:约 8 分钟

大小:621.33K时长:03:32
GPT 3.5与Llama 2微调的综合比较

在本文中,我将分享我通过 SQL 和函数表示任务对 Llama 2 和 GPT 3.5 进行微调的比较实验。总体结果如下:


  • GPT 3.5 在两个数据集上与 LoRA 微调的 CodeLlama 34B 相比,性能要好一些;

  • GPT 3.5 的训练成本高出 4 到 6 倍(部署成本甚至更高)。


SQL 任务的代码和数据在这里(https://github.com/samlhuillier/spider-sql-finetune),函数表示任务的代码和数据在这里(https://github.com/samlhuillier/viggo-finetune)。


为什么要做这个比较?对 GPT 3.5 进行微调的成本是很高的。我想通过这个实验看看手动微调模型是否可以在成本很低的情况下让性能接近 GPT 3.5。有趣的是,它们确实可以!


结果

CodeLlama 34B 和 GPT 3.5 执行 SQL 任务和函数表示任务的性能。


GPT 3.5 在这两项任务上表现出稍好的准确性。在使用模型生成 SQL 查询时,我还使用执行准确性作为比较它们在虚拟数据库上执行查询输出的指标(精确匹配准确性是指字符级别的比较)。

训练成本


Code Llama 34B

GPT 3.5

Spider数据集

3.32美元

11.99美元

函数表示数据集

4.27美元

26.05美元

注:我使用的是 vast.ai 提供的 A40 GPU,每小时费用为 0.475 美元。


实验设置


我使用了 Spider 数据集和 Viggo 函数表示数据集的子集,这些都是很好的用于微调的数据集:


  • 它们会教会模型给出期望的输出形式,而不是事实。SQL 和函数表示任务都期望结构化的输出。

  • 预训练的模型不能很好地完成这两项任务。


对于 GPT 3.5 的微调,OpenAI 只允许配置 epoch 的数量。他们建议选择 epoch 的数量。因此,为公平起见,我只对 Llama 进行最少的超参数微调,允许 OpenAI 选择 epoch 的数量,并训练 Llama 在评估数据集上收敛。

Llama 的架构


我做出的两个关键决定是使用 Code Llama 34B 和 Lora 微调(而不是全参数):



我使用的 LoRA 适配配置是这样的:


config = LoraConfig(      r=8,      lora_alpha=16,       target_modules=[       "q_proj",       "k_proj",       "v_proj",       "o_proj",   ],      lora_dropout=0.05,      bias="none",      task_type="CAUSAL_LM",  )
复制代码


我尝试在所有线性层使用适配配置(正如Qlora论文所建议的那样),发现几乎没有性能提升。类似地,将 r 增加到 16 只会消耗更多的计算量,而几乎没有提供性能上的好处。


数据集


SQL 提示词示例:

You are a powerful text-to-SQL model. Your job is to answer questions about a database. You are given a question and context regarding one or more tables.
You must output the SQL query that answers the question.### Input:Which Class has a Frequency MHz larger than 91.5, and a City of license of hyannis, nebraska?
### Context:CREATE TABLE table_name_12 (class VARCHAR, frequency_mhz VARCHAR, city_of_license VARCHAR)
### Response:
复制代码


我没有使用完整的 Spider 数据集,它的数据库 Schema 是这样的:

department : Department_ID [ INT ] primary_key Name [ TEXT ] Creation [ TEXT ] Ranking [ INT ] Budget_in_Billions [ INT ] Num_Employees [ INT ] head : head_ID [ INT ] primary_key name [ TEXT ] born_state [ TEXT ] age [ INT ] management : department_ID [ INT ] primary_key management.department_ID = department.Department_ID head_ID [ INT ] management.head_ID = head.head_ID temporary_acting [ TEXT ]
复制代码


相反,我选择使用 sql-create-context(https://huggingface.co/datasets/b-mc2/sql-create-context)数据集和 Spider 数据集的交集。因此,提供给模型的上下文是一个 SQL 创建命令(我这么做实际上完全是为了节省节点数):

CREATE TABLE table_name_12 (class VARCHAR, frequency_mhz VARCHAR, city_of_license VARCHAR)
复制代码


函数表示提示词示例:

Given a target sentence construct the underlying meaning representation of the input sentence as a single function with attributes and attribute values.This function should describe the target string accurately and the function must be one of the following ['inform', 'request', 'give_opinion', 'confirm', 'verify_attribute', 'suggest', 'request_explanation', 'recommend', 'request_attribute'].The attributes must be one of the following: ['name', 'exp_release_date', 'release_year', 'developer', 'esrb', 'rating', 'genres', 'player_perspective', 'has_multiplayer', 'platforms', 'available_on_steam', 'has_linux_release', 'has_mac_release', 'specifier']
### Target sentence:
I remember you saying you found Little Big Adventure to be average. Are you not usually that into single-player games on PlayStation?
### Meaning representation:
复制代码


输出是这样的:

verify_attribute(name[Little Big Adventure], rating[average], has_multiplayer[no], platforms[PlayStation])
复制代码


评估


两个模型收敛得都很快:


图中显示了在训练过程中模型在评估集上的损失。


对于 SQL 任务,我还使用 Spider 评估工具(https://github.com/taoyds/test-suite-sql-eval)计算 SQL 查询的执行准确性。评估工具会构建一个虚拟数据库,并将实际的输出与 GPT3.5 和 Llama 2 的查询输出进行比较。


结论


总的来说,通过这个经验,我觉得对 GPT 3.5 进行微调是为了初始验证或构建 MVP,而除此之外,像 Llama 2 这样的模型可能是你最好的选择。


为什么要对 GPT 3.5 进行微调?


  • 你想要证实微调是解决给定任务/数据集的正确方法;

  • 你想要全托管的体验。


为什么要对像 Llama 2 进行微调?


  • 你想省钱!

  • 你希望最大限度地榨取数据集的性能;

  • 你希望在训练和部署基础设施方面具有充分的灵活性;

  • 你想保留私有数据。


原文链接:

https://ragntune.com/blog/gpt3.5-vs-llama2-finetuning


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2023-09-27 15:356886

评论

发布
暂无评论
发现更多内容

多线程+JVM+设计模式+数据库,阿里巴巴Java性能优化全解实战笔记真香

Java永远的神

Java 数据库 程序员 面试 多线程

字节跳动嵌入式数据分析最佳实践

字节跳动数据平台

字节跳动 数据分析 BI 嵌入式分析 数据看板

C语言基本的窗口开发

计算机魔术师

8月月更

深度学习公式推导(3):初探神经网络

老崔说架构

5 分钟温故知新 RxJS 【转换操作符】

掘金安东尼

前端 函数式编程 8月月更

ABAP工作进程对数据库表读取操作的检测

Jerry Wang

数据库 SAP abap Netweaver 8月月更

微服务的拆分与设计原则

阿泽🧸

微服务 8月月更

关于 SAP ABAP 字符变量和字符串变量字符个数的一个知识点

Jerry Wang

字符串 SAP abap Netweaver 8月月更

[极致用户体验] 网页里的「返回」应该用 history.back 还是 push ?

HullQin

CSS JavaScript html 前端 8月月更

大专的我狂刷29天“阿里内部面试笔记”最终直接斩获十七个Offer

收到请回复

Java 程序员 阿里 面试八股文 Java面试八股文

程序员面试太卷?我选择背这份阿里最新Java面试八股文(详解版)

Java面试那些事儿

Java 面试 Java 面试 java程序员 java 编程

头脑风暴:最长递增子序列

HelloWorld杰少

算法 LeetCode 数据结构, 8月月更

HPC、AI与云计算:当智能时代三叉戟在亚马逊云科技完美融合

脑极体

leetcode 303. Range Sum Query - Immutable 区域和检索 - 数组不可变(简单)

okokabcd

LeetCode 算法与数据结构

openEuler代码贡献之星:麒麟软件裴建康

openEuler

开发者 成长 代码规范 openEuler 开源社区

短视频源码APP开发——短视频的功能

开源直播系统源码

软件开发 直播系统源码 短视频直播系统

HTML

武师叔

8月月更

百炼成钢 —— 声网实时网络的自动运维丨Dev for Dev 专栏

声网

Dev for Dev 自动运维

个推TechDay直播预告 | 8月24日晚19:30,实时数仓搭建保姆级教程开课

个推

数据仓库 实时数仓 Flink 平台

避免 10 大 NGINX 配置错误(下)

NGINX开源社区

nginx 配置 配置分析 故障排除

新书上市 | 连载 5 年,千万读者追更,这本书讲透了通信背后的故事!

图灵教育

开源一夏 | Node.js实战对于Buffer和Stream模块系统的深入剖析

恒山其若陋兮

开源 8月月更

把充电宝拆了看看

Sher10ck

拆解 充电宝

罗技产品究竟能不能带来便捷感

Amazing_eve

#开源

从函数计算到 Serverless 架构

阿里巴巴中间件

阿里云 开源 Serverless 云原生

【Java】:数组的创建、赋值、访问以及长度

翼同学

Java 学习 编程语言 分享 8月月更

RocksDB在大规模分布式系统应用中的经验

CnosDB

时序数据库 开源社区 CnosDB 工程师有话说 CnosDB Tech Talk

打破底层技术瓶颈,RTC技术或成为物联网市场的强劲引擎

擎声科技

物联网 RTC sdk 实时音视频 擎声Qtt

每日一R「09」类型系统(三)

Samson

8月月更 ​Rust

开源贡献者计划 2022 第二期正式启动!争做战“码”先锋!

InfoQ写作社区官方

开源 OpenHarmony 热门活动

IPv6邻居发现协议详解

穿过生命散发芬芳

NDP 8月月更

GPT 3.5与Llama 2微调的综合比较_生成式 AI_Ragntune_InfoQ精选文章