关于算法:训练个中文版ChatGPT没那么难不用A100开源AlpacaLoRARTX-4090就能搞定

2次阅读

共计 4442 个字符,预计需要花费 12 分钟才能阅读完成。

转载自机器之心
编辑:一点人工一点智能
原文:训练个中文版 ChatGPT 没那么难:不必 A100,开源 Alpaca-LoRA+RTX 4090 就能搞定
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 我的项目问世后,围绕该项目标教程和训练成绩不断涌现,本文将介绍其中的几个。

01  如何应用 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 文件夹里,文件夹层次结构就像上面这样:
1 unconverted-weights
2 ├7B
3 │ ├── checklist.chk
4 │├── consolidated.00.pth
5 │└── params.json
6 ├–tokenizer.model
7 └── 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
失去最终的目录构造应该是这样的:
1 weights
2├── llama-7b
3└── tokenizermdki
解决好上述两步,来到第三步,装置 Cog:
1 sudo curl -o /usr/local/bin/cog -L “https://github.com/replicate/cog/releases/latest/download/cog_$(uname -s)_$(uname -m)”
2 sudo chmod +x /usr/local/bin/cog
第四步来到微调模型,默认状况下,微调脚本上配置的 GPU 性能较弱,但如果你有性能更好的 GPU,则能够在 finetune.py 中将 MICRO_BATCH_SIZE 减少到 32 或 64。此外,如果你有指令调优数据集,则能够在 finetune.py 中编辑 DATA_PATH 以指向本人的数据集。须要留神的是这一项操作应该确保数据格式与 alpaca_data_cleaned.json 雷同。接下来运行微调脚本:
1 cog run python finetune.py
微调过程在 40GB A100 GPU 上破费 3.5 小时,对于解决能力较低的 GPU 则须要更多工夫。
最初一步用 Cog 运行模型:
1$ cog predict i prompt=”Tell me something about alpacas.”
2 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-home…
·将模型部署到云平台上;
·联合其余 LoRA,比方 Stable Diffusion LoRA,把这些都用到图像畛域;
·应用 Alpaca 数据集(或其余数据集)微调更大的 LLaMA 模型,并查看它们的体现。这应该能够通过 PEFT 和 LoRA 实现,只管它须要更大的 GPU。

02  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?continu…
—— 精彩举荐 ——
1、举荐 -《ChatGPT 调研报告》- 哈尔滨工业大学
2、万字拆解!追溯 ChatGPT/GPT3.5 各项能力的起源
3、在「机器人畛域」应用 ChatGPT 进步生产力
4、复旦邱锡鹏:深度分析 ChatGPT 类大语言模型的关键技术
5、张俊林:由 ChatGPT 反思大语言模型(LLM)的技术精要
6、一文读懂 chatGPT 模型原理(无公式)

正文完
 0