原创博客,转载请注明出处,谢谢!

一、背景

随着大模型的热度大爆特爆,开启了我的大模型探索之路。

要学习,首先找一个比较友好的模型:

(1) 用的人够多,遇到问题能找到,不至于两眼一抹黑;

(2) 模型能跑通、能运行,研究起来才能确定可行性;

(3) 模型不太复杂,学起来不会吃力,还可以自己动手各种魔改;

(4) 模型不能太大,我的个人主机可以跑得起来。

综上所述,Alpaca-Lora (羊驼-Lora) 就是一个很适合的模型!

二、系统信息

我自己的服务器和平时的工作电脑都是 win10 64 位的 Windows 系统。所以,开始尝试将该项目部署在 Windows 系统。

我的服务器配置的显卡是 RTX 3090,显存大小和 Alpaca-Lora 作者的 RTX 4090 是一样的,都是 24G,所以显存肯定没问题。如果你没 24G 的显卡,12G的显卡也勉强够用,因为最后模型推理的时候大概是 10G。如果你没有这么大显存的显卡,那就用 CPU 运行吧,模型可以跑的,只是有点慢而已。CPU部署简单很多,毕竟 Windows +GPU 会出现各种的错误。

介绍完在Windows CPU 上安装后,更多的内容会是关于 Windows GPU 的配置遇到的问题!

三、Alpaca-Lora 介绍

Alpaca-Lora 是 ChatGPT 轻量级的开源版本,在 Meta 的 LLaMA 7B 模型上,使用 Lora (Low-rank Adaptation) 进行微调,只需要训练很小一部分参数就可以获得媲美 Standford Alpaca 模型。

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

LLaMA-7B-HF 模型地址:https://huggingface.co/decapoda-research/llama-7b-hf

Lora 参数地址:https://huggingface.co/tloen/alpaca-lora-7b

最终效果及使用链接:https://huggingface.co/spaces/tloen/alpaca-lora

四、配置及安装

先介绍无论是 CPU 还是 GPU 都要配置的内容,然后介绍 CPU 配置、GPU 配置及一些遇到问题。

1. 下载项目

首先,你去 Github 已经把 Alpaca-Lora 下载到本地,或者 git 命令克隆到本地:git clone https://github.com/tloen/alpaca-lora.git

2. 下载权重

去 huggingface 下载 LLaMA-7B-HFLora 已经训练好的权重。如果不知道下哪些文件,那就全部都下。当然也可以用 huggingface 官方提供的下载方式下,不过经常断,导致还是直接手动下载会更快。

当然,如果你的显卡够大,可以用 13B 30B 65B 等更大的 LLaMA模型, Alpaca-Lora 项目的 README 里面都有。

我觉得像我一样用 Windows 搞大模型的人,自己心里应该有点数,就别太勉强自己的电脑了。

新建对应两个下载链接: https://huggingface.co/decapoda-research/llama-7b-hfhttps://huggingface.co/tloen/alpaca-lora-7b,新建对的文件夹 decapoda-researchtloen ,分别将下载好的权重 llama-7b-hfalpaca-lora-7b 保存到其中。

保存的路径可以随意,后面模型配置的时候修改到对应的目录就可以。

3. 创建 conda 环境

创建一个新环境:conda create -n alpaca python=3.8.5

其中 alpaca 可以是 conda 环境的任意名字,python 版本也不一定是 3.8,3.7~3.10 一般都可以,问题不大,不过我用的是 3.8.5 版本。

4. 激活新环境

conda activate alpaca

此处 alpaca 是之前你取的 conda 环境的名字

5. 安装依赖

pip install -r requirements.txt


前面这些无论是什么系统都是一样的。

6. CPU 及 GPU

6.1 CPU 环境

(i) 安装 CPU 版 torch

pip install torch

直接安装 CPU 版本的 pytorch,项目直接用 CPU 运行项目。

(ii) 运行

cd 命令到项目所在的目录。

然后,按 README 中的说明直接运行:

python generate.py --load_8bit --base_model 'decapoda-research/llama-7b-hf' --lora_weights 'tloen/alpaca-lora-7b'

然后把里面的 http 地址复制到浏览器就可以了!页面和 https://huggingface.co/spaces/tloen/alpaca-lora 一样。

6.2 GPU 环境

(i) 安装 cudatoolkit

pip install cudatoolkit==11.6

cudatoolkit 的版本关系后面 pytorch 的安装以及 bitsandbytes 这个库的 Windows 补丁,这个补丁的作者说他是在 cuda 11.6 上编译的,为了安全起见还是选 11.6。如果你安装 11.6 失败,请查询一下电脑的 cuda 版本。安装之前的版本可能也是可以的。

(ii) 安装 GPU 版 torch

pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116

网络很不稳定,可以先去下载 对应的 whl 安装包:https://download.pytorch.org/whl/torch_stable.html

又或者可以加其他源安装。

安装好这三个后,直接运行python generate.py --load_8bit --base_model 'decapoda-research/llama-7b-hf' --lora_weights 'tloen/alpaca-lora-7b',出现错误提示:

AttributeError: 'NoneType' object has no attribute 'device'

上面这个错误提示主要是 bitsandbytes,这个库作者的作者称他只是在 Linux 上进行作业,而没有在 Windows 系统上进行测试。

(iii) 打补丁

感谢后面有大牛提供了补丁解决方案:

  • https://github.com/tloen/alpaca-lora/issues/17
  • https://github.com/oobabooga/text-generation-webui/issues/147

(a) 下载补丁

下载cuda补丁 libbitsandbytes_cuda116.dll,并将其放到新环境 alpaca 对应的文件夹下,比如的路径是 D:\Anaconda3\envs\alpaca_gpu\Lib\site-packages\bitsandbytes

(b) 修改文件

用文本编辑器打开 \bitsandbytes\cuda_setup\main.py,在 main.py 文件中

搜索:(我的在 370 行)

if not torch.cuda.is_available(): return 'libsbitsandbytes_cpu.so', None, None, None, None

替换为:

if torch.cuda.is_available(): return 'libbitsandbytes_cuda116.dll', None, None, None, None

搜索:(有两处,分别在 122125 行)

self.lib = ct.cdll.LoadLibrary(binary_path)

替换为:

self.lib = ct.cdll.LoadLibrary(str(binary_path))

保存,退出。

尝试运行命令:python generate.py --load_8bit --base_model 'decapoda-research/llama-7b-hf' --lora_weights 'tloen/alpaca-lora-7b'

如果没错,可以顺利生成 http 地址,请忽略下面。不过我的电脑错误依旧。

(c) 设置 load_8bit 为 False

重新运行命令:python generate.py --load_8bit False --base_model 'decapoda-research/llama-7b-hf' --lora_weights 'tloen/alpaca-lora-7b'

大功告成!

五、总结

在 CPU 上推理速度非常慢,一度怀疑是死机了。在 3090 上的一次推理速度大概是 30 秒,不算快,不过还能接受。接下来,开启大模型魔改之路!