ChatGLM使用记录

ChatGLM

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。

  • 官方网站:https://chatglm.cn/

  • 项目地址:https://github.com/THUDM/ChatGLM-6B

  • 相关PPT:ChatGLM: 从千亿模型到ChatGPT

  • 相关实践:https://www.heywhale.com/mw/project/643977aa446c45f4592a1e59

安装

先clone项目:

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

然后进入项目ChatGLM-6B后,安装需要的环境

pip install -r requirements.txt

其中 transformers 库版本推荐为 4.27.1,但理论上不低于 4.23.1 即可。

此外,如果需要在 cpu 上运行量化后的模型,还需要安装 gccopenmp。多数 Linux 发行版默认已安装。对于 Windows ,可在安装 TDM-GCC 时勾选 openmp。 Windows 测试环境 gcc 版本为 TDM-GCC 10.3.0, Linux 为 gcc 11.3.0。在 MacOS 上请参考 Q1。

下载本地模型

基于自己硬件条件来安排:

量化等级最低 GPU 显存(推理)最低 GPU 显存(高效参数微调)
FP16(无量化)13 GB14 GB
INT88 GB9 GB
INT46 GB7 GB

目前模型越大,性能越好,对应的地址有:

  • https://huggingface.co/THUDM/chatglm-6b/
  • https://huggingface.co/THUDM/chatglm-6b-int8
  • https://huggingface.co/THUDM/chatglm-6b-int4

这里以fp16为例,不做量化处理。进入https://huggingface.co/THUDM/chatglm-6b/tree/main

创建chatglm-6b文件夹并进入

在这里插入图片描述

将所有的文件都下载到该文件夹下:

在这里插入图片描述

如果是已联网的远程服务器,可以直接通过wget下载,下载链接就是那个下载符号对应的链接:

在这里插入图片描述

wget https://huggingface.co/THUDM/chatglm-6b/resolve/main/pytorch_model-00001-of-00008.bin

在这里插入图片描述

代码调用

可以通过如下代码调用 ChatGLM-6B 模型来生成对话:

>>> from transformers import AutoTokenizer, AutoModel
>>> tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b-fp16", trust_remote_code=True)
>>> model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
>>> model = model.eval()
>>> response, history = model.chat(tokenizer, "你好", history=[])
>>> print(response)
你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。
>>> response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
>>> print(response)
晚上睡不着可能会让你感到焦虑或不舒服,但以下是一些可以帮助你入睡的方法:1. 制定规律的睡眠时间表:保持规律的睡眠时间表可以帮助你建立健康的睡眠习惯,使你更容易入睡。尽量在每天的相同时间上床,并在同一时间起床。
2. 创造一个舒适的睡眠环境:确保睡眠环境舒适,安静,黑暗且温度适宜。可以使用舒适的床上用品,并保持房间通风。
3. 放松身心:在睡前做些放松的活动,例如泡个热水澡,听些轻柔的音乐,阅读一些有趣的书籍等,有助于缓解紧张和焦虑,使你更容易入睡。
4. 避免饮用含有咖啡因的饮料:咖啡因是一种刺激性物质,会影响你的睡眠质量。尽量避免在睡前饮用含有咖啡因的饮料,例如咖啡,茶和可乐。
5. 避免在床上做与睡眠无关的事情:在床上做些与睡眠无关的事情,例如看电影,玩游戏或工作等,可能会干扰你的睡眠。
6. 尝试呼吸技巧:深呼吸是一种放松技巧,可以帮助你缓解紧张和焦虑,使你更容易入睡。试着慢慢吸气,保持几秒钟,然后缓慢呼气。如果这些方法无法帮助你入睡,你可以考虑咨询医生或睡眠专家,寻求进一步的建议。

Demo & API

先确认相关代码的模型文件名是否跟自己下载的模型文件名一致,如果不一致先进行修改。

  • web_demo.py

在这里插入图片描述

如果不一致的话,修改文件名为对应的chatglm-6b

  • api.py

在这里插入图片描述

如果不一致的话,修改文件名为对应的chatglm-6b

  • cli_demo.py

在这里插入图片描述

如果不一致的话,修改文件名为对应的chatglm-6b

web_demo

web_demo是基于gradio开发的,这里可以进一步修改,指定ip和port,便于远程访问:

在这里插入图片描述

输入python web_demo.py经过一段时间的等待,出现如下图一样的输出就代表运行成功,在浏览器输入地址:http://xxxxxx:xxxxx,就可以愉快地使用chatglm了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

api

在命令行输入python api.py,经过一段时间的运行,出现如下输出,就是运行成功。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xn6QRC5i-1689330121452)(C:\Users\DELL-3020\AppData\Roaming\Typora\typora-user-images\image-20230615173532384.png)]

按照官网给的示例,

curl -X POST "http://127.0.0.1:8000"
-H 'Content-Type: application/json'
-d '{"prompt": "你好", "history": []}'

回复:

{"response":"你好!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。","history":[["你好","你好!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。"]],"status":200,"time":"xxxxx"}

可以使用python中的requests库进行访问,可以把这个代码封装一下实现多轮对话。

import requests
import jsonurl = 'http://127.0.0.1:8000'
headers = {'Content-Type': 'application/json'}
data = {"prompt": "你好", "history": []}response = requests.post(url=url, headers=headers, data=json.dumps(data))
response.json()

cli_demo

在命令行输入python cli_demo.py,经过一段时间的运行,出现如下输出,就是运行成功。

在这里插入图片描述

然后就可以在终端和它进行对话,就像运行wei_demo.py一样。

在这里插入图片描述

其它设备部署

cpu

如果没有 GPU 硬件的话,也可以在 CPU 上进行推理,但是推理速度会更慢(大概需要 32GB 内存)

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

如果内存不足,可以直接加载量化后的模型:

# INT8 量化的模型将"THUDM/chatglm-6b-int4"改为"THUDM/chatglm-6b-int8"
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4",trust_remote_code=True).float()

mac部署

对于搭载了 Apple Silicon 或者 AMD GPU 的Mac,可以使用 MPS 后端来在 GPU 上运行 ChatGLM-6B。需要参考 Apple 的 官方说明 安装 PyTorch-Nightly。

目前在 MacOS 上只支持从本地加载模型。将代码中的模型加载改为从本地加载,并使用 mps 后端:

model = AutoModel.from_pretrained("your local path", trust_remote_code=True).half().to('mps')

加载半精度的 ChatGLM-6B 模型需要大概 13GB 内存。内存较小的机器在空余内存不足的情况下会使用硬盘上的虚拟内存,导致推理速度严重变慢。此时可以使用量化后的模型如 chatglm-6b-int4。因为 GPU 上量化的 kernel 是使用 CUDA 编写的,因此无法在 MacOS 上使用,只能使用 CPU 进行推理。

# INT8 量化的模型将"THUDM/chatglm-6b-int4"改为"THUDM/chatglm-6b-int8"
model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4",trust_remote_code=True).float()

为了充分使用 CPU 并行,还需要单独安装 OpenMP。

多卡部署

如果一台机器有多张 GPU,但是每张 GPU 的显存大小都不足以容纳完整的模型,那么可以将模型切分在多张GPU上。首先安装 accelerate: pip install accelerate,然后通过如下方法加载模型:

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

即可将模型部署到两张 GPU 上进行推理。可以将 num_gpus 改为你希望使用的 GPU 数。默认是均匀切分的,也可以传入 device_map 参数来自己指定。

参考

  • https://github.com/THUDM/ChatGLM-6B
  • https://huggingface.co/THUDM/chatglm-6b
  • https://github.com/THUDM/P-tuning-v2
  • https://github.com/hwchase17/langchain
  • https://github.com/imClumsyPanda/langchain-ChatGLM
  • https://github.com/openai/openai-cookbook
  • https://python.langchain.com/en/latest/getting_started/getting_started.html

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DNS详细解析

文章目录 DNS是什么以及作用下载DNS服务named.conf DNS查询DNS缓存机制解析过程递归查询和迭代查询 DNS服务器的类型DNS域名DNS服务器的类型搭建dns服务器缓存域名服务器主域名服务器从域名服务器排错反向解析 CDN介绍 DNS转发介绍配置 DNS劫持 DNS 是什么以及作用 DNS&#…

收款单签字时,报”结算信息表体中本方银行账户、现金账户、票据号 (商业汇票号)不能同时为空,签字操作失败“,能否取消这个校验??

大概整理,如有不当,欢迎留言指出,谢谢! 收款单签字时,报”结算信息表体中本方银行账户、现金账户、票据号 (商业汇票号)不能同时为空,签字操作失败“,能否取消这个校验?&#xff1f…

磁盘擦写次数计算

1.让机器能有外网 2,安装工具 sudo apt-get install smartmontools 3,输入查询命令 sudo smartctl -x /dev/sda |egrep Device Model|User Capacity|Sector Size|173|Logical Sectors Written|Percentage Used Endurance Indicator 4,计算擦写次数 计算方法:25…

vue2 实现后台管理系统左侧菜单联动实现 tab根据路由切换联动内容,并支持移动端框架

效果图: pc端 移动端 由于代码比较多,我这里就不一一介绍了,可以去我的git上把项目拉下来 git地址https://gitee.com/Flechazo7/htglck.git 后台我是用node写的有需要的可以评论联系

科技资讯|三星智能戒指资料曝光,智能穿戴发展新机遇

根据 Reddit 社区网友反馈,在 Beta 版三星 Health 应用中,发现了全新的“Ring Support”选项,暗示三星未来将会推出智能戒指产品。 三星内部正在开发健康追踪设备 Galaxy Ring,这款智能戒指配备 PPG(光电容积脉搏波&…

Tomcat之安装与项目部署

Tomcat是一个免费、开源的javaWeb轻量级应用服务器 优于是使用Java开发的,需要运行在java虚拟机中,所以必须安装jdk,以提供运行环境。 Tomcat可以看做一个http服务器,通过组件Connector接收http请求并解析,然后把结果…

更改el-select-dropdown_item selected选中颜色

更改el-select-dropdown_item selected选中颜色 默认为element主题色 在修改element select下拉框选中颜色时会发现不生效,原因是:el-select下拉框插入到了body中 解决办法: 在select标签里填写:popper-append-to-body"false"属性…

音频播放器Web页面代码实例(基于HTML5)

音频播放器Web页面代码实例&#xff08;基于HTML5&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><…

H3C-Cloud Lab-实验-ACL实验

实验拓扑图&#xff1a; 网段分布情况&#xff1a; 实验需求&#xff1a; 1. 按照图示配置 IP 地址 2. 全网路由互通 3. 在 SERVER1 上配置开启 TELNET 和 FTP 服务 4. 配置 ACL 实现如下效果 1&#xff09;192.168.1.0/24 网段不允许访问 192.168.2.0/24 网段&#xff0c…

Ubuntu18.04修改file descriptors(文件描述符限制),解决elasticsearch启动报错问题

最近在学习elasticsearch&#xff0c;使用的平台是Ubuntu18.04&#xff0c;在部署过程中的坑记录一下。 下载安装的过程就不说了&#xff0c;在启动es的时候报错 1 max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535] 看了下…

冯诺依曼体系结构以及回答操作系统(是什么,为什么,怎么办)问题

目录 一、硬件冯诺依曼体系结构 二、软件2.1 计算机的层状结构2.2 操作系统的概念2.3 操作系统是什么&#xff1f;2.4 为什么要有操作系统&#xff1f;2.5 操作系统是怎么管理底层的软硬件资源的呢&#xff1f; 一、硬件 冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记…

Es存储和查询

基本概念 Cluster 集群&#xff0c;一个ES集群是由多个节点(Node)组成的&#xff0c;每个集群都有一个cluster name 作为标识&#xff0c; 在同一网段下的Es实例会通过cluster name 决定加入哪个集群下。 node 节点&#xff0c;一个ES实例就是一个node&#xff0c;一个机器可以…