1660s部署ChatGLM3-6B

news2024/12/26 11:34:02

用Chatgpt一段时间了,最近在想有没有离线可以装在本机的chatgpt,这样哪天openai把咱们渠道堵得死死的之后,咱们还有东西可用。网上一搜还真有,比如这个ChatGLM3,我用的就是ChatGLM3-6B。

​​​​​​​官网有详细的部署教程,但实际操作的时候还是有点问题。

下面是我的部署过程:

我的环境:

windows 11 + 12400 + 32G内存 + 1660s显卡(6G显存)

1.下载代码
# 先克隆代码
git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3
2.安装Conda

conda用来隔离环境,比如电脑上装了python3.11,这里需要使用python3.10,就可以用conda来隔离。

conda下载地址:Conda Documentation — conda 24.1.2 documentation

安装完之后,在命令行中输入conda,如果找不到命令,可以在开始菜单中找下面这个:

进入conda命令行之后,执行下面的命令,意思是创建chatglm3-demo的隔离环境,使用python3.10

conda create -n chatglm3-demo python=3.10
conda activate chatglm3-demo
3.安装python的依赖包

在conda命令行中切换到ChatGLM3目录

切换目录如下所示:

执行下面的代码:

cd ChatGLM3
# 先安装ChatGLM3的依赖,可能时间比较长。
# 可以指定清华的源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
pip install -r requirements.txt
# 再切换到composite_demo下面安装依赖,因为我们最终要跑的web页面在这个下面
cd composite_demo
pip install -r requirements.txt
4.安装pytorch

官方教程里面没有提这个,我按照官方教程弄完之后,发现走的是cpu,而不是gpu,因为看任务管理器显卡没反应,而且对话半天出不来结果。

这个pytorch默认调用的cpu,可以用下面这个命令查看:

# 可以看到显示的是cpu
$ python -c "import torch; print(torch.__version__)"
2.2.0+cpu

# 可以看到cuda不可用,就是nvidia的cuda不可用,就是显卡不可用
$ python -c "import torch; print(torch.cuda.is_available())"
False

PyTorch可以到 pytorch官网查看对应的版本

可以在红框里面选择操作系统、语言等,有个要注意就是CUDA的版本,可以用下面的命令获取:

nvidia-smi

比如我这边的版本就是12.4,所以选择pytorch中的CUDA 12.1

最终得到的绿框的内容,复制到本机执行就可以了。这个包很大,有2.5G。它会自动卸载原来的cpu版本的包,再安装GPU版本的包。

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

安装完之后,再查看下:

# 可以看到已经变成cu121
$ python -c "import torch; print(torch.__version__)"
2.2.0+cu121

# 可以看到cuda变成True,表示可用
$ python -c "import torch; print(torch.cuda.is_available())"
True
5.修改源码

官方描述默认要13GB显存,如果GPU显存有限,改成它下面这样。

实测,改成官方这样之后报错:RuntimeError: Library cublasLt is not initialized

由于我之前调试过stable-diffusion-webui,当时是设置的一半显存,于是我就在想这个改成一半是不是也可以?

要改的就是下面这两行代码:

class HFClient(Client):
    def __init__(self, model_path: str, tokenizer_path: str, pt_checkpoint: str = None):
        self.model_path = model_path
        self.tokenizer = AutoTokenizer.from_pretrained(tokenizer_path, trust_remote_code=True)

        if pt_checkpoint is not None and os.path.exists(pt_checkpoint):
            config = AutoConfig.from_pretrained(
                model_path,
                trust_remote_code=True,
                pre_seq_len=PRE_SEQ_LEN
            )
            # self.model = AutoModel.from_pretrained(
            #     model_path,
            #     trust_remote_code=True,
            #     config=config,
            #     device_map="auto").eval()
            self.model = AutoModel.from_pretrained(
                model_path,
                trust_remote_code=True,
                config=config).half().cuda().eval()
            # add .quantize(4).cuda() before .eval() and remove device_map="auto" to use int4 model
            prefix_state_dict = torch.load(os.path.join(pt_checkpoint, "pytorch_model.bin"))
            new_prefix_state_dict = {}
            for k, v in prefix_state_dict.items():
                if k.startswith("transformer.prefix_encoder."):
                    new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v
            print("Loaded from pt checkpoints", new_prefix_state_dict.keys())
            self.model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)
        else:
            self.model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True).half().cuda().eval()
            # add .quantize(4).cuda() before .eval() and remove device_map="auto" to use int4 model

然后再尝试运行,果然好了。(PS:第一次启动的时候会下载module,一共7个,每个1G多,比较慢)

运行代码切换到ChatGLM3\composite_demo,执行下面的命令:

streamlit run main.py

 最终效果:

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

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

相关文章

鸿蒙视频播放器,主要包括视频获取和视频播放功能:

鸿蒙视频播放器,主要包括视频获取和视频播放功能: 1 获取本地视频或者网络视频。 2 通过media.createAVPlayer创建播放器AVPlayer,然后进行视频播放。 3 通过VideoController进行AVPlayerState的状态管理,如开始,停止&…

Dom节点继承树基本操作

遍历节点树 基于元素节点树的遍历 parcntElcrmcnt -> 返回当前元素的父元秦节点 (IE不兼容)children ->只返回当前元素的元素子节点node.childFlement(ount nodechildren.length当前元素节点的子元素(IE不兼容)firstElementChild->返回的是第一个元素节点(IE不兼容)l…

ONLYOFFICE编辑器升级大揭秘:v8.0版新特性实测与评价

ONLYOFFICE编辑器升级大揭秘:v8.0版新特性实测与评价 一个人简介二前言三操作步骤创建房间我的文档 四开发人员工具应用程序接口Javascript开发工具包插件SDK网络钩子 五测评总结六体验地址 一个人简介 🏘️🏘️个人主页:以山河作…

探索亚信安慧AntDB的数据库管理之道

AntDB数据库管理系统以其卓越的性能和稳定性成为众多用户的选择之一。这款系统采用了影响力大、社区繁荣、开放度高、生态增长迅速的PG内核,为用户提供了稳定可靠的数据库解决方案。 数据库的稳定性对于用户来说至关重要,特别是在面对大规模数据处理和高…

机房预约系统(个人学习笔记黑马学习)

1、机房预约系统需求 1.1系统简介 学校现有几个规格不同的机房,由于使用时经常出现“撞车“现象,现开发一套机房预约系统,解决这一问题。 1.2身份简介 分别有三种身份使用该程序 学生代表:申请使用机房教师:审核学生的预约申请管理员:给学生、教师创建账…

用Jmeter对数据库执行压力测试

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

HarmonyOS—LocalStorage:页面级UI状态存储

LocalStorage是页面级的UI状态存储,通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility实例内,在页面间共享状态。 本文仅介绍LocalStorage使用场景和相关的装饰器:LocalStorageProp和LocalS…

Redis之缓存雪崩问题解决方案

文章目录 一、书接上文二、介绍三、解决方案1. 锁2. 不同的过期时间3. 缓存预热和定时任务 一、书接上文 Redis之缓存穿透问题解决方案实践SpringBoot3Docker 二、介绍 缓存雪崩,指大量的缓存失效,大量的请求又同时落在数据库。主要的一种诱因是key设…

接口请求重试的8种方法

转载文章:https://blog.csdn.net/qq_34162294/article/details/134131439 文章目录 1.前言2.几种方法 2.1循环重试2.2 使用Spring Retry库 2.2.1 添加 Maven 依赖2.2.2 添加 EnableRetry 注解启用重试功能2.2.3 在需要重试的方法上添加 Retryable 注解2.2.4. 还可以…

寒心,成立 25 年的车企迎来了首次裁员

车企 随着春节假期结束,各行各业也正式复工,但车企却未能迎来属于它们的"新年新气象"。 早在年前(12 月),就有新闻爆出,知名传统车企「广汽本田」为了加快转向电动车市场,宣布解雇中国…

洛谷 P1075 [NOIP2012 普及组] 质因数分解

参考代码and代码解读 #include<bits/stdc.h>//万能头文件 using namespace std; int main() { int n; cin>>n;//输入这个数 for (int i2;i<n;i)//用for循环查找最小的因数 if (n%i0)//如果i是n的因数 { cout<<n/i…

如何在STM32微控制器中使用外部SDRAM

如何在STM32微控制器中使用外部SDRAM STM32微控制器因其卓越的性能、灵活的内存配置选项以及广泛的应用领域而受到工程师们的青睐。在许多高级应用中&#xff0c;如图像处理、大数据分析和复杂算法运算&#xff0c;内部存储资源可能不足以满足需求。这时&#xff0c;通过添加外…

Centos安装图形化桌面环境

1.使用root远程登录最小化安装的虚拟机 2.执行命令yum groupinstall "X Window System" 这是安装窗口系统 3.执行命令yum grouplist" 检查安装的软件可可以安装的软件 4.执行命令yum groupinstall "Server with GUI" 这是安装图形化界面 5.执行命令sy…

C#写的一个计算DCI-P3色域和SRGB的小工具

文章最后附带分享链接与提取码 方便需要测试屏幕的小伙伴&#xff0c;只需要输入RGB就能得到覆盖率与比率&#xff0c;W计算色温&#xff0c;不测也要写上&#xff0c;不然会报错 链接&#xff1a;https://pan.baidu.com/s/1wdmAwmwiXjNvn1tGsvy0HA 提取码&#xff1a;1234

NAS系统折腾记 | 黑群晖系统快速制作英特尔核显补丁支持硬解

常见的群晖机器&#xff0c;例如 DS920&#xff0c;DS918&#xff0c;系统内核一直是 4.4 的&#xff0c;而这个内核自带的核显驱动最高支持到 9 代&#xff0c;支持的CPU型号分别是J3455&#xff08;DS918&#xff09;和J4155&#xff08;DS920&#xff09;。而目前DIY搭建NAS…

BioTech - 大型蛋白质复合物的组装流程 (CombFold)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/136187314 CombFold是用于预测大型蛋白质复合物结构的组合和分层组装算法&#xff0c;利用AlphaFold2预测的亚基之间的成对相互作用。CombFold的组…

golang实现图片上传

实现个图片上传&#xff0c;记录一下 我这里是采用的调试工具&#xff0c;apipost去直接上传的&#xff0c;参数值选择file即可 上传的图片&#xff0c;两种方式&#xff0c;一是用原来的文件名&#xff0c;直接file.Filename即可。 func Upload(c *gin.Context) {file, _ : …

基于SSM实现的人事管理系统(源代码+数据库脚本)

文章目录 系统介绍技术选型成果展示账号地址及其他说明源码获取 系统介绍 系统演示 微信视频号&#xff1a;【全栈小白】查看视频 基于SSM实现的人事管理系统使用JavaEE开发&#xff0c;基于SpringMVCMybatis框架&#xff0c;该项目包含了用户管理、部门管理、职位管理、员工…

为什么在MOS管开关电路设计中使用三极管容易烧坏?

MOS管作为一种常用的开关元件&#xff0c;具有低导通电阻、高开关速度和低功耗等优点&#xff0c;因此在许多电子设备中广泛应用。然而&#xff0c;在一些特殊情况下&#xff0c;我们需要在MOS管控制电路中加入三极管来实现一些特殊功能。然而&#xff0c;不同于MOS管&#xff…

Sora:视频生成模型作为世界模拟器

我们探索了视频数据上生成模型的大规模训练。具体来说&#xff0c;我们在可变持续时间、分辨率和长宽比的视频和图像上联合训练文本条件扩散模型。我们利用了一个在视频和图像潜在码的时空块上操作的变压器架构。我们规模最大的模型 Sora 能够生成一分钟的高保真视频。我们的结…