前言

最近chatgpt比较火,正好看到国内有个类似开源的结构,那不得试试、

ChatGLM-6B (介绍相关概念、基础环境搭建及部署)


一、ChatGLM-6B是什么?

ChatGLM-6B是清华大学知识工程和数据发掘小组(Knowledge Engineering Group (KEG) & Data Mining at Tsinghua University)发布的一个开源的对话机器人。依据官方介绍,这是一个千亿参数规划的中英文言语模型。并且对中文做了优化。本次开源的版别是其60亿参数的小规划版别,约60亿参数,本地布置仅需求6GB显存


二、装置虚拟的python环境

ChatGLM-6B 代码中有一些python3.7支持的语法,所以要有python3.7+ 的环境。咱们运用conda来办理python环境 conda分为anaconda和miniconda。anaconda是包含一些常用包的版别,miniconda则是精简版.本文中咱们将运用anaconda

1.下载

能够在官网中找到自己需求的版别进行下载,假如你体系也是ubutu 64位的,也能够运用我下载的版别进行装置

2.装置

在上一步下载的装置包同级,运用指令行履行以下指令

# 此处需写实践下载称号
bash Anaconda3-2023.03-Linux-x86_64.sh

ChatGLM-6B (介绍相关概念、基础环境搭建及部署)

然后依据提示操作即可

ChatGLM-6B (介绍相关概念、基础环境搭建及部署)
ChatGLM-6B (介绍相关概念、基础环境搭建及部署)

3.设置国内源(风险)

能够参阅此文章。当然,假如不换源能够顺畅装一切的包的话,尽量不要履行此操作。我就由于换了源,导致后边出了许多小问题。

4.虚拟环境运用简介

# 创立虚拟环境
conda create -n xxx python=3.8
# 进入虚拟环境
conda activate xxx
# 退出当前虚拟环境
conda deactivate
# 检查本地虚拟环境
conda info --env
# 删除虚拟环境
conda remove -n xxx --all

三、布置ChatGLM-6B

1. clone代码

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

2. 运转

1.创立虚拟环境

# 新建chatglm环境
conda create -n chatglm python=3.8
# 激活chatglm环境
conda activate chatglm

2.装包

2.1 找到适宜的pytorch版别

咱们能够经过以下指令检查自己的cuda及cuda驱动版别

nvidia-smi

ChatGLM-6B (介绍相关概念、基础环境搭建及部署)
咱们能够看到,cuda版别是11.5,驱动版别是493.44,然后咱们去官网寻觅适宜的pytorch装包指令,官网链接如下: pytorch.org/get-started… pytorch.org/get-started… 假如找不到对应版别的话,能够参阅此链接,经过驱动找到适宜的cuda toolkit版别,然后再去官网寻觅适宜的装包指令 注:驱动是向下兼容的,其决定了可装置的CUDA Toolkit的最高版别。

2.1 装置依赖

# 依据上一步找到的装置指令进行装置:
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
# 装置gradio用于发动图形化web界面
pip install gradio
# 装置运转依赖
pip install -r requirement.txt

2.2 验证pytorch是否为GPU版别

import torch
torch.cuda.is_available()  ## 输出应该是True

3.运转

在运转前,咱们需求修正一些文件内容

# web_demo.py
# 1. 新增mirror='https://mirrors.tuna.tsinghua.edu.cn/hugging-face-models,下载模型运用清华源
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True, mirror='https://mirrors.tuna.tsinghua.edu.cn/hugging-face-models')
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True, mirror='https://mirrors.tuna.tsinghua.edu.cn/hugging-face-models').half().cuda()
# 2. 增加server_name和server_port参数
demo.queue().launch(share=True,server_name="0.0.0.0",server_port=9234)

四、布置过程中遇到的问题

1. 问题1

报错如下:

ERROR: Could not find a version that satisfies the requirement protobuf<3.20.1,>=3.19.5 (from versions: none)
ERROR: No matching distribution found for protobuf<3.20.1,>=3.19.5

ChatGLM-6B (介绍相关概念、基础环境搭建及部署)
原因及解决方案: 是由于上一步换了国内的镜像源,所以只需求指定装包途径即可l sls

pip install -r requirements.txt -i https://pypi.Python.org/simple/

2.问题2

报错如下:

ImportError: Using SOCKS proxy, but the 'socksio' package is not installed. Make sure to install httpx using `pip install httpx[socks]`.

ChatGLM-6B (介绍相关概念、基础环境搭建及部署)
原因及解决方案: 是由于我在指令行设置了“科学上网”,关掉即可

# 由于我设置的是临时的,所以在指令行输入如下代码即可
unset http_proxy
unset https_proxy

3.问题3

报错如下:

RuntimeError: CUDA out of memory. Tried to allocate 128.00 MiB (GPU 0; 7.93 GiB total capacity; 7.40 GiB already allocated; 53.19 MiB free; 7.40 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

原因及解决方案: 默认情况下,模型以 FP16 精度加载,运转上述代码需求大概 13GB 显存。假如你的 GPU 显存有限,能够尝试以量化方式加载模型,运用方法如下:

# int4精度加载,需求6G显存
# web_demo.py
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().quantize(4).cuda()

4.问题4

报错如下:

RuntimeError: Library cudart is not initialized

ChatGLM-6B (介绍相关概念、基础环境搭建及部署)

原因及解决方案: 我是用conda办理的环境,此时应该是cudatoolkit有问题,参阅此issue

# 运用conda装置cudatoolkit
conda install cudatoolkit=11.3 -c nvidia

总结

例如:整个布置其实最难的应该仍是环境了,虽然项目的README写的比较简单,但是实在建立起来确实各种问题,希望此文章能给我们一些协助吧。

参阅文章

清华大学开源中文版ChatGPT模型——ChatGLM-6B发布

PyTorch、CUDA Toolkit 及显卡驱动版别对应联系

验证pytorch是否为GPU版别