ChatGLM2体验+ubuntu18.04LTS+CPU版本

news2025/1/12 6:08:46

ChatGPT在自然语言处理领域的表现让人振奋,开启了大模型在通用人工智能领域的大门。

许多工作随之跟进,并开源,凭借相对小的参数量达到近似GPT的效果,包括LLama,alpace等。

其中LLama训练语料主要选择英语,而且数据清洗时,非英文都被过滤掉,它对中文的支持能力相当有限,国内清华大学针对这个问题,扩充中文token,采用自建的中文语料库进行训练,生成ChatGLM2模型,目前的测试,在中文的表现上优于Chatgpt。

项目网址:GitHub - THUDM/ChatGLM2-6B: ChatGLM2-6B: An Open Bilingual Chat LLM | 开源双语对话语言模型

系统ubuntu18.04LTS

九天毕昇云服务8核CPU内存32G

内核:Linux dl-2307071824141la-pod-jupyter-5c6ccb995c-sfk68 4.19.90-2107.6.0.0100.oe1.bclinux.x86_64 #1 SMP Wed Dec 1 19:59:44 CST 2021 x86_64 x86_64 x86_64 GNU/Linux

2023年7月

下载:

github上分享的源码

GitHub - THUDM/ChatGLM2-6B: ChatGLM2-6B: An Open Bilingual Chat LLM | 开源双语对话语言模型

模型文件

THUDM/chatglm2-6b at main              6b-FP16

THUDM/chatglm2-6b-int4 at main        6b-int4  

 

一、搭建环境

conda create -n ChatGLM2 python=3.10.10 -y

参数:-n  后面ChatGLM2为创建的虚拟环境名称,python=之后输入自己想要的python版本,-y表示后面的请求全部为yes,这样就不用自己每次手动输入yes了。

安装完虚拟环境后,我们需要进入虚拟环境。

conda activate ChatGLM2

创建ChatGLM2项目的虚拟环境

python -m venv venv

激激活虚拟环境venv

source ./venv/bin/activate

 

Linux系统使用source ./venv/bin/activate命令即可,

Windows则直接双击./venv/Scripts/activate.bat或者运行./venv/Scripts/activate命令、

ChatGLM2-6B安装详解(Windows/Linux)及遇到的问题解决办法_星辰同学wwq的博客-CSDN博客

二、安装软件包

cd ChatGLM2-6B-main
pip install -r requirements.txt -i https://pypi.douban.com/simple

进入下载好的源码目录ChatGLM2-6B-main,执行requirements.txt安装依赖包,

参数:-r  是read的意思,可以把要安装的文件统一写在一个txt中,批量下载

参数:-i  后面是下载的网址,这里使用的是豆瓣源,下载安装大概十几分钟

 requirements.txt内容,我是新建requirements.txt,复制粘过去,再执行的文件

protobuf
transformers==4.30.2
cpm_kernels
torch>=2.0
gradio
mdtex2html
sentencepiece
accelerate
sse-starlette

安装完成后,查看安装的包和版本

pip list

官方建议:transformers 库版本推荐为 4.30.2,torch 推荐使用 2.0 及以上的版本,以获得最佳的推理性能

三、修改启动文件

进入ChatGLM2-6B-main目录,包含下列文件

cd ChatGLM2-6B-main
ls

 修改cli_demo.py文件

tokenizer = AutoTokenizer.from_pretrained("/root/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("/root/chatglm2-6b", trust_remote_code=True).float()

参数:/root/chatglm2-6b修改为ChatGLM2-6b模型路径,注意包含tokenizer.model文件。

参数:model = AutoModel.from_pretrained("/root/chatglm2-6b", trust_remote_code=True).float()
在 CPU 上进行推理,需要大概 32GB 内存

model = AutoModel.from_pretrained("/root/chatglm2-6b", trust_remote_code=True, device='cuda'),在 GPU 上进行推理,需要大概 13GB 显存

如果你的 GPU 显存有限,可以尝试以量化方式加载模型,使用方法如下:

# 按需修改,目前只支持 4/8 bit 量化
model = AutoModel.from_pretrained("/root/chatglm2-6b", trust_remote_code=True).quantize(8).cuda()
模型量化会带来一定的性能损失,经过测试,ChatGLM2-6B 在 4-bit 量化下仍然能够进行自然流畅的生成。

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

model = AutoModel.from_pretrained("/root/chatglm2-6b-int4",trust_remote_code=True).cuda()

cli_demo.py文件内容如下:

import os
import platform
import signal
from transformers import AutoTokenizer, AutoModel
import readline

tokenizer = AutoTokenizer.from_pretrained("/root/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("/root/chatglm2-6b", trust_remote_code=True).float()
# 多显卡支持,使用下面两行代替上面一行,将num_gpus改为你实际的显卡数量
# from utils import load_model_on_gpus
# model = load_model_on_gpus("THUDM/chatglm2-6b", num_gpus=2)
model = model.eval()

os_name = platform.system()
clear_command = 'cls' if os_name == 'Windows' else 'clear'
stop_stream = False


def build_prompt(history):
    prompt = "欢迎使用 ChatGLM2-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序"
    for query, response in history:
        prompt += f"\n\n用户:{query}"
        prompt += f"\n\nChatGLM2-6B:{response}"
    return prompt


def signal_handler(signal, frame):
    global stop_stream
    stop_stream = True


def main():
    past_key_values, history = None, []
    global stop_stream
    print("欢迎使用 ChatGLM2-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序")
    while True:
        query = input("\n用户:")
        if query.strip() == "stop":
            break
        if query.strip() == "clear":
            past_key_values, history = None, []
            os.system(clear_command)
            print("欢迎使用 ChatGLM2-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序")
            continue
        print("\nChatGLM:", end="")
        current_length = 0
        for response, history, past_key_values in model.stream_chat(tokenizer, query, history=history,
                                                                    past_key_values=past_key_values,
                                                                    return_past_key_values=True):
            if stop_stream:
                stop_stream = False
                break
            else:
                print(response[current_length:], end="", flush=True)
                current_length = len(response)
        print("")


if __name__ == "__main__":
    main()

四、测试推理

测试命令行,执行cli_demo.py文件

python cli_demo.py

参数:python执行cli_demo.py文件,命令行输出,加载模型大概几分钟

(venv) (ChatGLM2) root@dl-2307071824141la-pod-jupyter-7d677494c4-7jz2f:~/ChatGLM2-6B-main# python cli_demo.py
Loading checkpoint shards: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [02:33<00:00, 21.96s/it]
欢迎使用 ChatGLM2-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序

用户:你好

ChatGLM:你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。

 

测试API

安装额外的依赖包

pip install fastapi uvicorn

修改api.py文件

tokenizer = AutoTokenizer.from_pretrained("/root/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("/root/chatglm2-6b", trust_remote_code=True).float()

参数:/root/chatglm2-6b修改为ChatGLM2-6b模型路径,注意包含tokenizer.model文件。

这里是在CPU上运行,需要大概30G的内存

运行api.py

python api.py

五、未来的工作:

进行网页版测试

优化内存占用,提高反应速度,更方便的体验chatglm2-6b

几次对话就会退出,探究是系统硬件资源有限,还是代码的限制,进一步优化

遇到的错误:

(1)conda create -n ChatGLM2 python=3.10.10 -y
Collecting package metadata (current_repodata.json): failed

ProxyError: Conda cannot proceed due to an error in your proxy configuration.
Check for typos and other configuration errors in any '.netrc' file in your home directory,
any environment variables ending in '_PROXY', and any other system-wide proxy
configuration settings.

 更新源文件,修改源,重启都不行,休息会,再来弄,就好了

(2)OSError: root/chatglm2-6b is not a local folder and is not a valid model identifier listed on 'https://huggingface.co/models'

没有找到root/chatglm2-6b目录,路径错了,默认路径THUDM/chatglm-6b,我按照这个格式,把THUDM修改成我的路径root,运行报错,加个【/】号,改成 /root/chatglm2-6b,开始加载模型。请仔细核对路径。

(3)urllib3.exceptions.SSLError: [SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1007)

 解决方案:

pip install urllib3==1.25.11

urllib3版本的问题,如果换用 1.25.11或者其他低版本,就不会产生上面所述的错

python开代理后访问网站报ssl.SSLEOFError: EOF occurred in violation of protocol错_低版本urllib3_kaims的博客-CSDN博客

(4) -bash: lspci: command not found

分析:lspci 命令位于 pciutils 包的附加包 libpci3 中,因此需要安装这个包才能使用 lspci 命令

apt-get update
apt install pciutils

ubuntu指令积累:

locate+文件名                        显示出文件路径
sudo find / -name g2o            显示出搜索路径下所有匹配文件名的路径
dpkg -l                                   查看安装的所有软件
 whereis openmpi                  查看软件安装的路径

python -c "import torch; print(torch.cuda.is_available());"

查看 cuda 是否可用, -c 就是 command 的意思,简单来说, 就是 python -c 可以在命令行中执行 python 代码, 跟把代码放置在 .py 文件中然后运行这个文件比无明显差别

python -c 的学习使用_岳来的博客-CSDN博客

touch xxl.py          创建xxl.py文件

cat   xxx.py           在命令行输出xxx.py文内容

vim    xxx.py        使用vim打开xxx.py

git clone https://github.com/huggingface/transformers             克隆git源码到当前目录

sudo dpkg --list | grep nvidia-*               查看驱动版本

nvidia-smi                                              GPU列表信息

nvidia-settings                                       显示你的显卡信息

lshw -c video                                          查看显卡型号

lspci | grep -i nvidia                                得到NVIDIA显卡的信息

sudo apt-get update                              更新系统

ps aux | grep streamlit                           查看streamlit进程服务运行状态

启动一个单卡V100(CPU 8核、内存32G、V100 1个-32G显存),再看v100就灰色

参考:

https://www.bilibili.com/video/BV1414y1m7m

ChatGLM2-6B本地部署_爱学习的小黑的博客-CSDN博客

在个人电脑上部署ChatGLM2-6B中文对话大模型 - 程序员小屋(寒舍)

ChatGLM2-6B安装详解(Windows/Linux)及遇到的问题解决办法_星辰同学wwq的博客-CSDN博客

ChatGLM2-6B安装详解(Windows/Linux)及遇到的问题解决办法_星辰同学wwq的博客-CSDN博客

本地安装部署运行 ChatGLM-6B 的常见问题解答以及后续优化 — 秋风于渭水

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

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

相关文章

Docker内部工作原理:容器化背后的魔法

Docker内部工作原理是怎样的&#xff1f; 现在我们知道了Docker是什么以及它提供了哪些好处&#xff0c;让我们逐个重要的细节来了解。 什么是容器&#xff1f;它们是如何工作的&#xff1f; 在深入研究Docker的内部机制之前&#xff0c;我们首先要了解容器的概念。简单地说&am…

在工作与生活中保持情绪稳定的艺术

强烈的情绪波动&#xff1a;工作中的挑战 在我的职业生涯中&#xff0c;我经历过许多情绪波动的时刻。其中一个最具挑战性的时刻是在我负责一个重要项目的时候。我需要在短时间内完成大量的工作&#xff0c;同时还要管理一个由不同背景和技能的人组成的团队。这个项目的压力让…

leetcode-704. 二分查找

leetcode-704. 二分查找 文章目录 leetcode-704. 二分查找一.题目描述二.第1次代码提交(非二分查找)三.第2次代码提交(非二分查找&#xff0c;std::find和std::distance)四.第3次代码提交(二分查找)五.关于C中int型的奇数除以2 一.题目描述 二.第1次代码提交(非二分查找) clas…

Openlayers实战:drawstart,drawend 绘制交互应用示例

Openlayers地图中,绘制一个多边形是非常见的一个应用,涉及到交互会在绘制开始 drawstart 和绘制结束drawend时,通常会在绘制完成后取消继续绘制,然后提出feature的一些信息。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN) * @此源代…

B066-基础环境-前后端整合 批量删除 下拉 级联 增改

目录 批量删除页面调整普通属性的新增和修改引用属性的新增和修改管理员下拉列表部门树 见文档与代码 cd 子项目 运行前端项目 页面布局分析 批量删除 点击多选 - 改变data - 点击批量删除 - 带参数发请求 页面调整 略 普通属性的新增和修改 新增按钮&#xff1a;点击…

【MySQL系列】在Centos7环境安装MySQL

「前言」文章内容大致是在Centos7环境安装MySQL&#xff0c;演示安装的版本为5.7 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「句子分享」 浮生梦&#xff0c;三生渺渺&#xff0c; 因缘无踪&#xff0c;虽堪恋&#xff0c;何必…

回归预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出回归预测

回归预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-BiGRU-Attention多输入单输出回归预测&#xff0c;CNN-GRU结合…

Vision Transformer(VIT)论文解读及实现

1 论文解读 paper&#xff1a;VIT 1.1 VIT模型架构如下图所示&#xff1a; 图片原始输入维度 H * W * C在H和W按像素P切分&#xff0c;则H 、W可分割为 NPP, NHW/(PP)&#xff0c;N为输入transform序列的长度。 x ∈ R H ∗ W ∗ C > x ∈ R N ∗ P 2 ∗ C x \in R^{H*W…

第三章 SSD存储介质:闪存 3.1

3.1 闪存物理结构 闪存芯片从小到大依此是由&#xff1a;cell&#xff08;单元&#xff09;、page&#xff08;页&#xff09;、block&#xff08;块&#xff09;、plane&#xff08;平面&#xff09;、die&#xff08;核心&#xff09;、NAND flash&#xff08;闪存芯片&#…

Python find()函数使用详解

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 find 1、指定检索位置2、参数为负数3、超出范围3、find()和index()的区别&#x…

【Docker】Docker安装MySQL

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前专攻C/C、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL、蓝桥杯&am…

Win11系统如何安装Oracle数据库(超级详细)

前言&#xff1a;在我们安装Oracle之前我们得理解Oracle数据库的优点是什么&#xff1a; Oracle是一个功能强大、可扩展和全面的数据库平台&#xff0c;具有广泛的功能和企业级能力&#xff0c;适用于处理复杂的企业级应用和大型数据集。 目录 一.下载Oracle数据库软件&…

解决idea只能通过 idea.bat打开的问题

解决&#xff1a;C盘用户下面 有idea的配置文件 &#xff0c;找到idea64.exe.vmoptions 把 -jetbrain &#xff1a; 配置的 jar路径删除

Tablet vs. eReader: Which Is Better for Ebooks? 平板电脑与电子阅读器:哪个更适合电子书?

eReaders are best if all you want to do is have something as close to a paper book as possible. However, if you need anything more than that, a tablet makes more sense as a general-purpose device that can also read ebooks. 如果您只想拥有尽可能接近纸质书的东…

认识文件操作与IO

文章目录 认识文件文件夹文件路径文件分类 文件操作File类构造方法常用方法 字节流IOInputStream常用方法 FileInputStream构造方法FileInputStream实例 OutputStream方法 FileOutputStream 字符流IO 认识文件 我们平时所说的文件指的是存在硬盘上的文件&#xff0c;我们平时的…

Openlayers实战:回显多点、多线段、多多边形

Openlayers地图中,回显数据是非常重要的。 继上一示例回显点、线、圆形、多边形后。本示例回显多线,多点,多个多边形。用到了MultiPoint,MultiLineString,MultiPolygon。 多个信息的显示可以采用循环的方式,单个显示点、线、面。 但是循环方式是要多次计算的,而MultiPoint…

GUI (java)

GUI 一.GUI概念二.Swing概述三.容器组件四.常用容器1.窗体(1) JFrame类的构造方法(2) JFrame类的常用方法 2.面板(1)JPanel类的构造方法(2)JPanel类的常用方法 五.布局管理器1. FlowLayout 流式布局(1)FlowLayout构造方法 2.BorderLayout 边界布局3.GridLayout 网格布局 六.常用…

LangChain: 大语言模型的新篇章

本文介绍了LangChain框架&#xff0c;它能够将大型语言模型与其他计算或知识来源相结合&#xff0c;从而实现功能更加强大的应用。接着&#xff0c;对LangChain的关键概念进行了详细说明&#xff0c;并基于该框架进行了一些案例尝试&#xff0c;旨在帮助读者更轻松地理解LangCh…

Mycat【Mycat高级特性_搭建双主双从、Mycat分片技术_垂直拆分-分库 】(四)-全面详解(学习总结---从入门到深化)

目录 Mycat高级特性_搭建双主双从 Mycat分片技术_垂直拆分-分库 Mycat高级特性_搭建双主双从 环境准备 创建docker容器 #启动第一台 docker run -d -p 3350:3306 -e MYSQL_ROOT_PASSWORD123456 --namemaster1 mysql:5.7#启动第二台 docker run -d -p 3360:3306 -e MYSQL_R…

Qt自定义控件之动画文本

文章目录 前言一、动画文本的效果二、具体实现定义动画对象设置动画时长的实现设置text函数实现绘制代码设置字体函数 三、高级部分操作代码总结 前言 在 Qt 中&#xff0c;自定义控件可以让我们实现丰富的用户界面效果和交互体验。其中&#xff0c;动画文本是一种常见的效果&…