Code前端首页关于Code前端联系我们

ChatGLM6B在云服务器上玩,GPU如丝般流畅,

terry 2年前 (2023-09-28) 阅读数 64 #未命名

分享如何在云服务器上玩ChatGLM-6B。使用 GPU 进行驾驶如丝般流畅。

如果你想在本地玩,可以阅读之前的分享:获取属于你自己的“ChatGPT”,学习如何在有CPU的情况下使用ChatGLM-6B! GPU 更快!

ChatGLM-6B是一个开源的聊天语言模型,支持中英文双语。它基于通用语言模型(GLM)架构,拥有 62 亿个参数。结合模型量化技术,用户可以在消费级显卡上本地启用(INT4量化级别至少需要6GB显存)。 ChatGLM-6B采用与ChatGPT类似的技术,针对中文问答和对话进行了优化。经过约1T标签的中英文双语训练,辅以有监督微调、反馈自助、人类反馈强化学习等技术,拥有62亿个参数的ChatGLM-6B已经能够生成与人类相当一致的响应优先。

硬件要求

如果是GPU:显存必须大于6G。 云服务器复现ChatGLM6B,GPU就是丝滑

  • ChatGLM-6B是一个开源的聊天语言模型,支持中英文双语回复。它基于通用语言模型(GLM)架构,拥有 62 亿个参数。结合模型量化技术,用户可以在消费级显卡上本地启用(INT4量化级别至少需要6GB显存)。 ChatGLM-6B采用与ChatGLM相同的技术,并针对中文问答和对话进行了优化。经过约1T标签的中英文双语训练,辅以有监督微调、反馈自助、人类反馈强化学习等技术,拥有62亿个参数的ChatGLM-6B已经能够生成与人类相当一致的响应优先。
  • ChatGLM-6B-INT8 是 ChatGLM-6B 的量化模型权重。具体来说,ChatGLM-6B-INT8对ChatGLM-6B的28个GLM块进行INT8量化,但不对嵌入和LM头进行量化。量化模型理论上可以用 8 GB 显存(使用 CPU 作为内存)进行推断,并且可以在嵌入式设备(例如 Raspberry Pi)中使用。
  • ChatGLM-6B-INT4 是 ChatGLM-6B 的量化模型权重。具体来说,ChatGLM-6B-INT4对ChatGLM-6B的28个GLM块执行INT4量化,但不对嵌入和LM头进行量化。量化模型理论上可以用 6 GB 显存(使用 CPU 作为内存)进行推断,并且可以在嵌入式设备(例如 Raspberry Pi)中使用。

如果是CPU:内存必须大于32GB。

云服务器配置

如果你没有显卡或者电脑没有运行内存怎么办?很简单,租一台云电脑就可以了。

目前国内最流行的GPU租赁平台有:巨驰云、AutoDL、智行云等,我们推荐巨驰云,比较好用。

以下步骤必须在计算机上执行。手机屏幕太小,无法使用!

注册账号

扫码快速注册或访问官网:https://matpool.com/云服务器复现ChatGLM6B,GPU就是丝滑

注册时可以填写我的邀请码:ZPJpWGPi5izg7Nk,这样你我就可以获得:118元优惠券。

关注他们公众号:玖赤云并回复:4.链接微信后,即可获得5元试用奖金,并可免费租用RTX2显卡NVIDIA00002。测试组装的时间。足够的。

下载模板文件

由于Huggingface的下载不稳定,所以我已经下载了模板文件并将其放在网络驱动器上。下载地址:https://pan.quark.cn/s/3d37e58a3e72云服务器复现ChatGLM6B,GPU就是丝滑

大家下载到本地后,请上传到云平台网盘。

  • 方法一:直接通过云电脑提供的网盘下载 https://matpool.com/user/matbox

《优点:无需租机器进行数据传输
缺点:只有5G免费》 storage

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

  • 方法二:租机后,通过 scp 下载数据
    例如租机后,ssh 链接为:ssh -p 26378 root@matpool.com

打开本地CMD/PowerShell/终端,输入以下命令传输数据:

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

这样数据就上传到租赁机的/home目录下。

在Matpool的云托管市场租机器

:https://matpool.com/host-market/gpu,如果玩非量化的FP16型号,至少要选择A4000显卡;如果您玩的是 INT4 或 INT8 型号,则至少需要选择 A2000 显卡。然后单击“租赁”按钮。 (也可以选择其他显卡) 云服务器复现ChatGLM6B,GPU就是丝滑

在租赁页面搜索pytorch1.11,选择此镜像。我使用此图像来重现 ChatGLM-6B。如果你在这个平台上复制的话,请选择和我一样的环境。 云服务器复现ChatGLM6B,GPU就是丝滑

选择镜像后,将8000端口添加到高级设置中,以便后续部署网络服务。 云服务器复现ChatGLM6B,GPU就是丝滑

租机成功后,点击Jupyterlab,点击打开即可快速打开Jupyterlab并运行代码。 云服务器复现ChatGLM6B,GPU就是丝滑

环境设置+代码运行

在自己的电脑配置中安装miniconda驱动+安装❙❙❀Cuda不需要操作因为云电脑已经为我们配置的。

1> 我已经为你弄清楚了 Clone 项目代码。您可以直接从网盘下载:https://pan.quark.cn/s/3d37e58a3e72

当然您也可以自己克隆代码,我们将代码保存在/home文件夹中。

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

项目目录结构:

.
├── 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> 安装项目依赖包

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

3> 下载模板文件

首先您应该已经下载了模板并将必要的文件上传到服务器。

下载地址:https://pan.quark.cn/s/3d37e58a3e72

  • 如果您使用CPU,请下载ChatGLM-6B-INT4型号,
  • 如果您使用GPU,请下载ChatGLM-6B或ChatGLM- 6B-INT8 模型
云服务器复现ChatGLM6B,GPU就是丝滑

我只提供模型文件。真正的运行还需要模型序列化、配置等文件。创建如下:

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

代码帮助我们自动下载模型所需的各种小文件。 云服务器复现ChatGLM6B,GPU就是丝滑

接下来我们只需要下载我们需要的模板,将其解压并移动到ChatGLM-6B目录即可。

注:我使用的是FP16非量化模型,这是最好的模型。租赁的机器是A4000

如果是:INT4或者INT8型号,A2000应该就够了。如果有什么问题可以私聊我。联系方式在文章末尾。

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

如果询问是否覆盖已存在的文件,直接输入:A 覆盖全部。 云服务器复现ChatGLM6B,GPU就是丝滑

测试运行

/home/ChatGLM-6B创建一个新笔记本。 云服务器复现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)

先检查型号是否正确~云服务器复现ChatGLM6B,GPU就是丝滑

问一个简单的问题,2-3秒就能给出答案:云服务器复现ChatGLM6B,GPU就是丝滑

response, history = model.chat(tokenizer, "Python写一个Excel表合并脚本", history=[])
print(response)

如果问代码的话,运行速度会慢一点~10左右-20秒。 云服务器复现ChatGLM6B,GPU就是丝滑

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

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

对于复杂的问题,等待时间要长40秒左右,而且响应码的参数名称甚至有汉字! ! ! 云服务器复现ChatGLM6B,GPU就是丝滑

  • GLMCLI版本运行
# 进入项目目录
cd /home/ChatGLM-6B
# 启动脚本
python cli_demo.py

的效果如图: 云服务器复现ChatGLM6B,GPU就是丝滑

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

成功启动后,服务在8000端口,需要发送POST请求。我们之前租的时候定制了8000端口的机器。您可以在租赁页面找到相应的公共网络链接: 云服务器复现ChatGLM6B,GPU就是丝滑

例如:https://hz.xxxx.com:xxxx/?token=xxxxx

请注意,该请求不需要令牌,因此只需使用:https://hz.xxxx.com:xxxx。

Curl 请求:

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

Python 请求:

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。 云服务器复现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端口启动,主机设置为0.0.0.0,这样我们就可以从租赁页面的8000端口链接访问对应的服务。

我们之前租的时候定制了8000口的机器。您可以在租赁页面找到对应的公共网络链接: 云服务器复现ChatGLM6B,GPU就是丝滑

例如:https://hz.xxxx.com:xxxx/?token=xxxxx

注意,实际上我们的请求不需要token,所以只需使用:https://hz.xxxx.com:xxxx。 云服务器复现ChatGLM6B,GPU就是丝滑

第一次可能会很慢。它仅在询问时才开始下载检查模板。

说实话,这个问题的答案有点出乎意料。我得到了一个用 pygame 编写的猜谜游戏,通常会回答 cmd 版本。 云服务器复现ChatGLM6B,GPU就是丝滑

我是老手了,这篇文章结束了,欢迎加我微信讨论更多AIGC问题和开发需求~比如,下一期我会告诉你如何利用自己的聊天数据来训练自己GPT 克隆。云服务器复现ChatGLM6B,GPU就是丝滑

鼓励的话:一只彩色猫看着远处的科技大楼,以程序员极客的风格思考和滑稽的废话

头图@Adobe Firefly

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门