前言

最近一直在炼丹(搞AIGC这块),突然发现业务代码都索然寡味了…

上次发了篇AI画图的文章,ChatGPT尽管无法自己布置,但现在开源的LLM仍是不少的,只需有一块差不多的显卡,要搞个LLM本地布置仍是没问题的。

本文将介绍这以下两个国产开源LLM的本地布置

  • ChatGLM-6B
  • MOSS

本文先简略的把模型跑起来,后续将持续我近期在LLM方向的一些探索记录~

概念

开始之前,先来看看一些根底概念。

AIGC

引用以下 mbalib 的内容

**AIGC(AI Generated Content)**即人工智能生成内容,又称“生成式AI”(Generative AI),被认为是继专业出产内容(PGC)、用户出产内容(UGC)之后的新型内容创作办法。

互联网内容出产办法经历了PGC——UGC——AIGC的过程。PGC(Professionally Generated Content)是专业出产内容,如Web1.0和广电职业中专业人员出产的文字和视频,其特点是专业、内容质量有保证。UGC(User Generated Content)是用户出产内容,伴随Web2.0概念而产生,特点是用户能够自由上传内容,内容丰富。**AIGC(AI Generated Content)**是由AI生成的内容,其特点是主动化出产、高效。跟着自然言语生成技能NLG和AI模型的成熟,AIGC逐步受到大家的重视,目前现已能够主动生成文字、图片、音频、视频,甚至3D模型和代码。

最近许多的ChatGPT、AI画图,就都属于这个范畴。

LLM

引用以下 wikipedia 的内容

A large language model (LLM) is a language model consisting of a neural network with many parameters (typically billions of weights or more), trained on large quantities of unlabeled text using self-supervised learning or semi-supervised learning. LLMs emerged around 2018 and perform well at a wide variety of tasks. This has shifted the focus of natural language processing research away from the previous paradigm of training specialized supervised models for specific tasks.

中文也便是「大言语模型」,现在很火的ChatGPT便是这个LLM的代表,大模型有一个关键的特点:参数量,参数量的巨细决议了大模型的能力(不能说是肯定的,但肯定是正相关)。

以下是常见LLM的参数量:

LLM称号 参数量
ChatGPT 3.5 175B
ChatGLM 6B
MOSS 16B
LLaMA 7B/13B/33B/65B

篇幅关系只罗列这几个,更多的能够看文后的参阅资料。

搭建环境

硬件

首要要有一台搭载了NVIDIA显卡的Linux系统服务器/电脑。

显存需求到达8G及以上,不然跑不动~

系统引荐运用最新的Ubuntu(22.04)或许其衍生版,以下是我在测验过程中运用的两台服务器装备。

服务器1

  • CPU: Intel(R) Core(TM) i9-10940X CPU @ 3.30GHz
  • 内存:64G
  • 显卡:NVIDIA GeForce RTX 2080 Ti

服务器2

  • CPU:Intel(R) Xeon(R) Gold 5318Y CPU @ 2.10GHz x2
  • 内存:128G
  • 显卡: Tesla T4 x4

软件

说完了硬件,再看看软件。

驱动

首要,需求显卡驱动,Ubuntu系的发行版装置显卡驱动比喝水还简略,这便是为啥引荐炼丹用Ubuntu的理由。

PS:完全能够一键完结,不需求再去网上查什么仿制了几百遍的博客然后下载一堆东西又是编译又是卸载nouveau啥的了~

Ubuntu桌面版能够直接用「软件更新」App一键装置显卡驱动。

Ubuntu服务器版别,运用 nvidia-detector 指令检测需求装置的驱动版别,示例:

$ nvidia-detector
nvidia-driver-530

运用 ubuntu-drivers list 获取可装置的驱动列表,示例:

$ ubuntu-drivers list
nvidia-driver-418-server, (kernel modules provided by nvidia-dkms-418-server)
nvidia-driver-530, (kernel modules provided by linux-modules-nvidia-530-generic-hwe-22.04)
nvidia-driver-450-server, (kernel modules provided by linux-modules-nvidia-450-server-generic-hwe-22.04)
nvidia-driver-515, (kernel modules provided by linux-modules-nvidia-515-generic-hwe-22.04)
nvidia-driver-470-server, (kernel modules provided by linux-modules-nvidia-470-server-generic-hwe-22.04)
nvidia-driver-525-server, (kernel modules provided by linux-modules-nvidia-525-server-generic-hwe-22.04)
nvidia-driver-515-server, (kernel modules provided by linux-modules-nvidia-515-server-generic-hwe-22.04)
nvidia-driver-510, (kernel modules provided by linux-modules-nvidia-510-generic-hwe-22.04)
nvidia-driver-525, (kernel modules provided by linux-modules-nvidia-525-generic-hwe-22.04)
nvidia-driver-470, (kernel modules provided by linux-modules-nvidia-470-generic-hwe-22.04)

然后运用 ubuntu-drivers install nvidia-driver-530 来装置驱动,示例:

$ ubuntu-drivers install nvidia-driver-530
All the available drivers are already installed.

就这么简略

PS:当然非要自己去NVIDIA官网下载也能够,具体能够看看参阅资料。

Python

搞AI,Python是必备的,但咱们不直接运用系统的Python环境,而是运用conda来办理。

引荐运用 miniconda3 比 anaconda 轻量。

依照官网阐明依照 miniconda3 之后,只需求运用以下指令即可创建指定版别的python环境

conda create -n 环境称号 python=3.10

假如遇到网络环境问题,能够参阅我之前这篇文章,装备一下国内镜像:装备pip国内镜像加快python第三方库装置速度~

ChatGLM-6B

介绍

这是清华和智谱公司搞的开源LLM,截止本文撰写时,其在国产开源LLM里面算是天花板的存在了~

ChatGLM-6B 是一个开源的、支撑中英双语的对话言语模型,根据 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技能,用户能够在消费级的显卡上进行本地布置(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 运用了和 ChatGPT 相似的技能,针对中文问答和对话进行了优化。通过约 1T 标识符的中英双语练习,辅以监督微调、反应自助、人类反应强化学习等技能的加持,62 亿参数的 ChatGLM-6B 现已能生成相当契合人类偏好的答复。

硬件需求

量化等级 最低 GPU 显存(推理) 最低 GPU 显存(高效参数微调)
FP16(无量化) 13 GB 14 GB
INT8 8 GB 9 GB
INT4 6 GB 7 GB

本地布置

下载项目代码

git clone https://github.com/THUDM/ChatGLM-6B.git

PS:也能够运用我 fork 魔改的版别,首要做了以下修正:

  • 布置和模型微调默许开启多卡加快
  • 重写API接口,更直观

换成以下指令即可

git clone https://github.com/Deali-Axy/ChatGLM-6B.git

创建虚拟环境

主张运用 conda 办理

conda create -n chatglm python==3.8

装置依靠

cd ChatGLM-6B
conda activate chatglm
pip install -r requirements.txt
conda install cudatoolkit=11.7 -c nvidia

PS:没有装置 cudatoolkit 的话,会报 RuntimeError: Library cudart is not initialized 错误

但 issues 里也有人说能够通过运用CPU输出量化模型后直接调用的办法处理,暂未尝试。

issues 地址: github.com/THUDM/ChatG…

下载模型和发动

项目代码里有指令行和web界面两种demo,任意选一个运转,程序会主动从 huggingface 下载预练习模型。

PS: huggingface 的模型理论上是能够直接下载的,假如遇到网络问题,请自行运用代理或许从官方供给的某云盘下载模型。

# 指令行 demo
python cli_demo.py
# 运用 Gradio 完成的简略Web界面
python web_demo.py

Gradio 的默许端口是7860,能够通过在 launch() 办法里传入 server_port 参数自定义端口。

运用量化模型

假如显存没有13G以上,则无法运转FP16精度模型,只能运转量化后的模型,需求修正一下代码。

翻开上述的 cli_demo.pyweb_demo.py 代码

找到以下加载模型的代码,修正一下参数

model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()

将上面的代码修正为下面这样以运用量化模型

# 按需修正,目前只支撑 4/8 bit 量化
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(4).half().cuda()

运转效果

LLM探索:环境搭建与模型本地部署

多卡加快

假如显卡多,能够运用多卡运转以加快推理。

依然是翻开上述的 cli_demo.pyweb_demo.py 代码。

找到以下加载模型的代码

model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()

修正为

from utils import load_model_on_gpus
model = load_model_on_gpus("THUDM/chatglm-6b", num_gpus=4)

num_gpus 参数为要运用的显卡数量

我看了 load_model_on_gpus 这个办法的代码,它是通过 auto_configure_device_map 办法把 transformer分成30层,然后再分配到指定数量的显卡上,无法像 CUDA_VISIBLE_DEVICES 环境变量相同通过显卡编号来指定,只能按次序来分配。

假如机器上同时要运转其他模型,能够考虑先运转这个ChatGLM,再运转其他的,或许重写 auto_configure_device_map 办法,让其能够灵活指定显卡。

授权

模型不能够直接商用,据说商用需求购买一年180w的许可证。

MOSS

介绍

这个是复旦开源的大模型,运用下来和ChatGLM最大的区别是推理速度特别慢

MOSS是一个支撑中英双语和多种插件的开源对话言语模型,moss-moon系列模型具有160亿参数,在FP16精度下可在单张A100/A800或两张3090显卡运转,在INT4/8精度下可在单张3090显卡运转。MOSS基座言语模型在约七千亿中英文以及代码单词上预练习得到,后续通过对话指令微调、插件增强学习和人类偏好练习具有多轮对话能力及运用多种插件的能力。

硬件需求

量化等级 加载模型 完结一轮对话(估计值) 到达最大对话长度2048
FP16 31GB 42GB 81GB
Int8 16GB 24GB 46GB
Int4 7.8GB 12GB 26GB

本地布置

下载代码

git clone https://github.com/OpenLMLab/MOSS.git

创建虚拟环境

主张运用 conda 办理

conda create -n moss python==3.8

装置依靠

cd MOSS
conda activate moss
pip install -r requirements.txt
conda install cudatoolkit=11.7 -c nvidia

下载模型和发动

项目代码里有指令行和web界面两种demo,任意选一个运转,程序会主动从 huggingface 下载预练习模型。

# 指令行 demo
python moss_cli_demo.py
# 运用 Gradio 完成的简略Web界面
python moss_web_demo_gradio.py

修正默许模型和多卡加快

因为MOSS对显存的要求比较高,因而默许用的是4位量化的模型,这里我运用一台4块T4的服务器来布置,所以直接运用FP16模型。

修正 moss_web_demo_gradio.py,找到以下代码

parser.add_argument("--model_name", default="fnlp/moss-moon-003-sft-int4",
                    ...)

default 参数改为 fnlp/moss-moon-003-sft

然后再设置一下多卡加快,把GPU参数设置为四个显卡的编号

parser.add_argument("--gpu", default="0,1,2,3", type=str)

然后发动,就能够看到四张显卡都吃满了

LLM探索:环境搭建与模型本地部署

运用下来最大的感受便是慢,往往要一两分钟才干生成一个答复。

我看了下GitHub issues,有许多人也提出了同样的问题。两张A100还需求10s起步,100s左右的生成时间,看来短时间内是无解了,只能等官方优化了~

详见:

  • github.com/OpenLMLab/M…

授权

模型采用 GNU AFFERO GENERAL PUBLIC LICENSE 许可证,能够免费商用。

参阅资料

  • wiki.mbalib.com/wiki/AIGC
  • en.wikipedia.org/wiki/Large_…
  • gitee.com/oschina/awe…
  • github.com/Hannibal046…
  • 装置 NVIDIA 显卡驱动 – www.zhihu.com/tardis/zm/a…