全面对比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...

相关推荐
weixin_505154461 小时前
打破传统界限:Bowell Studio引领3D作业指导新纪元
人工智能·3d·制造·数据安全·数字孪生·数据可视化
ModelHub XC信创模盒3 小时前
中国信创AI生态下 “信创模盒”社区战略招募种子用户
人工智能·大模型·开发者·信创·算力
袋鼠云数栈3 小时前
集团数字化统战实战:统一数据门户与全业态监管体系构建
大数据·数据结构·人工智能·多模态
廋到被风吹走3 小时前
【AI】Codex 多语言实测:Python/Java/JS/SQL 效果横评
java·人工智能·python
cskywit4 小时前
【IEEE TNNLS 2025】赋予大模型“跨院行医”的能力:基于全局与局部提示的医学图像泛化框架 (GLP) 解析
人工智能
2501_948114244 小时前
AI API Gateway 选型指南:2026 年生产环境下的聚合平台深度对比
人工智能·gateway
实在智能RPA4 小时前
Agent 在物流行业能实现哪些自动化?——深度拆解 AI Agent 驱动的智慧物流新范式
运维·人工智能·ai·自动化
TechubNews4 小时前
Jack Dorsey:告别传统公司层级,借助 AI 走向智能体架构
大数据·人工智能
伴野星辰4 小时前
如何提高YOLO8目标检测的准确性?
人工智能·目标检测·机器学习
胡耀超5 小时前
Token的八副面孔:为什么“词元“不需要更好的翻译,而需要更多的读者
大数据·人工智能·python·agent·token·代币·词元