全面对比GPT-3.5与LLaMA 2微调

通用大模型虽好,但通过微调得到一个专属大模型不仅可以提高模型的可操控性、输出格式的可靠性和语气的一致性,还能让用户缩短提示长度,加速API调用,降低成本。

本文作者Sam L'Huillier对GPT-3.5与LLaMA 2的微调进行了基准测试,以验证手动微调的模型能否以较低的成本接近GPT-3.5的性能水平,从而帮助用户在各类任务中选择最佳微调模型。

本文作者是微调实践者Sam L'Huillier。Sam毕业于伦敦帝国理工学院,曾是Brev.dev的创始工程师,致力于构建GPU云。

(本文由OneFlow编译发布,转载请联系授权。原文:
ragntune.com/blog/gpt3.5...

作者 | Sam L'Huillier

OneFlow编译

翻译|杨婷、宛子琳

本文中,我将分享在SQL任务和函数表示任务中,对GPT-3.5与LLaMA 2的微调进行基准测试的实验。总体而言:

  • GPT-3.5在SQL任务(github.com/samlhuillie... )和函数表示(github.com/samlhuillie... )任务中的表现都略优于用LoRA微调的CodeLLaMA-34B(我发现的效果最好的模型)。
  • GPT-3.5的训练成本要高出4-6倍(部署成本甚至更高)。

为什么要做这个对比?因为GPT-3.5的微调十分昂贵,我想通过实验来验证,手动微调的模型能否以较低的成本接近GPT-3.5的性能水平。有趣的是,手动微调的模型性能确实更接近GPT-3.5!

1

实验结果

CodeLLaMA-34B和训练至收敛的GPT-3.5模型在SQL任务和函数表示任务中的表现。GPT-3.5在这两个任务上的准确性都要略优于CodeLLaMA-34B。在让模型生成SQL查询时,我也使用了执行准确性作为指标以比较在虚拟数据库上执行查询的输出。(精确匹配准确性是字符级比较。)

训练成本

供参考:我在去中心化GPU市场vast.ai上使用了一块价格为0.475美元/每小时的A40 GPU。(因为CodeLLaMA-34B量化为int 8后占用的GPU内存略大于40GB,所以无法使用40GB的A100GPU)

2

实验设置

我使用了Spider数据集和Viggo函数表示数据集的子集。这些数据集非常适合微调:

  • 它们可以教导模型给出人们所期望的输出形式,而不是事实。SQL和函数表示任务都在寻求结构化输出。(这是Anyscale的建议。)
  • 在开箱即用的情况下,预训练模型在这两项任务上表现不佳。

关于GPT-3.5的微调,OpenAI只允许配置epoch数量。为了与OpenAI公平比较,我在LLaMA上进行了最小程度的超参数调优,允许OpenAI选择epoch数量,并在评估集上训练LLaMA直到收敛。

LLaMA架构

使用CodeLLaMA-34B和LoRA进行微调(而非全参数微调)是我的两个关键决策。

  • OpenAI很可能会做一些适配器或非全参数微调。(他们不可能同时管理和冷启动多个具有175B参数的模型。如了解相关信息请与我联系。)
  • Anyscale的另一篇博文指出,在SQL和函数表示等任务中,LoRA几乎可以媲美全参数微调。(www.anyscale.com/blog/fine-t...

我基本遵循了LoRA超参数设置。LoRA适配器配置如下:

ini 复制代码
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提示为:

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)如下:

ini 复制代码
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数据集与Spider数据集的交集。因此,给模型的上下文是一个类似的SQL创建命令:

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

(这样做完全是为了节省OpenAI词元数)

函数表示的提示示例如下:

sql 复制代码
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:

输出将为:

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

评估

两个模型都迅速收敛了。

图表展示了训练过程中模型在评估数据集上的损失。SQL(左图)在一段时间后开始出现过拟合。

对于SQL任务,我还使用了spider eval repo来计算SQL查询的执行准确率。该存储库设置了虚拟数据库,并将查询结果与GPT-3.5和LLaMA 2的查询输出进行了比较。

3

结论

本次实验表明,对于初步验证/最小可行产品(MVP)来说,微调GPT-3.5是一个不错的选择,但在其他方面,LLaMA 2等模型才是最佳选择。

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

  • 想要验证微调是否为解决特定任务/数据集的正确方法
  • 希望获得完全托管的体验

为什么要微调LLaMA 2等开源模型?

  • 希望节省成本
  • 希望从数据集中获取最佳性能
  • 希望在训练和部署基础设施方面具有完全灵活性
  • 希望保留某些私有数据

欢迎 Star、试用 OneFlow 最新版本:

github.com/Oneflow-Inc...

相关推荐
神奇夜光杯7 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
正义的彬彬侠10 分钟前
《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析
人工智能·决策树·机器学习·集成学习·boosting·xgboost
Debroon20 分钟前
RuleAlign 规则对齐框架:将医生的诊断规则形式化并注入模型,无需额外人工标注的自动对齐方法
人工智能
羊小猪~~27 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
AI小杨28 分钟前
【车道线检测】一、传统车道线检测:基于霍夫变换的车道线检测史诗级详细教程
人工智能·opencv·计算机视觉·霍夫变换·车道线检测
晨曦_子画32 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
道可云34 分钟前
道可云人工智能&元宇宙每日资讯|2024国际虚拟现实创新大会将在青岛举办
大数据·人工智能·3d·机器人·ar·vr
人工智能培训咨询叶梓43 分钟前
探索开放资源上指令微调语言模型的现状
人工智能·语言模型·自然语言处理·性能优化·调优·大模型微调·指令微调
zzZ_CMing43 分钟前
大语言模型训练的全过程:预训练、微调、RLHF
人工智能·自然语言处理·aigc
newxtc44 分钟前
【旷视科技-注册/登录安全分析报告】
人工智能·科技·安全·ddddocr