ChatGLM搭建记录

2023-10-26

ChatGLM

一、基本流程

0、学习初衷

1、ChatGLM简介

github地址:https://github.com/THUDM/ChatGLM-6B
ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。

2、流程

2.0 基础

  1. 安装好了git,能访问GitHub。(会使用基本git命令行)
  2. 安装好了anaconda。(会基本的pip、conda命令行)

如果你的电脑完全没有配置过python环境,你需要先学会如何安装Anaconda等来配置python环境,这里因为我以前已经安装过,所以直接从搭建PyTorch环境开始。

  1. 合适的显卡驱动版本

显卡驱动,我以前玩游戏更新过,按理说有显卡的电脑都会有,可以更新一下。

2·1 搭建PyTorch环境

官方文档是默认你配置好环境了的。

我是先看官方文档把文件clone后,跑代码时报错

Torch not compiled with CUDA enabled
搜索知道,没安装环境

2·1·1 安装CUDA

  • 这里CUDA的版本建议先去PyTorch官网(https://pytorch.org/get-started/locally/)上查看。

请添加图片描述

  • 这里找到PyTorch有CUDA11.8版本,所以建议下载11.8版本(CUDA按理说是向下兼容的,但直接下对应版本会更保险一点吧)。

    CUDA安装时如果已经安装了高版本,想降版本时,可以直接下载低版本的CUDA,按流程走一次就行。

  • 去到CUDA官网下载对应版本CUDA https://developer.nvidia.com/cuda-toolkit-archive

    下载后是一个安装程序(安装步骤可以看参考安装办法下载2<>)

2.1.2 安装CuDNN

  • CuDNN下载后是一个一个压缩包,使用步骤看参考安装办法下载2
    
    

2.1.3 用conda创建新的环境安装对应环境

这里注意python的版本选择

  • 使用anaconda prompt创建环境。(之前用vscode的终端键入指令,不太好使)
    请添加图片描述

  • 创建新环境

    conda create -n 环境名字(按喜好,用英文) python=版本号

  • 激活 conda activate 环境名字

2.1.4 最后安装PyTorch

pytorch选择对应版本的指令然后键入激活环境后的anaconda prompt中,等待下载(如果慢,可以找找换源,或者尝试参考网站1的办法)
请添加图片描述

安装完成后
运行py脚本测试安装结果

import torch
print(torch.__version__)
print("是否可用:", torch.cuda.is_available())        # 查看GPU是否可用

如果是否可用返回true,则安装成功。如果返回false,可能是安装成了cpu版本的Pytorch(我就是)。可以卸载Pytorch后重新安装(可以看参考网站3)

2.1.5 参考网站(驱动问题可以看这个)

  • 防坑指南-pytorch-GPU下载安装 https://zhuanlan.zhihu.com/p/454839461
  • Cuda和cuDNN安装教程(超级详细)https://blog.csdn.net/jhsignal/article/details/111401628
  • pytorch安装及卸载https://blog.csdn.net/mao_hui_fei/article/details/112078113

2·2 安装 ChatGLM

如果安装好pytorch环境之后跟着官网的流程来就行,是中文的,对中国人非常友好

全程都下载在新环境里面。

  • 下载代码
    git clone到文件夹
git clone https://github.com/THUDM/ChatGLM-6B.git

运行结束后,在终端切换到对应文件夹里面

  • 安装Gridio
# 安装gradio用于启动图形化web界面
pip install gradio
  • 安装依赖(会自动下载ChatGLM-6B文件里面requirements.txt里的依赖,注意要切换到ChatGLM文件里面)
# 安装运行依赖
pip install -r requirements.txt
  • 运行效果
    我使用的时vscode编译python

    vs code切换环境按shift+ctrl+p,点击pyton解释器,选择之前创建的环境(切换到对应的环境才能使用环境里面下载的包)

直接运行web_demo.py等待一段时间后就可以使用了

科学上网时无法运行

  • GPU运行、CPU运行
    可能会遇见显存不够的报错。这里可以切换model更改代码的
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()

GPU

# FP16精度加载,需要13G显存
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
# int8精度加载,需要10G显存
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().quantize(8).cuda()
# int4精度加载,需要6G显存
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().quantize(4).cuda()

CPU

#32G内存
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).float()
#16G内存
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).bfloat16()
  • 结果
    打开生成的网址就可以开始问问题了。
    请添加图片描述

二、难点

1、显卡驱动的更新、CUDA、CuDNN版本的选择

2、下载GPU版本的PyTorch(使用GPU跑代码时需要)

3、网络问题

三、拓展知识

1、GLM模型

2、PyTorch是什么

3、CUDA、CuDNN是什么

4、Gridio是什么

5、ChatGLM的更多了解

四、疑惑

日后将进一步阅读代码
1、运行chatglm后会在用户目录下出现一个大的缓存文件.cache里面有一个叫 huggingface的文件,会特别占用C盘内存。
测试后是,每回答一个问题就会消耗内存。
2、过几天后突然报错cchadet库,pip下载后解决,换源下载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ChatGLM搭建记录 的相关文章

  • 如何在 Debian 上的 virtualenv 中安装 numpy?

    注 参见这另一篇文章 https stackoverflow com questions 6442754 how to install h5py numpylibhdf5 as non root on a debian linux syst
  • str.translate 与 str.replace - 何时使用哪一个?

    何时以及为什么使用前者而不是后者 反之亦然 目前尚不完全清楚为什么有些人使用前者以及为什么有些人使用后者 它们有不同的目的 translate只能用任意字符串替换单个字符 但一次调用可以执行多次替换 它的参数是一个特殊的表 它将单个字符映射
  • 通过 python 中的另外两个修改数组[重复]

    这个问题在这里已经有答案了 假设我们有三个一维数组 A 长度为 5 B 长度相同 示例中为5 C 更长 比如长度为 100 C最初用零填充 A给出索引C应更改的元素 它们可能会重复 以及B给出应添加到初始零的值C 例如 如果A 1 3 3
  • 为什么在访问 Python 对象属性时使用 getattr() 而不是 __dict__ ?

    在具有一定程度的 Python 对象自省的源代码示例和 SO 答案中 常见的模式是 getattr some object attribute name string 是否有理由优先选择这种模式 some object dict attri
  • 如何在Windows中的Python 3.9下pip安装pickle?

    我需要pickle https docs python org 3 9 library pickle html module pickle包安装在我的下面Python 3 9在 Windows 10 下 我尝试过的 当尝试与pip inst
  • Django 多对多关系(类别)

    我的目标是向我的 Post 模型添加类别 我希望以后能够按不同类别 有时是多个类别 查询所有帖子 模型 py class Category models Model categories 1 red 2 blue 3 black title
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 高级描述熊猫

    有没有像 pandas 那样更高级的功能 通常我会继续这样 r pd DataFrame np random randn 1000 columns A r describe 我会得到一份很好的总结 就像这样 A count 1000 000
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • 如何用正则表达式替换多个匹配/组?

    通常我们会编写以下内容来替换一场比赛 namesRegex re compile r is life re I replaced namesRegex sub r butter There is no life in the void pr
  • Python-验证我的文档 xls 中是否存在工作表

    我正在尝试在空闲时间设计一个小程序 加载 xls 文件 然后在要扫描的文档中选择一张纸 步骤1 用户导入 xls文件 导入程序后检查文件是否存在 我能做到的 第 2 步 我要求用户提供要分析的文档表 xls 的名称 这就是它停止的地方 该程
  • 无法使用 python rasterio、gdal 打开 jp2 (来自哨兵)

    我试图在 python 中将 jp2 栅格产品作为栅格打开 但当我们使用 raterio 和 gdal 包时没有成功 我收到此错误 RasterioIOError b4 jp2 not recognized as a supported f
  • 是否可以在Python中将日+月(不是年)与当前日+月进行比较?

    我正在获取 5 月 10 日 格式的数据 我试图弄清楚它是今年还是明年 该日期仅一年 因此 5 月 10 日表示 2015 年 5 月 10 日 而 5 月 20 日表示 2014 年 5 月 20 日 为此 我想将字符串转换为日期格式并进
  • 如何按 pandas 中的值对系列进行分组?

    我现在有一只熊猫Series与数据类型Timestamp 我想按日期对其进行分组 并且每组中有许多行具有不同的时间 看似显而易见的方法类似于 grouped s groupby lambda x x date 然而 熊猫的groupby按索
  • 无法导入QUERY_TERMS

    我正在运行一个网站Python and Django Django filters 2 1 installed Django 2 1 installed 当我运行时 我收到以下错误 importError Could not import
  • 如何通过 Python Requests 库使用基本 HTTP 身份验证?

    我正在尝试在 Python 中使用基本的 HTTP 身份验证 我正在使用Requests https docs python requests org 图书馆 auth requests post http hostname auth HT
  • Python 2.7 缩进错误[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题是由拼写错误或无法再重现的问题引起的 虽然类似的问题可能是on topic help on topic在这里 这个问题的解决方式不
  • 如何展平解析树并存储在字符串中以进行进一步的字符串操作 python nltk

    我正在尝试从树结构中获取扁平树 如下所示 我想将整个树放在一个字符串中 就像没有检测到坏树错误一样 S NP SBJ NP DT The JJ high JJ seven day PP IN of NP DT the CD 400 NNS
  • 如何使用 enumerate 来倒数?

    letters a b c 假设这是我的清单 在哪里for i letter in enumerate letters 将会 0 a 1 b 2 c 我怎样才能让它向后枚举 如 2 a 1 b 0 c 这是一个很好的解决方案并且工作完美 i
  • Python 相当于 Scala 案例类

    Python 中是否有与 Scala 的 Case Class 等效的东西 就像自动生成分配给字段而无需编写样板的构造函数一样 当前执行此操作的现代方法 从 Python 3 7 开始 是使用数据类 https www python org

随机推荐

  • peewee-async使用描述

    1 peewee async是一个为peewee ORM 提供由asyncio支持的异步io库 在单独使用peewee连接池连接时 同时使用到了async和await协程 这样操作会阻塞整个进程 因为tornado是单进程 必须数据库也使用
  • 数据库的简介与类型 #CSDN博文精选# #IT技术# #数据库#

    大家好 小C将继续与你们见面 带来精选的CSDN博文 又到周一啦 上周的系统化学习专栏已经结束 我们总共一起学习了20篇文章 这周将开启全新专栏 放假不停学 全栈工程师养成记 在这里 你将收获 将系统化学习理论运用于实践 系统学习IT技术
  • 高通 AR Unity 虚拟按钮

    1 虚拟按钮是图像上的目标 用户可以在现实世界中触摸 以触发一个动作的 热点 现有的图像目标的一个实例的VirtualButton预制拖动到场景中添加虚拟按键 平移和缩放按钮 以匹配所需的位置 并给它一个名字 虚拟的按钮添加这样写入到con
  • 计算机视觉概述

    关注公众号 CV算法恩仇录 本文介绍了计算机视觉的主要任务及应用 全文大约 3500 字 阅读时间 10 分钟 人们或许没有意识到自己的视觉系统是如此的强大 婴儿在出生几个小时后能识别出母亲的容貌 在大雾的天气 学生看见朦胧的身体形态 能辨
  • v-viewer 插件图片点击放大预览的几种使用方法

    官网git地址 https github com mirari v viewer 最终效果如下 ps 按钮样式都是可以根据自己需求调整的 第一种使用方法 支持UMD用法 建议把v viewer相关的js和css文件下载到本地引用 可以到上面
  • set容器、map容器

    set multiset 容器 set基本概念 简介 所有元素都会在插入时自动被排序 本质 set multiset属于关联式容器 底层结构是用二叉树实现 set和multiset区别 set不允许容器中有重复的元素 multiset允许容
  • elk笔记23--定期清理索引

    elk笔记23 定期清理索引 1 介绍 2 方案 代码 2 1 方案介绍 2 2 代码 2 3 测试 3 注意事项 4 说明 1 介绍 在生产环境中 如果日志量过大 就会导致集群持续产生很多索引 占用很多存储空间 因此需要定期清理索引 确保
  • 套圈·分治

    套圈 题目信息 输入 测试样例 解答 想法 题目信息 Have you ever played quoit in a playground Quoit is a game in which flat rings are pitched at
  • 闭环步进与伺服电机差异

    当给步进电机配备编码器闭环控制后 从广义上来看 闭环步进电机和伺服电机两者是没有什么大的区别 但是 要详细区分闭环步进电机和伺服电机的不同之处 你需要先了解一下伺服电机和步进电机的差异 闭环步进电机是在步进电机上加装了高精度的编码器 用伺服
  • 理解扩散模型:Diffusion Models & DDPM

    引言 在前面的博客中 我们讨论了生成模型VAE和GAN 近年来 新的生成模型 扩散模型受到越来越多的关注 因此值得好好去研究一番 扩散模型 Diffusion Models 最早由 2 于2015年提出 但直到2020年论文 3 发表之后才
  • 不断发展中的自然语言处理技术,会在未来消灭“笔”和“键盘”吗?

    花满楼 发布于2014 07 20 23 11 00 目前 Siri 和 Google Now 的语音识别技术虽然还不完善 但在未来却很可能威胁到文字的地位 我们手写或者打字 在当下已经成为了无比繁重的劳动 不断的输入各种文字信息 在网页上
  • 快手20230807提前批一面

    Q and A 面试官 你是专硕还是学硕 能不能让实习 研究方向 面试官 项目基于什么背景做的 xxx 面试官 介绍一下框架 xxxx 面试官 里面中用了什么技术 首先的话 服务层使用了springboot 并且使用了mp 持久化使用了my
  • angular7主题样式在线切换

    参考ng alain和delon 思路就是动态加载css文件 代码实现 写两套less文件 分别为light less和dark less 用相关插件将less文件转为一个js对象 less vars to js 插件 function g
  • Road Construction 【POJ - 3352】【Tarjan边双连通】

    题目链接 题意 给一个无向连通图 至少添加几条边使得去掉图中任意一条边不改变图的连通性 即使得它变为边双连通图 思路 就是去求一个缩点之后求度为1的点的个数 然后用 ans 1 2就可以得到最后的答案了 include
  • 计算机图像显示原理与BMP图像文件格式

    本篇文章详细讲述图像文件 里面有一些阐述为个人理解 如有不对的地方欢迎指正 后续会修正补全 计算机图像显示原理与BMP图像的文件格式 一 计算机图像显示原理简述 1 计算机图像分类 2 显示 3 彩色图转灰白图原理 二 BMP图像 1 BM
  • LeetCode题目笔记——面试题 02.05. 链表求和

    文章目录 题目描述 题目难度 中等 方法一 模拟 代码 C 代码 Python 方法二 递归 代码 C 进阶 借用栈或者先反转原链表 总结 题目描述 给定两个用链表表示的整数 每个节点包含一个数位 这些数位是反向存放的 也就是个位排在链表首
  • C语言用一种比较特别的方法打印金字塔

    本方法的思想是 先打印最左边的空格部分 然后再打印金字塔 打印金字塔方法是 把 和空格都考虑进去 然后再逐行进行打印每行 每行中奇数位打印 偶数位打印空格 include
  • ubuntu18.04 littlevgl运行环境搭建

    1 下载代码 git clone https gitclone com github com littlevgl pc simulator git cd pc simulator git submodule update init 2 编译
  • Linux常用技巧

    1 cd命令 用于切换当前目录 它的参数是要切换到的目录的路径 可以是绝对路径 也可以是相对路径 cd user1 进入user1用户的主目录 cd 返回上次所在的目录 2 pwd命令 显示工作路径 3 ls命令 查看文件与目录的命令 li
  • ChatGLM搭建记录

    ChatGLM 一 基本流程 0 学习初衷 1 ChatGLM简介 github地址 https github com THUDM ChatGLM 6B ChatGLM 6B 是一个开源的 支持中英双语的对话语言模型 基于 General