跳至主要内容

如何在您的设备上运行 Alpaca-LoRA

通过本综合指南,了解如何在您的设备上运行 Alpaca-LoRA。了解该开源模型如何利用 LoRA 技术,提供强大而高效的 AI 聊天机器人解决方案。
· 7分钟 阅读

使用 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 会在这个网络中加入一些新的、更简单的连接(新权重)。
  • 只训练新权重。与其调整整张复杂网络,不如只专注于优化这些新的、更简单的连接。

通过这种方式,您既能节省时间和内存,又能提升模型在任务上的表现。

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,请参阅以下教程:

Kurtis Pykes

作者

Kurtis Pykes

主题