云服务器复现ChatGLM6B,GPU就是丝滑

2023-06-0213:42:48服务器及运维Comments1,560 views字数 5767阅读模式

分享如何在云服务器复现ChatGLM-6B,用GPU跑真是丝滑啊。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

如果你想在本地复现,可以看往期分享:拥有一个自己的“ChatGPT”,手把手教你部署ChatGLM-6B,CPU也行!GPU更快!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

硬件要求

如果是GPU: 显存需要大于6G。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑
  • ChatGLM-6B 是一个开源的、支持中英双语问答的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。ChatGLM-6B 使用了和 ChatGLM 相同的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。
  • ChatGLM-6B-INT8 是 ChatGLM-6B 量化后的模型权重。具体的,ChatGLM-6B-INT8 对 ChatGLM-6B 中的 28 个 GLM Block 进行了 INT8 量化,没有对 Embedding 和 LM Head 进行量化。量化后的模型理论上 8G 显存(使用 CPU 即内存)即可推理,具有在嵌入式设备(如树莓派)上运行的可能。
  • ChatGLM-6B-INT4 是 ChatGLM-6B 量化后的模型权重。具体的,ChatGLM-6B-INT4 对 ChatGLM-6B 中的 28 个 GLM Block 进行了 INT4 量化,没有对 Embedding 和 LM Head 进行量化。量化后的模型理论上 6G 显存(使用 CPU 即内存)即可推理,具有在嵌入式设备(如树莓派)上运行的可能。

如果是CPU: 内存需要大于32G。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器配置

如果你自己没有显卡,或者电脑运行内存不怎么办?很简单,租一个云电脑就可以了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

目前国内比较热门的GPU租赁平台有:矩池云、AutoDL、智星云等,这里给大家推荐矩池云,用起来比较简单。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

以下步骤需要在电脑上操作,手机屏幕太小不好操作!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

注册账号

扫码快速注册,或者访问官网:https://matpool.com/文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

大家注册的时候可以填写我的邀请码:ZPJpWGPi5izg7Nk,这样我和你都可以获得:118元的优惠券。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

关注他们公众号:矩池云,然后回复:4,绑定微信后就可以获得5元体验金了,可以免费租 2.5小时的 NVIDIA RTX A2000  显卡,测试配置足够了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

上传模型文件

由于 Huggingface 下载不稳定,模型文件我已经下载好,放网盘了下载地址:https://pan.quark.cn/s/3d37e58a3e72文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

大家本地下载好后,上传到云平台网盘。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

  • 方法1: 直接通过云电脑提供的网盘上传 https://matpool.com/user/matbox

“优势:不用租用机器传数据
劣势:只有 5G 免费存储空间文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑
  • 方法2: 租用机器后,通过 scp 上传数据
    比如你租用机器后显示 ssh 链接为:ssh -p 26378 root@matpool.com

本地打开CMD/PowerShell/终端,输入下面指令进行数据传输:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

scp -r -P 26378 本地文件/文件夹路径 root@matpool.com:/home

这样数据会上传到租用机器的 /home 目录下。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

租用机器

在矩池云主机市场:https://matpool.com/host-market/gpu,如果复现 FP16无量化模型,至少需要选择 A4000 显卡;如果复现 INT4或者INT8模型,至少需要选择 A2000 显卡。然后点击租用按钮。(你选其他显卡也行)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

租用页面,搜索 pytorch1.11,选择这个镜像,我就是用这个镜像复现的 ChatGLM-6B,大家如果在这个平台复现就选和我一样的环境。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

选择镜像后在高级选项里添加一个 8000 端口,后面部署 Web 服务用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

机器租用成功后点击 Jupyterlab 点击打开,即可快速打开 Jupyterlab,开始运行代码了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

环境配置+代码运行

在自己电脑配置进行的安装 miniconda安装 Python3.9以及安装Nvidia驱动+Cuda都不用操作,因为云电脑已经帮我们配置好了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

1> Clone项目代码 我已经给大家整理好了,大家直接从网盘下载即可:https://pan.quark.cn/s/3d37e58a3e72文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

当然,你也可以自己 clone 代码,代码我们存到 /home 下。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

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

项目目录结构:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

.
├── Local-testing.ipynb   # 我的本地测试代码
├── PROJECT.md            
├── README.md
├── README_en.md
├── api.py                # 应用层:GLMAPI 版本
├── cli_demo.py           # 应用层:GLMCLI 版本
├── examples
├── limitations
├── ptuning
├── requirements.txt      # 依赖:项目Python依赖
├── resources
├── utils.py
├── web_demo.py           # 应用层:GLMWEB 版本
├── web_demo2.py          # 应用层:GLMWEB2 版本
└── web_demo_old.py       # 应用层:GLMWEB3 版本

2> 安装项目依赖包文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

# 进入项目目录
cd ChatGLM-6B
# 安装依赖
pip install -r requirements.txt 
云服务器复现ChatGLM6B,GPU就是丝滑

3> 下载模型文件文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

在最开始你应该就已经下载好模型,并把相关文件上传到服务器了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

下载地址:https://pan.quark.cn/s/3d37e58a3e72文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

  • 如果你本地是CPU跑,请下载 ChatGLM-6B-INT4 模型,
  • 如果你本地是GPU跑,请下载 ChatGLM-6B 或者 ChatGLM-6B-INT8 模型
云服务器复现ChatGLM6B,GPU就是丝滑

我提供的只是模型文件,真实运行还需要模型的序列化、配置等文件。按以下操作创建:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

mkdir /home/ChatGLM-6B/THUDM
cd /home/ChatGLM-6B/THUDM
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b

这样代码会自动帮我们下载好模型需要的各种小文件。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

接下来,我们只需要下载自己需要的模型并解压,移动到 ChatGLM-6B 目录下。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

注意:我用的 FP16 无量化模型,也就是最好的模型,租用的机器是A4000文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

如果是:INT4或者INT8模型,用A2000应该够,如果有问题可以私聊我交流,文末有联系方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

cd /home/ChatGLM-6B/THUDM
unzip /mnt/example/chatglm-6b.zip

如果提示文件已存在是否替换,直接输入:A,表示全部替换。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

测试运行

在 /home/ChatGLM-6B 下新建一个 notebook,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑
  • 测试运行
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("chatglm-6b-int4", trust_remote_code=True)
# CPU
model = AutoModel.from_pretrained("chatglm-6b-int4", trust_remote_code=True).float()

# GPU
# model = AutoModel.from_pretrained("chatglm-6b-int4", trust_remote_code=True).half().cuda()

model = model.eval()

response, history = model.chat(tokenizer, "你好, 自我介绍下,我可以用你做什么", history=[])
print(response)

首先会检查模型是否正确~文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

简单问个问题,2-3s 可以出答案:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑
response, history = model.chat(tokenizer, "Python写一个Excel表合并脚本", history=[])
print(response)

问代码的话运行稍微慢点~得10-20s左右。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

GPU使用情况:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑
response, history = model.chat(tokenizer, "我现在有个csv数据表, 表头是:用户手机号 上次登录时间 超出空间,需要统计指定日期前登录用户超出空间总和,并打印这些用户手机号;另外还需要统计超出指定容量用户的总超出空间数,并打印这些用户手机号,使用python pandas 实现,假设数据文件为:123.csv", history=[])
print(response)

对于复杂问题,等待时间更长40s左右,回复的代码里参数命名竟然还有中文!!!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑
  • GLMCLI 版本 运行
# 进入项目目录
cd /home/ChatGLM-6B
# 启动脚本
python cli_demo.py

效果如图所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑
  • GLMAPI 版本 运行
# 进入项目目录
cd /home/ChatGLM-6B
# 启动脚本
python api.py
云服务器复现ChatGLM6B,GPU就是丝滑

启动成功后,服务在 8000 端口,你需要发送POST请求。前面租用机器我们自定义了 8000 端口,在租用页面可以获得对应的公网链接:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

比如:https://hz.xxxx.com:xxxx/?token=xxxxx文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

需要注意,实际我们请求不需要 token,所以直接用:https://hz.xxxx.com:xxxx 这段即可。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

curl请求:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

curl -X POST "https://hz.xxxx.com:xxxx" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你好", "history": []}'

Python请求:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

import requests
import json
def getGLM(prompt, history):
    '''
    curl -X POST "https://hz.xxxx.com:xxxx" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你好", "history": []}'
    '''
    url = 'https://hz.xxxx.com:xxxx'
    # 设置请求头
    headers = {
    'Content-Type': 'application/json'
    }
    data = {
    'prompt': prompt,
    'history': history
    }
    # 发送请求并获取响应
    response = requests.post(url, headers=headers, data=json.dumps(data))
    # 检查响应状态码
    if response.status_code == 200:
        # 获取响应数据
        rsp = response.json()
        return rsp
    else:
        print('请求失败,状态码:', response.status_code)
        
# 测试请求
history=[]
prompt = "假设你是一位Python高手,请用Python Pandas 模块实现一个Excel文件批量合并脚本"
getGLM(prompt, history)

和服务器上直接请求速度差不多,30s左右。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑
  • GLMWEB3 版本 运行
# 进入项目目录
cd /home/ChatGLM-6B
# 安装依赖
pip install streamlit streamlit_chat
# 启动脚本
streamlit run web_demo2.py --server.port 8000 --server.address 0.0.0.0
云服务器复现ChatGLM6B,GPU就是丝滑

运行后服务会启动到 8000端口,host 设置成0.0.0.0,这样我们访问租用页面 8000 端口链接即可访问到对应服务了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

前面租用机器我们自定义了 8000 端口,在租用页面可以获得对应的公网链接:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

比如:https://hz.xxxx.com:xxxx/?token=xxxxx文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

需要注意,实际我们请求不需要 token,所以直接用:https://hz.xxxx.com:xxxx 这段即可。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

这个第一次运行可能比较慢,它是提问的时候才开始加载检查模型。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

说实话,这个问题的回答有点出乎意料,给了一个用 pygame 写的猜数游戏,一般都会回复那种 cmd版本。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

我是老表,本文完,欢迎加我微信聊更多AIGC问题和开发需求~ 点赞多,下一期分享如何用自己聊天数据训练一个自己的GPT克隆人。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

云服务器复现ChatGLM6B,GPU就是丝滑

Prompt words:A colorful cat looks at a distant technology building and ponders, in the style of a programmer geek and a comical nonsense文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

题图@Adobe Firefly文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/44068.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/yunwei/44068.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定