ChatGLM-6B的windows本地部署使用

news2024/11/24 22:34:51

ChartGPT最近特别火,但是收费,而且国内访问不太方便,所以找了个类似的进行学习使用

ChatGLM-6B,开源支持中英文的对话大模型,基于 General Language Model (GLM) 架构,具有62亿参数,简单说非常不错,可能和chart GPT比较有些差距,但是开源免费,并且可以在本地部署,支持中文,这就很nice了

首先安装环境,当前本机电脑win10,pycharm2020,python3.9,Anaconda3。文章涉及到的相关资源会在文章最下面公共号中提供,这里也注意,部分软件根据电脑本身需要改动版本

安装

1、需要安装CUDA和cudnn

由于要使用GPU(不用也可以,不过是有点慢),需要安装CUDA和cudnn,CUDA是显卡厂商NVIDIA推出的运算平台,cuDNN是用于深度神经网络的GPU加速库, CUDA看作是一个工作台,cuDNN是具体工具

在控制面板查看支持的版本

在这里插入图片描述

或者敲命令

nvidia-smi

在这里插入图片描述

确定CUDA版本,去网站下载

https://developer.nvidia.com/cuda-toolkit

我下在的就是12的

然后下载cudnn,这里也注意,网站需要注册登录下载,最好在谷歌浏览器上面走,火狐上容易卡住

https://developer.nvidia.com/rdp/cudnn-archive

下载的时候注意cuda版本

在这里插入图片描述

安装的时候如果遇见什么错误,可以查看https://blog.csdn.net/anmin8888/article/details/127910084这个博客上安装流程

2、下载代码

装完环境后接下来可以开始下载代码,这里推荐使用pycharm直接从Git上直接下载,然后通过软件创建环境,这里的话通过软件一步一步下一步就完了,然后等待相关jar包下载完毕即可

下载完成后可以创建一个py文件运行下面代码

运行

import torch

print(torch.__version__)
print(torch.cuda.is_available())

会打印torch版本以及是否能使用cuda,如果一切正常会打印

2.0.1+cu117
True

需要注意的是 “ cu117 ” 和 “ True ” ,这样表示一切正常

如果打印的是CPU,说明torch版本不是GPU的,需要卸载重装

pip uninstall torch torch-2.0.1.dist-info torchgen	

torch官网地址 :https://pytorch.org/get-started/locally/#no-cuda-1

然后在pycharm的Terminal面板下运行,等待下载安装完成

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117

如果最后打印为false,则可能是torch和cuda的版本不兼容,需要安装对应版本

3、下载模型

完整模型在Hugging Face Hub网站上,地址:https://huggingface.co/THUDM/chatglm-6b

命令下载

git lfs install
git clone https://huggingface.co/THUDM/chatglm-6b

但是这样下载太慢,而且由于网络问题且模型特别大,容易下载不下来,所以最后一个一个下,尤其是那些模型,动不动一两个G的

在这里插入图片描述

下载完成后在pycharm项目根目录下创建文件夹chatglm-6b,然后存入所有相关文件

在这里插入图片描述

4、使用

接下来就可以使用了,使用方式有通过网页访问,命令行访问,API访问三种,在README.md文档中都有说明,这里使用API的方式访问

创建一个application文件夹存放相关自己代码,创建一个py文件,然后写入,运行文件即可

from transformers import AutoTokenizer, AutoModel
import os

modelPath = os.path.abspath('../chatglm-6b')

tokenizer = AutoTokenizer.from_pretrained(modelPath,
                                          trust_remote_code=True)

model = AutoModel.from_pretrained(modelPath,
                                  trust_remote_code=True).half().cuda()


model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)

response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
print(response)

除此之外也可以启动 web_demo.py ,在页面上进行交互使用,需要注意修改文件中模型文件所在位置

异常

Torch not compiled with CUDA enabled

Torch CUDA 版本没有一致,卸载重装对应版本

CUDA out of memory

内存不足,加 .quantize(8) , 还是报这个错的话可以再减数字
model = AutoModel.from_pretrained(modelPath,
                                  trust_remote_code=True).quantize(4).half().cuda()

后记

如果感觉下载一切比较麻烦的话,可以关注公共号 有意思的GitHub,回复chatglm,源码,模型,工具,安装包,都在对应百度云盘

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

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

相关文章

SpringCloud高级应用-Gateway

Dubbo SpringCloud高级应用 1. SpringCloud技术栈1.1 SpringCloud技术栈1.2 SpringCloud经典技术介绍1.3 SpringCloud项目场景 2. SpringCloud Gateway2.1 Gateway工作原理2.2 Gateway路由2.2.1 业务说明2.2.2 基于配置路由设置2.2.3 基于代码路由配置2.2.4 Gateway-Predicate2…

数据库的增删改查(2)

1、数据库约束 关系型数据库的一个重要功能 主要作用是保证数据的完整性,也就是数据的正确性(数据本身是正确的,关联关系也是正确的) 人工检查数据的完整性的工作量非常的大,在数据表定义一些约束,那数据…

Shamir 秘密共享、GMW和BGW方案

一、Shamir秘密共享 Shamir秘密共享方案是一种将秘密拆分成多份并分配给多个参与者保存,只有在满足特定条件下才能恢复原始秘密的密码学方案。它具有良好的容错性、加法同态性和无条件安全性等特点。 具体地,Shamir秘密共享方案可以概括为以下步骤&…

Protobuf数据类型

enum类型 语法⽀持我们定义枚举类型并使⽤。在.proto⽂件中枚举类型的书写规范为: 枚举类型名称: 使⽤驼峰命名法,⾸字⺟⼤写。例如: MyEnum 常量值名称: 全⼤写字⺟,多个字⺟之间⽤连接。例如&#xff1a…

【嵌入式烧录/刷写文件】-2.9-Intel Hex文件的地址对齐Address Alignment

案例背景(共5页精讲): 对一个Intel Hex文件,进行地址对齐Address Alignment。 目录 1 为什么要进行“地址对齐Address Alignment” 1.1 “对齐长度”的选择 2 使用Vector HexView工具对Hex文件进行“地址对齐Address Alignment” 2.1 “自动”完成“地址对齐Ad…

【JavaEE】Cookie与Session的前后端交互-表白墙登录设计

【JavaEE】Cookie与Session的前后端交互-表白墙登录设计 文章目录 【JavaEE】Cookie与Session的前后端交互-表白墙登录设计1. Cookie与Session1.1 后端doPost的实现1.1.1 隐藏的全局变量1.1.2 获取请求对应的HttpSession对象1.1.3 约定前后端交互方式1.1.4 验证用户名与密码是否…

你不知道的Bing聊天机器人:7个惊人的用途!

导读:以下是我总结的有用的方法,可以利用AI聊天机器人让您的生活更轻松。 本文字数:1600,阅读时长大约:10分钟 生成式AI工具可以用非常多的方式使你的日常生活更轻松。 AI聊天机器人在编程、写作等方面表现出色&#…

JVM入门:官网了解JVM、Java源文件运行过程、什么是类加载器、Java的类加载机制的三种方式、Tomcat的自定义类加载器

JVM入门:官网了解JVM、Java源文件运行过程、什么是类加载器、Java的类加载机制的三种方式、Tomcat的自定义类加载器 通过官网了解JVM官网jdk8结构图什么是JVM查看官网Java语言和虚拟机规范 Java源文件运行过程1.Java源文件经过Javac编译成字节码文件如何手动编译一个…

Java如何实现去重?这是在炫技吗?

大家好,我3y啊。由于去重逻辑重构了几次,好多股东直呼看不懂,于是我今天再安排一波对代码的解析吧。austin支持两种去重的类型:N分钟相同内容达到N次去重和一天内N次相同渠道频次去重。 Java开源项目消息推送平台🔥推送…

高性能服务器为什么需要内存池?

C/C程序为什么比起其它语言开发的程序效率要高,一个很重要的原因就是可以直接操作内存,今天就来讲讲为什么需要内存池的技术。 从一个示例开始 先看下面两段代码,都是去重复的创建和删除对象0x5FFFFF次,他们的执行后的效率怎么样…

DIP第7章知识点

文章目录 7.3 相关7.5 基图像7.6 傅里叶相关变换7.6.1 离散哈特利变换7.6.3 离散正弦变换 DIP的其他章节都好复习,唯独就这个第7章小波变换。复习起来十分头大,所以我开始写他的课后题,雾。 7.3 相关 已知两个连续函数 f ( x ) f(x) f(x) …

一篇博客教会你怎么使用Docker安装Redis

文章目录 1、搜索镜像2、拉取镜像3、下载配置文件4、修改配置文件5、启动容器 今天我们学习使用 Docker 安装 Redis。 1、搜索镜像 docker search redis2、拉取镜像 docker pull redis3、下载配置文件 wget http://download.redis.io/redis-stable/redis.conf下载的配置文件…

云原生Docker容器管理

docker容器相当于一个进程,性能接近于原生,几乎没有损耗; docker容器在单台主机上支持的数量成百上千; 容器与容器之间相互隔离; 镜像是创建容器的基础,可以理解镜像为一个压缩包 docker容器的管理 容器…

彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法

原本这篇文章是打算叫「假如我是彩票系统开发者」,但细想一下,如果在文章中引用太多的 JavaScript 的话,反而不是那么纯粹,毕竟也只是我的一厢情愿,彩票开发也不全如本文所讲,有所误导的话便也是得不偿失了…

理解 Java 关键字 final

原文链接 理解 Java 关键字 final final可以用来干什么 final是Java中非常常见的一个关键字,可以说每天都在使用它,虽然常见,但却也不见得都那么显而易见,今天就来研究一下final,以加深对它的理解和更合理的运用。 修…

gitstack使用教程

一、下载及安装 下载地址:https://gitstack.com/download/?spma2c4e.10696291.0.0.6d4c19a40qOauc 支持操作系统列表 本文基于2.3.12版本 下载完成后安装,默认安装路径为:c:\GitStack,安装过程中,gitstack服务会启…

医学图像分割 nnUNetV2 分割自定义2d数据集

文章目录 1 环境安装(Pytorch)1.1 安装conda1.1 安装pytorch1.3 安装nnUNet1.4 安装隐藏层(可选) 2 配置自定义数据集2.1 数据集格式2.2 创建需要目录2.3 数据格式转换2.3.1 修改路径与数据集名称2.3.2 修改训练集与测试集2.3.3 修改掩码所在的文件夹&am…

python基础----05-----函数的多返回值、函数的多种参数使用形式、函数作为参数传递、lambda匿名函数

一 函数的多返回值 if __name__ __main__:# 演示使用多个变量,接收多个返回值def test_return ():return 1,hello,Truex,y,z test_return()print(x)print(y)print(z)1helloTrue二 函数的多种参数使用形式 分为以下四种。 2.1 位置参数 位置参数调用函数时根据…

卡尔曼滤波与组合导航原理(五)序贯Kalman滤波

量测维数很高,而且能写成很多分量,每一个分量可以看成一个小量测,可以序贯进行量测更新 优点是:计算快,数字稳定性更好,我们知道矩阵求逆是和维数的三次方成正比,分成小矩阵求逆快(都…

自学大语言模型之Bert和GPT的区别

Bert和GPT的区别 起源 2018 年,Google 首次推出 BERT(Bidirectional Encoder Representations from Transformers)。该模型是在大量文本语料库上结合无监督和监督学习进行训练的。 BERT 的目标是创建一种语言模型,可以理解句子中…