Alpaca-Lora (羊驼-Lora): 轻量级 ChatGPT 的开源实现(对标 Standford Alpaca)

Alpaca-Lora (羊驼-Lora): 轻量级 ChatGPT 的开源实现(对标 Standford Alpaca)

文章目录

  • Alpaca-Lora (羊驼-Lora): 轻量级 ChatGPT 的开源实现(对标 Standford Alpaca)
    • 总览
    • 前言(与正文可能无关,可以忽略)
    • LoRA 简要介绍
    • 各类资源
    • Alpaca-Lora Colab 体验
    • 本地安装
      • 环境准备
      • 运行 generate.py
    • 小结

总览

本文介绍 Alpaca-Lora (羊驼-Lora),可以认为是 ChatGPT 轻量级的开源版本,它使用 Lora (Low-rank Adaptation) 技术在 Meta 的 LLaMA 7B 模型上微调,只需要训练很小一部分参数就可以获得媲美 Standford Alpaca 模型的效果;本文重点在它的本地安装方法

前言(与正文可能无关,可以忽略)

前段时间介绍了 Stanford Alpaca (羊驼):ChatGPT 学术版开源实现,感觉大家热情高涨,可能 Stanford Alpaca 团队也感受到了这些热情,在线体验地址也暂时关闭了。我看 Stanford Alpaca 的训练代码已经开源,如果要训练的话,需要向 Meta 提交 LLaMA 的申请问卷,目前我已提交,在等 Meta 的邮件回复。

等待过程中惊奇的发现 Alpaca-LoRA: Low-Rank LLaMA Instruct-Tuning 项目,它居然可以直接访问 LLaMA-7B 模型!经过一番折腾,终于在本地成功部署,效果如下:

左边红框我要它输出一段 Python 代码,右边红框中它实现了一个加法函数,效果不错!可惜我 GPU 显存太小,只有 8G,模型参数量化后虽然可以成功加载,但是做预估时会报奇怪的错误,所以我最后一刻决定用 CPU 运行。。。先把问题解决再考虑后续优化。

本文主要介绍一下本地安装的方法。文中列出的资源可以在 “各类资源” 这一节中找到。

LoRA 简要介绍

关于 Alpaca-Lora 和 Stanford Alpaca 模型的区别,我先入为主的印象是,Stanford Alpaca 是在 LLaMA 整个模型上微调,而 Alpaca-Lora 则是利用 Lora 技术(LoRA: Low-Rank Adaptation of Large Language Models),在冻结原模型 LLaMA 参数的情况下,通过往模型中加入额外的网络层,并只训练这些新增的网络层参数。由于这些新增参数数量较少,这样不仅 finetune 的成本显著下降,还能获得和全模型微调类似的效果。想想最近 Stable Diffusion 文生图扩散模型(Stable Diffusion 原理介绍与源码分析(一、总览))的效果,在 LoRA 的加持下,可以生成很高质量的图片。

LoRA 的结构如下:

蓝色模块是原模型,而橙色模块则是新增网络层,通过控制参数 r 的大小,可以有效减少新增网络层的参数。

各类资源

  • Alpaca-Lora 地址:https://github.com/tloen/alpaca-lora
  • Standford Alpaca 地址:https://github.com/tatsu-lab/stanford_alpaca
  • Lora 的论文地址:https://arxiv.org/abs/2106.09685
  • LLaMA-7B-HF 模型地址:https://huggingface.co/decapoda-research/llama-7b-hf
  • Lora 参数地址:https://huggingface.co/tloen/alpaca-lora-7b
  • 如何优雅的下载huggingface-transformers模型: https://zhuanlan.zhihu.com/p/475260268

Alpaca-Lora Colab 体验

如果想在线快速体验,可以使用 Colab,打开 Alpaca-Lora 项目 Github 主页,点击如下红框给出的链接即可。

网速极快,体验贼好,免去了本地安装的一切烦恼。。。

本地安装

环境准备

虽然 README 文件中说使用 pip install -r requirements.txt 就 OK 了,但是我还是决定用 conda 创建一个虚拟环境,environment.yaml 文件如下:

name: alpaca
channels:
  - pytorch
  - defaults
dependencies:
  - python=3.8.5
  - pip=20.3
  - cudatoolkit=11.3
  - pytorch=2.0.0
  - numpy=1.19.2
  - pip:
    - datasets
    - loralib 
    - sentencepiece
    - accelerate
    - bitsandbytes
    - gradio
    - appdirs
    - -e git+https://github.com/huggingface/transformers.git@main#egg=transformers
    - -e git+https://github.com/huggingface/peft.git@main#egg=peft

然后使用如下命令激活:(顺便吐槽一句,master 分支如今写成 main 分支,哈哈)

conda env create -f environment.yaml
conda activate alpaca

激活后,可以再执行 pip install -r requirements.txt 进行 double check。

运行 generate.py

正常情况下,如果有超过 8G 的 GPU 显存,并且网络之类的都相当 good 的话,那么直接运行 python generate.py 就能成功。

但这篇文章之所以有存在的必要,就是因为遇到太多不正常的情况😂😂😂

首先是模型参数的下载,包括 LLaMA-7B-HF 大模型(地址:https://huggingface.co/decapoda-research/llama-7b-hf)以及 Lora 参数 (地址:https://huggingface.co/tloen/alpaca-lora-7b),下载报 HTTP Requests 之类的错误。

我参考 《如何优雅的下载huggingface-transformers模型》(地址:https://zhuanlan.zhihu.com/p/475260268)一文,安装 huggingface_hub 进行模型下载,速度非常快,执行如下命令下载模型:

>>> from huggingface_hub import snapshot_download
>>> snapshot_download(repo_id="decapoda-research/llama-7b-hf")

结果如下:

不过快下载完的时候报错中断,我把上面的命令重新执行一次,就能正常接着下载:

模型下载成功后,终端会输出模型的保存地址,可以使用 stat -Lc "%n %s" * 命令大致看下各文件大小有没有缺斤少两的,和 Hugging Face 上的模型大小简单对比一下:

该命令中, -L 表示对 soft link 进行处理,-c "%n %s" 指定输出格式,其中 %n 表示文件的名字,%s 表示文件大小,我看着文件大小符合预期。

别忘了 LoRA 模型哈: 执行 snapshot_download(repo_id="tloen/alpaca-lora-7b") 下载 Lora 参数。

然后接着运行 generate.py,可是在如下代码报错:

直接注释即可。

解决上述问题后,我使用 8G 的 GPU 运行,仍然会在中途报 ZeroDivisionError: integer division or module by zero

我是通过去修改 accelerate 这个包的源码避开这个问题的,需要简单读一下 get_max_memory() 函数的实现。最后运行成功界面如下:

不过也注意到显存快到极限了。因此就算避开了上述问题,由于 GPU 显存天然的限制(就像游戏中要你氪金,你偏不氪,那么体验肯定不会好),后面再其他地方仍会报错,我尝试解决无果,最终决定在 CPU 上运行

再贴一次成功后的画面:

小结

本文介绍了 ChatGPT 轻量级的开源版本 Alpaca-Lora (羊驼-Lora),它使用 Lora (Low-rank Adaptation) 技术在 Meta 的 LLaMA 7B 模型上微调,只需要训练很小一部分参数就可以获得媲美 Standford Alpaca 模型的效果。此外还较为详细的介绍了其在本地安装的方法。

经此一役,愈发感慨 GPU 的重要性,哪怕多给我 1G,也不至于如此窘迫。为了省出一点显存资源,我把其他能关闭的进程都关闭了,还得去 debug 之类的… 当初想着自己不玩大型游戏,觉得 8G 够用了… 人类对算力的需求是永无止境的。好好加班,攒信仰!

(对了,可以在微信中搜索 “珍妮的算法之路” 或者 “world4458” 关注我的微信公众号, 及时获取最新原创技术文章更新。。。)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年4月23日
下一篇 2023年4月23日

相关推荐