随着生成式 AI 不断升温,全球开发者正抓住机会,用自然语言构建令人兴奋的应用。其中一个备受关注的工具就是 ChatGPT。
ChatGPT 是由 OpenAI 开发的语言模型,旨在作为一款由 AI 驱动的聊天机器人,能够进行类人对话。尽管它非常实用,但也并非完美。ChatGPT 不是开源的,这意味着其源代码不可访问且无法修改。此外,它对资源的需求极高,因此自行实现一个替代方案并不可取。
这些问题催生了一系列 ChatGPT 的替代方案,例如 Alpaca-LoRA,它们能够像 ChatGPT 一样工作,但采用开源许可,且资源需求更低。
在本教程中,我们将重点介绍 Alpaca-LoRA。我们将讲解它是什么、在您的设备上运行它需要哪些前提条件,以及具体的执行步骤。
什么是 Alpaca LoRA?
2023 年 3 月上旬,Eric J. Wang 发布了 Alpaca-LoRA 项目。该项目包含用于复现 Stanford Alpaca 结果的代码,方法是使用 参数高效微调(PEFT)——一个让开发者可以基于 LoRA 对 Transformer 模型进行微调的库。
理解 LoRA
低秩适配(LoRA)是用于在占用更少内存的同时加速大型语言模型训练的一种方法。
其工作原理如下:
- 冻结现有权重。可以把模型想象成由众多相互连接的节点组成的复杂网络(即“权重”)。通常在训练中,您会调整所有这些节点以改进模型。LoRA 的思路是:“先别动它们,保持原样。”
- 添加新权重。随后 LoRA 会在这个网络中加入一些新的、更简单的连接(新权重)。
- 只训练新权重。与其调整整张复杂网络,不如只专注于优化这些新的、更简单的连接。
通过这种方式,您既能节省时间和内存,又能提升模型在任务上的表现。
LoRA 的优势
LoRA 的优势包括:
- 可移植性——秩分解后的权重矩阵包含的可训练参数远少于原始模型;因此,已训练的 LoRA 权重易于移植,甚至可以在树莓派上运行。
- 可及性——与常规微调相比,LoRA 显著降低了 GPU 内存占用;这使得在消费级 GPU(如 Tesla T4、RTX 3080,甚至 RTX 2080 Ti)上进行微成为可能。
Alpaca:开源模型
Alpaca 则是一种基于 Large Language Model Meta AI(LLaMA)的开源、指令微调的 AI 语言模型。它由斯坦福大学的研究团队开发,旨在让大型语言模型(LLM)更易获得。
这就引出了 Alpaca-LoRA。
Alpaca-LoRA 模型是在 Stanford Alpaca 模型基础上,利用 LoRA 加速训练并减少内存占用的低资源版本。
Alpaca-LoRA 运行前提
要在本地运行 Alpaca-LoRA 模型,您必须配备 GPU。可以是低规格的 GPU(如 NVIDIA T4),也可以是消费级 GPU(如 4090)。据该项目作者 Eric J. Wang 称,该模型“在单块 RTX 4090 上可在数小时内运行”。
注意:本文中的指引遵循 Eric J. Wang 在 Alpaca-LoRA 仓库中提供的说明。
四步运行 Alpaca-LoRA
步骤 1:创建虚拟环境(可选)
虚拟环境是隔离的容器,用于存放某个项目所需的 Python 相关依赖。这样可以将不同项目的依赖分离,便于共享项目并减少依赖冲突。
运行 Alpaca-LoRA 模型并不强制要求使用虚拟环境,但推荐使用。
在 Windows 操作系统中使用命令提示符创建虚拟环境,请运行:
py -m venv venv技术支持
这将在当前工作目录中创建一个名为 venv 的虚拟环境。
注意:您可以将最后一个 venv 替换为您偏好的名称,以自定义虚拟环境名。
在安装任何依赖前,您需要先激活虚拟环境。运行以下命令进行激活:
venv\Scripts\activate.bat技术支持
当您不再使用虚拟环境时,运行以下命令将其停用:
deactivate技术支持
现在,您已准备好开始运行 Alpaca-LoRA。
步骤 2:环境设置
运行 Alpaca-LoRA 模型的第一步,是从 GitHub 克隆仓库,并安装运行所需的依赖。
使用以下命令克隆 GitHub 仓库:
git clone https://github.com/tloen/alpaca-lora.git技术支持
然后进入刚刚克隆的 alpaca-lora 仓库:
cd alpaca-lora技术支持
接着运行以下命令安装依赖:
pip install -r requirements.txt技术支持
步骤 3:微调模型(可选)
alpaca-lora 仓库中包含一个名为 finetune.py 的文件。finetune.py 实现了对 LLaMA 模型进行参数高效微调(PEFT)的简要示例等内容。
如果您希望调整模型的超参数,需要执行该文件,但并非必需。根据仓库作者所述,“即使不做超参数调优,LoRA 模型的输出也可与 Stanford Alpaca 模型相媲美。进一步调优可能获得更好的表现 [...]。”
以下是如何使用 finetune.py 的示例:
python -m finetune.py \
--base_model 'decapoda-research/llama-7b-hf' \
--data_path 'yahma/alpaca-cleaned' \
--output_dir './lora-alpaca' \
--batch_size 128 \
--micro_batch_size 4 \
--num_epochs 3 \
--learning_rate 1e-4 \
--cutoff_len 512 \
--val_set_size 2000 \
--lora_r 8 \
--lora_alpha 16 \
--lora_dropout 0.05 \
--lora_target_modules '[q_proj,v_proj]' \
--train_on_inputs \
--group_by_length技术支持
步骤 4:运行模型 / 推理
alpaca-lora 仓库中还有一个名为 generate.py 的文件。执行 generate.py 将完成以下操作:
- 从 Hugging Face 模型库读取基础模型
- 从
tloen/alpaca-lora-7b 读取模型权重
- 启动一个 Gradio 界面,在指定输入上进行推理。
撰文时,用于训练该模型的最新 Alpaca-LoRA 适配器是 alpaca-lora-7b。这次训练于 2023 年 3 月 26 日进行,使用的命令如下:
python finetune.py \
--base_model='decapoda-research/llama-7b-hf' \
--num_epochs=10 \
--cutoff_len=512 \
--group_by_length \
--output_dir='./lora-alpaca' \
--lora_target_modules='[q_proj,k_proj,v_proj,o_proj]' \
--lora_r=16 \
--micro_batch_size=8技术支持
如果您希望使用其他适配器,可以在运行 generate.py 时,提供您偏好适配器的目标链接:
python generate.py \
--load_8bit \
--base_model 'decapoda-research/llama-7b-hf' \
--lora_weights 'tloen/alpaca-lora-7b'技术支持
总结
Alpaca-LoRA 是 Stanford Alpaca 模型的低资源版本。它通过对大型语言模型进行低秩适配(LoRA),在显著降低内存占用的同时加速训练过程,相较原始 Alpaca 模型更加高效。
进一步学习大型语言模型(LLM)与生成式 AI,请参阅以下教程:
随着生成式 AI 不断升温,全球开发者正抓住机会,用自然语言构建令人兴奋的应用。其中一个备受关注的工具就是 ChatGPT。
ChatGPT 是由 OpenAI 开发的语言模型,旨在作为一款由 AI 驱动的聊天机器人,能够进行类人对话。尽管它非常实用,但也并非完美。ChatGPT 不是开源的,这意味着其源代码不可访问且无法修改。此外,它对资源的需求极高,因此自行实现一个替代方案并不可取。
这些问题催生了一系列 ChatGPT 的替代方案,例如 Alpaca-LoRA,它们能够像 ChatGPT 一样工作,但采用开源许可,且资源需求更低。
在本教程中,我们将重点介绍 Alpaca-LoRA。我们将讲解它是什么、在您的设备上运行它需要哪些前提条件,以及具体的执行步骤。
什么是 Alpaca LoRA?
2023 年 3 月上旬,Eric J. Wang 发布了 Alpaca-LoRA 项目。该项目包含用于复现 Stanford Alpaca 结果的代码,方法是使用 参数高效微调(PEFT)——一个让开发者可以基于 LoRA 对 Transformer 模型进行微调的库。
理解 LoRA
低秩适配(LoRA)是用于在占用更少内存的同时加速大型语言模型训练的一种方法。
其工作原理如下:
通过这种方式,您既能节省时间和内存,又能提升模型在任务上的表现。
LoRA 的优势
LoRA 的优势包括:
Alpaca:开源模型
Alpaca 则是一种基于 Large Language Model Meta AI(LLaMA)的开源、指令微调的 AI 语言模型。它由斯坦福大学的研究团队开发,旨在让大型语言模型(LLM)更易获得。
这就引出了 Alpaca-LoRA。
Alpaca-LoRA 模型是在 Stanford Alpaca 模型基础上,利用 LoRA 加速训练并减少内存占用的低资源版本。
Alpaca-LoRA 运行前提
要在本地运行 Alpaca-LoRA 模型,您必须配备 GPU。可以是低规格的 GPU(如 NVIDIA T4),也可以是消费级 GPU(如 4090)。据该项目作者 Eric J. Wang 称,该模型“在单块 RTX 4090 上可在数小时内运行”。
注意:本文中的指引遵循 Eric J. Wang 在 Alpaca-LoRA 仓库中提供的说明。
四步运行 Alpaca-LoRA
步骤 1:创建虚拟环境(可选)
虚拟环境是隔离的容器,用于存放某个项目所需的 Python 相关依赖。这样可以将不同项目的依赖分离,便于共享项目并减少依赖冲突。
运行 Alpaca-LoRA 模型并不强制要求使用虚拟环境,但推荐使用。
在 Windows 操作系统中使用命令提示符创建虚拟环境,请运行:
这将在当前工作目录中创建一个名为 venv 的虚拟环境。
注意:您可以将最后一个 venv 替换为您偏好的名称,以自定义虚拟环境名。
在安装任何依赖前,您需要先激活虚拟环境。运行以下命令进行激活:
当您不再使用虚拟环境时,运行以下命令将其停用:
现在,您已准备好开始运行 Alpaca-LoRA。
步骤 2:环境设置
运行 Alpaca-LoRA 模型的第一步,是从 GitHub 克隆仓库,并安装运行所需的依赖。
使用以下命令克隆 GitHub 仓库:
然后进入刚刚克隆的
alpaca-lora仓库:接着运行以下命令安装依赖:
步骤 3:微调模型(可选)
alpaca-lora仓库中包含一个名为finetune.py的文件。finetune.py实现了对 LLaMA 模型进行参数高效微调(PEFT)的简要示例等内容。如果您希望调整模型的超参数,需要执行该文件,但并非必需。根据仓库作者所述,“即使不做超参数调优,LoRA 模型的输出也可与 Stanford Alpaca 模型相媲美。进一步调优可能获得更好的表现 [...]。”
以下是如何使用
finetune.py的示例:步骤 4:运行模型 / 推理
alpaca-lora仓库中还有一个名为generate.py的文件。执行generate.py将完成以下操作:tloen/alpaca-lora-7b读取模型权重撰文时,用于训练该模型的最新 Alpaca-LoRA 适配器是
alpaca-lora-7b。这次训练于 2023 年 3 月 26 日进行,使用的命令如下:如果您希望使用其他适配器,可以在运行
generate.py时,提供您偏好适配器的目标链接:总结
Alpaca-LoRA 是 Stanford Alpaca 模型的低资源版本。它通过对大型语言模型进行低秩适配(LoRA),在显著降低内存占用的同时加速训练过程,相较原始 Alpaca 模型更加高效。
进一步学习大型语言模型(LLM)与生成式 AI,请参阅以下教程: