相关文章推荐
温柔的金针菇  ·  MATLAB中循环画直线,并随机改变线条颜色 ...·  5 月前    · 
含蓄的消防车  ·  docker - What is the ...·  2 年前    · 
打篮球的啄木鸟  ·  sql截取最后一个/后的字符串-掘金·  2 年前    · 
刚失恋的木瓜  ·  java 8 stream group ...·  2 年前    · 
不拘小节的口罩  ·  c# - How to use ...·  2 年前    · 
Code  ›  训练个中文版ChatGPT没那么难:不用A100,开源Alpaca-LoRA+RTX 4090就能搞定开发者社区
科技新闻 开放源代码 lora
https://cloud.tencent.com/developer/article/2248833
礼貌的小熊猫
1 年前
机器之心

训练个中文版ChatGPT没那么难:不用A100,开源Alpaca-LoRA+RTX 4090就能搞定

腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
机器之心
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > 训练个中文版ChatGPT没那么难:不用A100,开源Alpaca-LoRA+RTX 4090就能搞定

训练个中文版ChatGPT没那么难:不用A100,开源Alpaca-LoRA+RTX 4090就能搞定

作者头像
机器之心
发布 于 2023-03-29 12:11:47
2.4K 0
发布 于 2023-03-29 12:11:47
举报
文章被收录于专栏: 机器之心 机器之心

机器之心报道

机器之心编辑部

Alpaca-LoRA 将微调类 ChatGPT 模型的算力需求降到了消费级,训练个自己的中文对话模型真就没那么难了。

2023 年,聊天机器人领域似乎只剩下两个阵营:「OpenAI 的 ChatGPT」和「其他」。

ChatGPT 功能强大,但 OpenAI 几乎不可能将其开源。「其他」阵营表现欠佳,但不少人都在做开源方面的努力,比如前段时间 Meta 开源的 LLaMA 。

LLaMA 是一系列模型的总称,参数量从 70 亿到 650 亿不等,其中,130 亿参数的 LLaMA 模型「在大多数基准上」可以胜过参数量达 1750 亿的 GPT-3。不过,该模型并没有经过指令微调(instruct tuning),因此生成效果较差。

为了提高模型性能,来自斯坦福的研究者帮助其完成了指令微调的工作,训练了一个名为 Alpaca (羊驼)的 70 亿参数新模型(基于 LLaMA 7B)。具体来说,他们让 OpenAI 的 text-davinci-003 模型以 self-instruct 方式生成 52K 指令遵循(instruction-following)样本,以此作为 Alpaca 的训练数据。实验结果表明,Alpaca 的很多行为都与 text-davinci-003 类似。也就是说,只有 7B 参数的轻量级模型 Alpaca 性能可媲美 GPT-3.5 这样的超大规模语言模型。

对于普通研究者来说,这是一种切实可行的廉价微调方式,不过需要的运算量仍然较大(作者表示他们在 8 个 80GB A100 上微调了 3 个小时)。而且,Alpaca 的种子任务都是英语,收集的数据也都是英文,因此训练出来的模型未对中文优化。

为了进一步降低微调成本,另一位来自斯坦福的研究者 ——Eric J. Wang 使用 LoRA(low-rank adaptation)技术复现了 Alpaca 的结果。具体来说,Eric J. Wang 使用一块 RTX 4090 显卡,只用 5 个小时就训练了一个和 Alpaca 水平相当的模型,将这类模型对算力的需求降到了消费级。而且,该模型可以在树莓派上运行(用于研究)。

LoRA 的技术原理。LoRA 的思想是在原始 PLM 旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的 intrinsic rank。训练的时候固定 PLM 的参数,只训练降维矩阵 A 与升维矩阵 B。而模型的输入输出维度不变,输出时将 BA 与 PLM 的参数叠加。用随机高斯分布初始化 A,用 0 矩阵初始化 B,保证训练的开始此旁路矩阵依然是 0 矩阵(引自:https://finisky.github.io/lora/)。LoRA 的最大优势是速度更快,使用的内存更少,因此可以在消费级硬件上运行。

Eric J. Wang 发布的 Alpaca-LoRA 项目。

项目地址:https://github.com/tloen/alpaca-lora

对于想要训练自己的类 ChatGPT 模型(包括中文版类 ChatGPT)但又没有顶级算力资源配置的研究者来说,这无疑是一大惊喜。因此,在 Alpaca-LoRA 项目问世后,围绕该项目的教程和训练成果不断涌现,本文将介绍其中的几个。

如何使用 Alpaca-LoRA 微调 LLaMA

在 Alpaca-LoRA 项目中,作者提到,为了廉价高效地进行微调,他们使用了 Hugging Face 的 PEFT。PEFT 是一个库(LoRA 是其支持的技术之一),可以让你使用各种基于 Transformer 的语言模型并使用 LoRA 对其进行微调。好处在于,它允许你在一般的硬件上廉价而有效地微调模型,并有较小的(也许是可组合的)输出。

在近期的一篇博客中,几位研究者介绍了如何使用 Alpaca-LoRA 来微调 LLaMA。

使用 Alpaca-LoRA 之前,需要具备一些先决条件。首先是 GPU 的选择,得益于 LoRA,现在你可以在 NVIDIA T4 这样低规格 GPU 或 4090 消费级 GPU 上完成微调;此外,你还需要申请 LLaMA 权重,因为其权重并不对外公开。

先决条件具备了,接下来就是如何使用 Alpaca-LoRA。首选你需要克隆 Alpaca-LoRA 存储库,代码如下:

git clone https://github.com/daanelson/alpaca-loracd alpaca-lora

其次,获取 LLaMA 权重。将下载到的权重值存储到名为 unconverted-weights 文件夹里,文件夹层次结构就像下面这样:

unconverted-weights├── 7B│   ├── checklist.chk│   ├── consolidated.00.pth│   └── params.json├── tokenizer.model└── tokenizer_checklist.chk

权重存储好后,接着使用以下命令将 PyTorch checkpoint 的权重转换为 transformer 兼容的格式:

cog run python -m transformers.models.llama.convert_llama_weights_to_hf \  --input_dir unconverted-weights \  --model_size 7B \  --output_dir weights

得到最终的目录结构应该是这样的:

weights├── llama-7b└── tokenizermdki

处理好上述两步,来到第三步,安装 Cog:

sudo curl -o /usr/local/bin/cog -L "https://github.com/replicate/cog/releases/latest/download/cog_$(uname -s)_$(uname -m)"sudo chmod +x /usr/local/bin/cog

第四步来到微调模型,默认情况下,微调脚本上配置的 GPU 功能较弱,但如果你有性能更好的 GPU,则可以在 finetune.py 中将 MICRO_BATCH_SIZE 增加到 32 或 64。此外,如果你有指令调优数据集,则可以在 finetune.py 中编辑 DATA_PATH 以指向自己的数据集。需要注意的是这一项操作应该确保数据格式与 alpaca_data_cleaned.json 相同。接下来运行微调脚本:

cog run python finetune.py

微调过程在 40GB A100 GPU 上花费 3.5 小时,对于处理能力较低的 GPU 则需要更多时间。

最后一步用 Cog 运行模型:

$ cog predict -i prompt="Tell me something about alpacas."Alpacas are domesticated animals from South America. They are closely related to llamas and guanacos and have a long, dense, woolly fleece that is used to make textiles. They are herd animals and live in small groups in the Andes mountains. They have a wide variety of sounds, including whistles, snorts, and barks. They are intelligent and social animals and can be trained to perform certain tasks.

教程作者表示,在完成以上步骤之后,大家可以继续尝试各种玩法,包括但不限于:

  • 带上你自己的数据集,微调你自己的 LoRA,比如微调 LLaMA,让它像动漫角色一样说话。参见:https://replicate.com/blog/fine-tune-llama-to-speak-like-homer-simpson
  • 将模型部署到云平台上;
  • 结合其他 LoRA,比如 Stable Diffusion LoRA,把这些都用到图像领域;
  • 使用 Alpaca 数据集(或其他数据集)微调更大的 LLaMA 模型,并查看它们的表现。这应该可以通过 PEFT 和 LoRA 实现,尽管它需要更大的 GPU。

Alpaca-LoRA 的衍生项目

尽管 Alpaca 性能可以媲美 GPT 3.5,但其种子任务都是英语,收集的数据也都是英文,因此训练出来的模型对中文并不友好。为了提升对话模型在中文上的效果,我们看看都有哪些比较好的项目。

首先是来自华中师范大学等机构的三位个人开发者开源的中文语言模型骆驼 (Luotuo),该项目基于 LLaMA、Stanford Alpaca、Alpaca LoRA、Japanese-Alpaca-LoRA 等完成,单卡就能完成训练部署。有意思的是,他们之所以将模型名字命名为骆驼,是因为 LLaMA(大羊驼)和 alpaca(羊驼)都属于偶蹄目 - 骆驼科。这样看来,起这个名字也在意料之中。

这个模型是在 Meta 开源的 LLaMA 基础上,参考 Alpaca 和 Alpaca-LoRA 两个项目,对中文进行了训练。

项目地址:https://github.com/LC1332/Chinese-alpaca-lora

目前该项目释放了两个模型 luotuo-lora-7b-0.1、luotuo-lora-7b-0.3,还有一个模型在计划中:

下面是效果展示:

不过 luotuo-lora-7b-0.1(0.1)、luotuo-lora-7b-0.3(0.3)还是有差距的,在用户询问华中师范大学地址时,0.1 回答错误:

除了进行简单的对话外,还有人在保险相关领域进行了模型优化。据这位推特网友表示,借助 Alpaca-LoRA 项目,他输入了一些中文保险问答数据,最后效果也不错。

具体来说,作者训练中文版 Alpaca LoRa 用了 3K 多条中文问答保险语料,实现过程使用了 LoRa 方法,并微调 Alpaca 7B 模型,耗时 240 分钟,最终 Loss 0.87 。

图源:https://twitter.com/nash_su/status/1639273900222586882

以下是训练过程和结果:

测试结果表明:1. 训练语料相关内容都能有大概合理的回复,但仅限于不胡说 2. 非语料相关内容则会强行回复某个语料内的数据 3. 逻辑推理数学计算则没有这个能力。

看到这个结果后网友纷纷喊要失业了:

最后期待更多的中文对话模型加入进来。

参考链接:https://replicate.com/blog/fine-tune-alpaca-with-lora?continueFlag=4ecae39885197a5c008faabbefb5c824

探寻隐私计算最新行业技术,「首届隐语开源社区开放日」报名启程

春暖花开之际,诚邀广大技术开发者&产业用户相聚活动现场,体验数智时代的隐私计算生态建设之旅,一站构建隐私计算产业体系知识:

  • 隐私计算领域焦点之性
  • 分布式计算系统的短板与升级策略
  • 隐私计算跨平台互联互通
  • 隐语开源框架金融行业实战经验

3月29日,北京·798机遇空间,隐语开源社区开放日,期待线下面基。

点击 阅读原文 ,立即报名。

© THE END

转载请联系本公众号获得授权

投稿或寻求报道:content@jiqizhixin.com

本文参与 腾讯云自媒体分享计划 ,分享自微信公众号。
原始发表:2023-03-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除
开源
隐私计算
模型
数据
性能

本文分享自 机器之心 微信公众号, 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

开源
隐私计算
模型
数据
性能
评论
登录 后参与评论
0 条评论
热度
最新
登录 后参与评论
推荐阅读
LV.
文章
0
获赞
0
相关产品与服务
隐私计算
腾讯云隐私计算(Privacy Computing)是腾讯云推出的以联邦学习(FL)、安全多方计算(MPC)、可信执行环境(TEE)等技术为基础的平台,产品使原始合作多方数据不出本地即可完成联合建模、安全求交(PSI)、隐匿查询(PIR)、安全统计分析等功能。
产品介绍 产品文档
开年上云有礼
  • 社区

    • 专栏文章
    • 阅读清单
    • 互动问答
    • 技术沙龙
    • 技术视频
    • 团队主页
    • 腾讯云TI平台
  • 活动

    • 自媒体分享计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 资源

    • 技术周刊
    • 社区标签
    • 开发者手册
    • 开发者实验室
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 商标注册
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

Copyright © 2013 - 2024 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
温柔的金针菇  ·  MATLAB中循环画直线,并随机改变线条颜色-百度经验
5 月前
含蓄的消防车  ·  docker - What is the meaning of ImagePullBackOff status on a Kubernetes pod? - Stack Overflow
2 年前
打篮球的啄木鸟  ·  sql截取最后一个/后的字符串-掘金
2 年前
刚失恋的木瓜  ·  java 8 stream group by multiple fields-掘金
2 年前
不拘小节的口罩  ·  c# - How to use RestSharp with async/await - Stack Overflow
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号