手把手教你搭建自己本地的ChatGLM

news2025/1/20 2:00:59

前言

如果能够本地自己搭建一个ChatGPT的话,训练一个属于自己知识库体系的人工智能AI对话系统,那么能够高效的处理应对所属领域的专业知识,甚至加入职业思维的意识,训练出能够结合行业领域知识高效产出的AI。这必定是十分高效的生产力工具,且本地部署能够保护个人数据隐私,能够内网搭建办公使用也十分的方便。

而对于ChatGLM来说最大的优点就是本地能快速部署且需要资源较比与ChatGPT相当低,还要什么自行车,够用就好。甚至能够在一些性能较高的服务器单点部署,INT4 量化级别下最低只需 6GB 显存。而且我们根本不需要那么宽泛的知识面,只需要垂直一个知识领域深度就足够应对较多业务场景,故ChatGLM确实是较好的二次开发基础工具。

那么不继续发表意见了,本地部署ChatGLM还是会遇到较多问题,建议各位先弄清楚本地开发环境以及电脑配置再根据我给出的组件兼容表对照,不同的配置和环境需要采用不同的安装策略。当然我也只有一台电脑部署很多情况没遇到也不知道如何处理,若是大家根据我的文章部署遇到困难请在评论区或者私信告知我,谢谢各位的支持。

部署依赖

1.硬件需求

这是ChatGLM的开源项目:https://github.com/Fanstuck/ChatGLM-6B。里面可以看到硬件需求,这是硬性要求如果不满足肯定是部署不了的,只能升级电脑配置了:

在这里插入图片描述

2.环境需求

再看依赖文件requirements.txt:

在这里插入图片描述

很多人这里就已经开始pip install -r requirements.txt,但是这里需要注意的是torch下载会出问题,而且大概率下载的会是cpu版本。我这里不建议直接pip install,对于有GPU的同学来说肯定下载GPU版本的torch最优,且不清楚自己cuda的版本下很容易下载的torh和cudnn版本不兼容,所以这里单独说一下torch该如何安装合适的版本。

首先先看一下NVIDIA支持最高的cuda版本:

cmd输入nvidia-smi就可以看到:

在这里插入图片描述

这里显示我的cuda版本为11.7,下载比这低的版本就好了。

但是这里需要注意cuda版本和torch版本是对应的:

pytorch历史版本下载:

https://pytorch.org/get-started/previous-versions/,只要低于11.7版本的torch都是可以的。
在这里插入图片描述

若是pip下载time out的下载wheel:https://download.pytorch.org/whl/torch_stable.html

模型下载

下载ChatGLM有两种方式,一种是通过transformers直接下载,通过调用代码就可以下载到本地,下载默认本地的目录为:

C:\Users.cache\huggingface\modules\transformers_modules

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
model = model.eval()

当然下载太慢的话也可以在Hugging Face Hub里面下载:https://huggingface.co/THUDM/chatglm-6b

不需要frok直接clone就可以了。版主还提供了不同编译后的版本可供下载,我这边就下载了已经编译后的int4版本,我的内存只有16G且显存128M很低故带不起原生模型。

在这里插入图片描述

这样的话文件不需要下载到C盘下面,可以自己选择要下载的目录。

下载完成之后里面提供了两个demo可以测试,需要修改函数AutoTokenizer.from_pretrained中的THUDM/chatglm-6b,也就是pretrained_model_name_or_path更换成你下载chatGLM的目录就可以使用了。

如果你的显存配置有限的话可以选择以量化方式加载模型,比如:

# 按需修改,目前只支持 4/8 bit 量化
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(4).half().cuda()

模型量化会带来一定的性能损失,经过测试,ChatGLM-6B 在 4-bit 量化下仍然能够进行自然流畅的生成。

量化过程需要在内存中首先加载 FP16 格式的模型,消耗大概 13GB 的内存。如果你的内存不足的话,可以直接加载量化后的模型,仅需大概 5.2GB 的内存:

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

我这边直接下载的int4模型不需要再加载整个模型了。

如果你没有 GPU 硬件的话,也可以在 CPU 上进行推理,但是推理速度会更慢。使用方法如下,需要大概 32GB 内存:

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

模型使用

以我的计算机来说平常内存就有
在这里插入图片描述

11G占用了,运行该模型肯定会报OOM,推荐大家把一些暂时不需要的进程杀掉尽可能多的留多点内存再跑模型:

这里推荐在终端上面运行不要用pycharm,内存更多:
在这里插入图片描述

使用web_demo.py可以直接在网站上面对话:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

我这里直接OOM了没有办法,大家计算机好点就没问题。

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

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

相关文章

ChatGPT本地部署(支持中英文,超级好用)!

今天用了一个超级好用的Chatgpt模型——ChatGLM,可以很方便的本地部署,而且效果嘎嘎好,经测试,效果基本可以平替内测版的文心一言。 目录 一、什么是ChatGLM? 二、本地部署 2.1 模型下载 2.2 模型部署 2.3 模型运…

HCIE 第一天防火墙笔记整理

一、结合以下问题对当天内容进行总结 1. 什么是防火墙? 2. 状态防火墙工作原理? 二、复现上课俩个演示实验 一、结合以下问题对当天内容进行总结 1 什么是防火墙? 防火墙是一种隔离(非授权用户和授权用户之间部署)并过…

大数据学习完可以做什么

如果要推荐一种人人都能掌握的编程语言,应该没有比Python更合适的了。如果想学习大数据,可以选择从python语言入手~ Python 简单易学,用途广泛,不仅可以在日常办公中提高大家的职场效率,还能被大型互联网企业应用于后…

C++-c语言词法分析器

一、运行截图 对于 Test.c 的词法分析结果 对于词法分析器本身的源代码的分析结果 二、主要功能 经过不断的修正和测试代码,分析测试结果,该词法分析器主要实现了以下功能: 1. 识别关键字 实验要求:if else while do for main…

常见排序算法

目录 一、插入排序 1、直接插入排序 2、希尔排序(缩小增量插入排序) 二、选择排序 三、堆排序 四、冒泡排序 五、快速排序(递归) 1、交换法 2、挖坑法 3、前后指针法(推荐) 4、快排再优化 六、快速排序&…

spring常用注解(全)

一、前言 Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。 Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大…

Vue学习笔记(6. 组件之间传值)

1. 组件基本语法 (1) template (2) script (3) style 2. 父组件传值,子组件接值 (1) 父组件传值给子组件 (2) 子组件接收父组件的传值(随时接收) 子组件的值会随着父组件值的变更而变更。但是子组件变更,不会影响父组件的数据…

Jetson nano部署剪枝YOLOv8

目录前言一、YOLOv8模型剪枝训练1. Pretrain[option]1.1 项目的克隆1.2 数据集1.3 训练2. Constraint training3. Prune4. finetune二、YOLOv8模型剪枝部署1. 源码下载2. 环境配置2.1 trtexec环境变量设置3. ONNX导出3.1 Transpose节点的添加3.2 Resize节点解析的问题4. 运行4.…

【RabbitMQ学习日记】—— 发布确认与交换机

一、发布确认 1.1 发布确认的原理 生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始),一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认…

小白快速学习Markdown

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

做好Python工程师,首先你需要做好的几件事

做好Python工程师,需要做好的几件事,我想分享给大家。首先千万不要做事周折。在你提问之前,先好好想一想,这个问题自己能不能解决。如果能解决,尽量自己解决;如果解决不了,那就要把你的问题描述…

大宗商品进口管理软件可以帮助企业解决哪些?

什么是大宗商品贸易?简单讲就是大宗商品在国际上自由流通。以贸易的形式,把商品从价格低的地方拉到价格高的地方出售。大宗商品是指可进入流通领域,可在工农业领域生产与消费使用的大批量买卖的。主要包括的类别有:能源商品、基础…

网络编程答疑融合连环tcp/nio/bio/redis/redisson/lettuce/netty/dubbo

如果有不对的地方, 欢迎在评论区指正: bio 1.1 请求-响应模型. 对于接收方, serverSocket.accept() 为每个请求(连接)安排一个线程 1.2浪费(阻塞占比大): socket.getInputStream().read()调用是阻塞的, 实际情况对于常见的web应用, 大家都是长连接, 同一时刻, 阻塞在此在线程会…

蓝牙技术|苹果获空间音频新专利,AirPods可动态调整声学输出

美国商标和专利局(USPTO)公示的清单显示,苹果在近日获得了一项名为“测定虚拟聆听环境”的新专利。据悉,该技术可以改善用户的聆听体验,增强空间音频的沉浸感,未来有望应用在AirPods上。 这项专利技术可以…

第二章 Linux目录结构

第二章 Linux目录结构linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的 目录。 2)深刻理解 linux 树状文件目录是非常重要的。3)记住一句经典的话:在Linux世界里,一切皆文件(!!)4)示意…

4.12--计算机网络之TCP篇之TCP 协议的缺陷+如何基于 UDP 协议实现可靠传输?--(复习+大总结)---沉下心来(加油呀)

TCP 协议四个方面的缺陷: 1.升级 TCP 的工作很困难; TCP 协议是在内核中实现的,应用程序只能使用不能修改,如果要想升级 TCP 协议,那么只能升级内核。 而升级内核这个工作是很麻烦的事情 2.TCP 建立连接的延迟&#x…

Linux -- 进程间通信

文章目录1. vscode软件下载和使用1.1 下载1.1.1 解决下载慢问题1.1.2 推荐下载链接1.2 vscode是什么1.3 Windows本地vscode使用1.4 远程连接linux1.5 推荐插件2. 进程间通信目的3. 为什么需要通信4. 匿名管道4.1 原理4.2 代码案例4.3 玩一玩(进程池)4.3.1 模型4.3.2 代码5. 命名…

STM32+W5500实现以太网通信

STM32系列32位微控制器基于Arm Cortex-M处理器,旨在为MCU用户提供新的开发自由度。它包括一系列产品,集高性能、实时功能、数字信号处理、低功耗/低电压操作、连接性等特性于一身,同时还保持了集成度高和易于开发的特点。本例采用STM32作为MC…

【开懂C++】命名空间 函数重载 缺省参数

目录一.命名空间二.缺省参数三.函数重载一.命名空间 在编写C语言代码时,当工程较大时,很容易产生变量命名冲突的情况——一般有两种冲突的情况 1.变量名与库中的函数名、关键字冲突。2.工程模块化搭建时不同文件的命名冲突。 而C为了优化这一缺陷&#…

安装Ubuntu系统后的实用工具配置指南

1. 修改软件源 Ubuntu 默认的软件源是境外的,速度上会有些问题,我们可以在Software & Updates(软件和更新)中选择国内的镜像。 一般我们选择清华源或者阿里云源。 2. 安装chorme浏览器 在ubuntu下我比较习惯用火狐浏览器和谷歌浏览器。 谷歌浏览…