如何在矩池云复现开源对话语言模型 ChatGLM

news2024/11/6 7:20:16

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

今天给大家分享如何在矩池云服务器复现 ChatGLM-6B,用 GPU 跑模型真是丝滑啊。

硬件要求

如果是GPU: 显存需要大于6G。

  • 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。

云服务器配置

如果你自己没有显卡,或者电脑运行内存不怎么办?很简单,租一个云电脑就可以了,今天将教大家如何在矩池云上复现 ChatGLM。

以下步骤需要在电脑上操作,手机屏幕太小不好操作!

注册账号

直接在矩池云官网进行注册,注册完成后可以关注矩池云公众号可以获得体验金,可租用机器进行测试配置。

上传模型文件

由于 Huggingface 下载不稳定,建议大家本地先下载好相关模型文件。

  • FP16 无量化模型下载地址:https://huggingface.co/THUDM/chatglm-6b
  • INT8 模型下载地址:https://huggingface.co/THUDM/chatglm-6b-int8
  • INT 4模型下载地址:https://huggingface.co/THUDM/chatglm-6b-int4

本地下载方法:

  • 安装 git
  • 安装 git lfs: 直接官网下载安装包安装即可 https://git-lfs.com/
  • 使用 git lfs 下载
# 初始化
git lfs install
# 下载
git clone https://huggingface.co/THUDM/chatglm-6b-int4

大家本地下载好后,上传到云平台网盘(可离线上传不花钱)。

  • 方法1: 直接通过矩池云网盘上传 https://matpool.com/user/matbox

不用租用机器传数据
上传后如果空间不够,需要进行扩容。

  • 方法2: 租用机器后,通过 scp 上传数据

需要花钱开机传数据,每次租用都得上传,不方便。

比如你租用机器后显示 ssh 链接为:ssh -p 26378 root@matpool.com

本地打开CMD/PowerShell/终端,输入下面指令进行数据传输:

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

这样数据会上传到租用机器的 /home 目录下。

租用机器

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

租用页面,搜索 pytorch1.11,选择这个镜像,我就是用这个镜像复现的 ChatGLM-6B。

选择镜像后在高级选项里添加一个 8000 端口,后面部署 Web 服务用。

机器租用成功后点击 Jupyterlab 点击打开,即可快速打开 Jupyterlab,开始运行代码了。

环境配置+代码运行

在自己电脑配置进行的安装 miniconda安装 Python3.9以及安装Nvidia驱动+Cuda都不用操作,因为矩池云已经帮我们配置好了。

1> Clone项目代码

你也可以自己 clone 代码,代码我们存到 /home 下。

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

项目目录结构:

.
├── 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 

3> 下载模型文件

在最开始你应该就已经下载好模型,并把相关文件上传到服务器了。

将网盘模型文件夹复制到项目文件夹下,按以下操作创建:

mkdir /home/ChatGLM-6B/THUDM
cd /home/ChatGLM-6B/THUDM
# 将网盘下的 chatglm-6b-int4 模型文件夹复制到当前目录(/home/ChatGLM-6B/THUDM)
cp -r /mnt/chatglm-6b-int4 ./

测试运行

/home/ChatGLM-6B 下新建一个 notebook,

  • 测试运行
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True)
# CPU
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).float()

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

model = model.eval()

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

首先会检查模型是否正确~

简单问个问题,2-3s 可以出答案:

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

问代码的话运行稍微慢点~得10-20s左右。

GPU使用情况:

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

对于复杂问题,等待时间更长40s左右,回复的代码里参数命名竟然还有中文!!!

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

效果如图所示:

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

启动成功后,服务在 8000 端口,你需要发送POST请求。前面租用机器我们自定义了 8000 端口,在租用页面可以获得对应的公网链接:

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

需要注意,实际我们请求不需要 token,所以直接用: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左右。

  • GLMWEB3 版本 运行
# 进入项目目录
cd /home/ChatGLM-6B
# 安装依赖
pip install streamlit streamlit_chat
# 启动脚本
streamlit run web_demo2.py --server.port 8000 --server.address 0.0.0.0

运行后服务会启动到 8000端口,host 设置成0.0.0.0,这样我们访问租用页面 8000 端口链接即可访问到对应服务了。

前面租用机器我们自定义了 8000 端口,在租用页面可以获得对应的公网链接:

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

需要注意,实际我们请求不需要 token,所以直接用:https://hz.xxxx.com:xxxx 这段即可。

这个第一次运行可能比较慢,它是提问的时候才开始加载检查模型。

说实话,这个问题的回答有点出乎意料,给了一个用 pygame 写的猜数游戏,一般都会回复那种 cmd 版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/686943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ART-Pi BT_WiFi 模块固件下载

源文件《UM5003-RT-Thread ART-Pi BT_WIFI 模块固件下载手册.md》 ART-Pi BT_WiFi 模块固件下载 ART-Pi 板卡在出厂时已经烧录过 BT_WiFi 固件,存储在外部 Flash。如果固件被不慎擦除,会导致 BT_WiFi 模组的功能无法正常使用,出现异常情况&…

【图像处理OpenCV(C++版)】——5.2 图像平滑之高斯平滑

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快…

RabbitMQ常见的应用问题

文章目录 1.消息可靠性保障2.消息的幂等性保障 1.消息可靠性保障 在实际生产环境中,可能会由于网络问题导致消息接收异常产生某种影响,基于这种情况我们需要保障消息的可靠性。 RabbitMQ中的消息可靠性也称为消息补偿,如下图所示&#xff0…

浅析 Jetty 中的线程优化思路

作者:vivo 互联网服务器团队- Wang Ke 本文介绍了 Jetty 中 ManagedSelector 和 ExecutionStrategy 的设计实现,通过与原生 select 调用的对比揭示了 Jetty 的线程优化思路。Jetty 设计了一个自适应的线程执行策略(EatWhatYouKill&#xff09…

Origin如何绘制带拟合曲线的频数分布图?

文章目录 0.引言1.准备数据2.频数分布参数设置并绘图3.拟合曲线参数设置并绘图 0.引言 笔者研究的方向关于点云数据采集和建模算法,在对一个平面进行数据采集并建模后,需要实验结果进行精度分析,为了知道建模结果的点云集中于平面的程度&…

专场来袭,深度解读阿里云视频云的全智能进化

云智深度融合,视频云将幻化出怎样的新光景? 01 「云智新生」_ 视频云的全智能进化 新数智时代,云和AI在走向深度融合,以云计算为基石、以AI为引擎的云智深度融合,俨然成为行业共识。以“云智”为支撑,视频云…

基于JavaWeb的土特产销售购物商城的设计与实现

1.引言 随着互联网技术的不断发展,电子商务已成为一种重要的经济活动形式。土特产作为传统文化的代表之一,在旅游业中具有非常重要的地位。因此,将土特产销售与电子商务相结合,建立一个基于JavaWeb的土特产销售购物商城&#xff…

java进阶—代码演示多线程的生命周期

前言 回顾一下 到现在,我们已经知道了 线程的三种创建方式及其选择线程的常用方法线程的安全问题以及线程的死锁线程之间的通信(等待唤醒) 今天,我们一起来看看线程的生命周期,生命周期这个词在后续的javaweb 相关知…

【论文系列解读】LLM构建通用视觉(SUR-Adapter)声音模型(Tango)

通用视觉&音频模型的思考 0. 视觉(Diff)怎么和多模态结合(0) 总结(1) 关键技术(1-1) LangChain(1-2) **Versatile Diffusion**(1-3) Tango(1-4) SUR-adapter 1. SUR-Adapter(0) 总结(1) 摘要(2) 相关工作(2-1) 文图生成 & LLM(2-2) 语义理解和推理数据集(2-2-1) 数据收…

【案例教程】环境多介质逸度模型实践技术与典型案例【代码】应用

【原文链接】:【案例教程】环境多介质逸度模型实践技术与典型案例【代码】应用https://mp.weixin.qq.com/s/i8BpApcz1p4Ua6bytxhGwA 内容简要:【注:提供以下模型所有教程】 专题一:基本理论 1.逸度的定义 2.逸度模型的基本原理…

蓝牙音箱中应用的国产蓝牙芯片

蓝牙音箱指的是内置蓝牙芯片,以蓝牙连接取代传统线材连接的音响设备,通过与手机平板电脑和笔记本等蓝牙播放设备连接,达到方便快捷的目的。蓝牙音箱以便携音箱为主,外形一般较为小巧便携,蓝牙音箱技术也凭借其方便人的…

AI绘画中的负面词 是如何正确使用以及发挥作用

Stable Diffusion的艺术或图像生成,有些参数是必不可少的,其中之一就是负提示。本次将深入解析稳定扩散中的负提示是什么,如何使用这个参数来生成高质量的图像。 文章目录 negative prompt如何正确使用?正面词控制通过负面词控制 …

IP地址、MAC地址、互联网、WLAN、运营商、子网掩码、网络地址、网段、网关、集线器、光纤、基站

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

从2PC和容错共识算法讨论zookeeper中的Create请求 | 京东云技术团队

最近在读《数据密集型应用系统设计》,其中谈到了zookeeper对容错共识算法的应用。这让我想到之前参考的zookeeper学习资料中,误将容错共识算法写成了2PC(两阶段提交协议),所以准备以此文对共识算法和2PC做梳理和区分&a…

近日网上传出消息,ARM正与Intel共同开发制造芯片

近日网上传出消息,ARM正与Intel共同开发制造芯片,让芯片设计者能够基于Intel 18A制程打造低功耗的SoC。另有多位业内人士透露,这次制造的芯片将主要用于移动设备、笔记本电脑、数据中心等。 若这一消息属实,会对中国芯片行业带来…

常见的SQL优化方案

1. insert优化 1.1 批量插入 我们之前插入数据都是一条一条插入的,会导致频繁操作数据库,从而影响性能。比如遍历某个集合,然后逐个使用insert语句插入数据库表中 INSERT INTO table (name, age) VALUES (张三, 18); INSERT INTO table (na…

6-js基础-3

JavaScript 基础 - 3 知道什么是数组及其应用的场景,掌握数组声明及访问的语法,具备利用数组渲染柱形图表的能力 今日重点: 循环嵌套数组综合案例 今日单词: 循环嵌套 利用循环的知识来对比一个简单的天文知识,我们…

arcpy制作脚本工具相关(制作并添加脚本工具、脚本工具消息提示、arcpy工具自动获取数据)

前言 采用arcpy制作arcgis的脚本工具,记录如下。 一、脚本工具的制作 制作脚本工具分为两步: 1、先编写对应功能的python脚步 2、将对应功能的脚本修改为,能自己手动选择输入输出数据的脚本 3、将修改完的脚本添加到工具箱 1、编写代码 我…

618种草观察丨益生菌「蓝」在一起,酸奶「地域控」?

2023年的“618”,食饮行业中,种草战线格外热闹,品牌花式“开屏”,吸引消费者。 数说故事发布「SMI社媒心智品牌榜」,本期持续关注健康食品,也新增了今夏网红酸奶行业,一起看看这两大赛道中&…

使用power rail连接secondary pg pin的方法

过往文章: secondary pg pin的作用与连接 之前写到过secondary pg pin的种类与几种连接方式,其中使用最多的方法是NDR rule + route_group的方式,这样工作量少,不容易出错,但也有弊端,那就是一…