☰
本地部署ChatGLM-6B实战:从零配置CUDA环境到量化运行
2026/10/22 3:25:50 网站建设 项目流程

本地跑大模型,听起来特别硬核,实际上拆开就是三件事:装好环境、拿到模型、跑脚本。真正劝退人的是环境这一关——网上教程一上来就是 NVIDIA 驱动、CUDA Toolkit、cuDNN、Anaconda、PyTorch,名词堆在一起,小白直接关页面。这篇我从零部署 ChatGLM-6B 的完整实录,就是按“照做就能成”的标准写的:每一步都有命令、有验证方法、有出错后的补救手段。只要你的显卡有 8GB 以上显存、硬盘能腾出 30GB 左右的空间,半天之内让一个能本地对话的大模型跑起来,是完全可以做到的。这篇攻略适合完全不懂环境配置的初学者,也能帮那些平时只跑 CPU 版模型、第一次上 GPU 的同学少走弯路。

1. 动手前先盘家底:显存、内存和硬盘怎么算

1.1 为什么入门选 ChatGLM-6B

选 ChatGLM-6B 作为第一个本地部署的大模型,不是因为它性能最强,而是因为它“刚好够得着”。6B 参数量意味着它的权重文件用半精度存储时大约 12GB,配合量化手段可以压到 8GB 甚至 6GB 显存运行,这是普通消费级显卡能接受的量级。同时这个模型的资料相对齐全,有大量踩坑记录可以参考,就算出了错也能快速搜到解决方案。相比之下,一上来就部署 13B、30B 甚至更大参数的模型,硬件门槛和疑难杂症排查成本会成倍上升,很容易让新手在第一步就放弃。

1.2 显存需求到底怎么算

显存是这个项目的硬性指标。ChatGLM-6B 的权重是 60 亿参数,以 FP16 半精度存储时每个参数占 2 字节,单是权重文件就需要约 12GB。推理时还要存 KV Cache 和中间激活值,大概额外占 1GB 到 2GB,所以官方建议 13GB 以上显存跑完整 FP16 版本。如果你的显卡只有 8GB,就需要走量化路线,把权重压成 8-bit 或 4-bit,对应官方说法是:8GB 显存可以跑 8-bit 量化版本,6GB 显存可以跑 4-bit 量化版本。

这里有个很容易被忽略的概念:显存和内存是两回事。显存是显卡上的专用存储,内存是主板上的系统内存。模型加载时会把文件先完整读入系统内存,再把张量搬到显存里计算,所以系统内存小于 16GB 会非常吃力,建议至少 16GB,最好 32GB。很多部署失败不是显存不够,而是内存先爆了,这个坑我踩过。

1.3 内存、硬盘和 CPU 的底线配置

硬性配置清单可以归纳成一张表,你可以直接对照:

项目最低要求推荐配置说明
显卡显存6GB(4-bit 量化)12GB 以上(FP16)显存决定能不能跑,以及能跑多大量化
系统内存16GB32GB加载模型和运行框架都要占内存
硬盘30GB 剩余50GB 以上模型约 12GB,环境和依赖约 10GB,还要留缓存空间
显卡品牌NVIDIANVIDIA 20 系以上CUDA 生态对 NVIDIA 支持最完善,A 卡和核显基本不用考虑

显卡方面,NVIDIA 的 GTX 16 系、RTX 20/30/40 系列都可以,显存大小决定你能用哪个量化档位。CPU 反而没那么关键,因为推理大头在显卡上,CPU 只负责调度和数据预处理,只要是近五六年的主流处理器都能带动,哪怕是 AMD 的 CPU 也没问题,只要显卡是 NVIDIA 就行。

1.4 两分钟确认自己的配置

不想猜来猜去的话,直接在系统里看:

  • Windows 下按Ctrl + Shift + Esc打开任务管理器,切到“性能”选项卡,左侧点 GPU,右下角能看到“专用 GPU 内存”,这就是显卡显存。
  • 打开命令行(Win 键输入 cmd 回车),输入nvidia-smi,能看到 GPU 型号、显存总量、当前占用,以及驱动支持的 CUDA 版本。
  • 磁盘剩余空间直接在“此电脑”里看,装大模型那个盘至少留出 30GB。
  • 系统内存在任务管理器“性能”->“内存”里看。

确认完这三项,再决定要不要继续。如果显存只有 4GB,确实不太适合跑 6B 模型,硬要折腾体验会非常差,不如先考虑换卡,或者把目标换成更小的模型。如果显存 6GB 到 8GB,没问题,用量化版本就行,后面的章节里我会专门说。

2. CUDA 从零配置:驱动、Runtime、Toolkit 到底装哪个

2.1 先把三个概念拆开

很多人一听到 CUDA 就头大,其实它不是一个装在系统里的“软件包”,而是一整套并行计算生态,拆开看主要涉及三个名词:

  • NVIDIA 驱动(Driver):让操作系统认识显卡,属于最底层的基础设施。只要驱动存在,显卡就能工作。
  • CUDA Runtime:程序运行时需要的库文件,PyTorch 官方安装包一般自带。
  • CUDA Toolkit:完整的开发工具集,包含编译器nvcc、调试工具、头文件等,主要是为了自己编译 CUDA 代码时用的。

对小白来说,最友好的结论是:大多数情况下你只需要保证显卡驱动够新,CUDA Toolkit 和 cuDNN 都不需要单独安装。因为从 PyTorch 官网安装的 GPU 版 wheel 包,已经内置了对应版本的 CUDA Runtime 和 cuDNN,跑模型时直接调用,不需要你去系统层面再装一遍。很多人卡在这一步,其实是在做一件完全没必要的事。

2.2 驱动要新,但不要乱到版本打架

显卡驱动是必须更新的,建议到 NVIDIA 官网下载对应型号的最新正式版驱动。注意看nvidia-smi输出右上角的 “CUDA Version”,它表示“当前驱动最高支持的 CUDA 版本”。比如显示CUDA Version:12.4,说明驱动允许程序使用最高 12.4 的 CUDA Runtime,PyTorch 装的是 cu118 或 cu121,都会小于或等于这个值,就能正常匹配。

这里有个常见误解:看到nvidia-smi里显示 CUDA 12.4,就以为系统已经装了 CUDA 12.4。不是的,那只是驱动的能力上限,不代表系统里有这个运行库。如果没有安装 CUDA Toolkit,在命令行敲nvcc -V会提示找不到命令,这是正常的,不要慌。驱动保持近两年内的版本,基本不会遇到兼容性问题。

2.3 CUDA Toolkit 和 cuDNN 要不要单独装

不需要。PyTorch 官方预编译的 GPU wheel 包里已经捆绑了 CUDA Runtime 和 cuDNN,你在虚拟环境里import torch之后,它自己会到包内找对应的动态库,不依赖全局安装。只有当你需要自己编译一些 CUDA 扩展(比如某些特殊算子),或者开发 CUDA 程序时,才需要装完整 Toolkit。

如果你确实要装,记住版本别乱选:PyTorch 2.0 系列官方主要对应 cu117、cu118,PyTorch 2.1 之后还有 cu121,你装的 Toolkit 大版本不能比驱动支持的 CUDA 版本更高。但前面说了,大部分读者走不到这一步,直接跳过最省事。

2.4 用 nvidia-smi 和 nvcc 验证环境

命令能看到什么说明
nvidia-smiGPU 型号、驱动版本、显存使用情况、CUDA 版本上限显卡驱动工作正常的直接证据
nvcc -V输出 CUDA 编译器版本信息,或提示找不到命令没装 Toolkit 时找不到是正常的,不影响跑 PyTorch

装完驱动后,重启一下电脑,然后跑一遍nvidia-smi,确认能看到自己的显卡型号和显存大小。只要这一步正常,CUDA 生态的底层就已经没问题了,后面的环境搭建才会顺。

3. 用 Anaconda 搭一个不会搞乱系统的 Python 环境

3.1 安装 Anaconda 并创建虚拟环境

最推荐的方式是先把 Anaconda 装好。Anaconda 是一个 Python 环境管理工具,核心价值是“隔离”:每个项目可以有自己的 Python 版本和依赖包,互不干扰。比如你另一个项目用 Python 3.9,这个是 3.10,不会打架。

安装完成后,打开 Anaconda Prompt(命令行窗口),创建虚拟环境:

conda create -n glm-env python=3.10

这个名字自定义就行,我习惯用glm-env,叫chatglm也可以。回车后会提示下载安装,输入 y 确认。创建完激活环境:

conda activate glm-env

激活后命令行开头会出现(glm-env),表示你现在就在这个虚拟环境里,后续安装的包都会装到这里,不会污染系统 Python。选 3.10 是因为 ChatGLM-6B 的依赖如 cpm-kernels 更新较慢,版本太新的 Python 可能出现编译不兼容,3.10 是经过验证的稳妥选择。

3.2 先把 pip 源设置好

这一步看起来不起眼,但直接决定你能不能顺利装完依赖。pip 默认从海外源下载 Python 包,国内网络环境下经常超时。我建议先设置清华源:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

设置完之后,pip 安装包时会自动走国内镜像,速度快很多,而且踩坑概率大幅下降。实测在默认源下一个几十 MB 的包可能等几分钟,换完源基本是秒级。

3.3 PyTorch GPU 版安装:一个最容易踩的坑

PyTorch 是最关键的一环。很多人直接执行pip install torch,装完发现torch.cuda.is_available()返回 False,原因很直接:默认源里的 torch 是 CPU 版本,根本不含 CUDA 支持。要装 GPU 版,必须指定包含 CUDA 的 wheel 源。

推荐使用 CUDA 11.8 对应的版本,兼容性和稳定性都不错:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

如果官方源下载太慢,可以用清华的 PyTorch wheel 镜像:

pip install torch torchvision torchaudio -f https://mirrors.tuna.tsinghua.edu.cn/pytorch-wheels/cu118/

版本方面,我自己用的是 PyTorch 2.0.1 配 CUDA 11.8,跑了很久没出过问题。如果你的显卡比较新,装完 2.0.1 检测不到也是可能的,那就升级到 PyTorch 2.1 配 cu121,同样用--index-url https://download.pytorch.org/whl/cu121的方式。具体版本号可在 PyTorch 官网首页查询。

3.4 安装后立刻做 GPU 识别自检

装完不要急着往下走,先花十秒验证环境通没通。在激活的虚拟环境里执行:

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

正常情况下输出类似:

2.0.1+cu118 11.8 True

如果看到2.0.1+cpu,说明你装的是 CPU 版,回到上一步重装;如果看到True,说明 CUDA 环境已经贯通,可以继续。这一步是整个部署流程的“体检”,省得后面跑模型时才报错,排查起来头大。

4. 获取 ChatGLM-6B 代码和模型权重

4.1 拉取项目代码

ChatGLM-6B 是开源项目,代码托管在公开代码仓库里。需要先确认电脑装了 Git,命令行输入git --version能输出版本号就行。没有的话去官网下载 Git 安装包,一路下一步即可。

接着找个目录放项目,比如在 D 盘建一个GLM文件夹,然后执行:

git clone https://github.com/THUDM/ChatGLM-6B.git

如果网络下载速度慢,直接到项目主页下载 ZIP 压缩包也行,解压后效果一样。下载完成后,目录里应该能看到cli_demo.py、web_demo.py、requirements.txt、README.md这些文件。

4.2 模型权重的两种下载方式

代码本身很小,真正的重量级是模型权重文件,约 12GB。文件夹里如果没有模型文件,代码是跑不起来的。推荐优先使用国内的开源模型托管平台下载,速度快很多。

方式一:用 git lfs 拉取。先安装并启用 Git LFS:

git lfs install

然后从模型托管平台找到 ChatGLM-6B 的模型仓库,复制仓库地址,执行:

git clone https://www.modelscope.cn/你的模型仓库路径/ChatGLM-6B.git

方式二:用 Python 下载。在虚拟环境里先安装工具包,再用 snapshot 接口:

pip install modelscope
from modelscope import snapshot_download model_dir = snapshot_download("模型仓库ID", revision="master") print(model_dir)

两种方式都会把模型文件完整下载到本地。下载完成后进入模型目录,确认里面有多个.bin文件、config.json、tokenization_chatglm.py等文件,总大小接近 12GB。只看到一个几 KB 的文件说明没有真正下全,通常是没装 git lfs 导致的。

4.3 安装依赖前先锁版本

项目里的 requirements.txt 会列出运行需要的基础库,但不建议直接全部装最新版。这里有一个我印象很深的坑:transformers 库更新频繁,太新的版本会改掉部分接口,导致 ChatGLM-6B 的加载代码报一些奇怪的错误。我的建议是先固定 transformers 版本再装其他依赖:

pip install transformers==4.30.2 pip install -r requirements.txt

如果-r这一步因为版本冲突失败,可以手动装这几个核心依赖:

pip install gradio pip install sentencepiece pip install cpm-kernels pip install protobuf

gradio用于 Web 界面,sentencepiece处理中文 tokenizer,cpm-kernels是模型用的加速算子,protobuf是序列化依赖。这些装好,项目基本能跑。

4.4 目录结构和模型路径的准备

为了让后面的步骤更稳,我建议把模型文件放在项目目录外面,比如 D 盘单独建一个models/chatglm-6b文件夹,这样代码更新重下时不会误删 12GB 的权重文件。路径上尽量全用英文,不要带中文和空格,免得部分组件解析路径出问题。

后面运行脚本时,代码里默认写的是官方仓库路径,需要改成你本地的模型文件夹地址。比如 cli_demo.py 里模型加载部分一般长这样:

tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True) model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True)

你要做的就是把MODEL_PATH改成类似D:/models/chatglm-6b这样的本地绝对路径。这个改动说白了就是把“从网上下载模型”改成“从本地读取模型”,不复杂但必须记得,不然它会尝试重新联网下载。

5. 启动 ChatGLM-6B:命令行对话和 Web 界面

5.1 先用最小脚本确认模型能加载

第一次运行别急着跑完整项目,先用一个最小脚本验证模型加载和推理链路。在项目目录下新建一个test.py:

import torch from transformers import AutoTokenizer, AutoModel MODEL_PATH = "D:/models/chatglm-6b" # 改成你的模型路径 tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True) model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True).half().cuda() model = model.eval() response, history = model.chat(tokenizer, "你好,介绍一下你自己", history=[]) print(response)

然后在命令行执行:

python test.py

第一次加载会慢,因为要读取 12GB 权重并搬到显存,可能持续一两分钟,这是正常的。等看到模型真的输出一段文字,就说明整条链路已经通了,后面只是换入口的问题。

5.2 命令行交互模式运行

项目自带的cli_demo.py是一个命令行交互界面,适合快速测试:

python cli_demo.py

启动后出现输入提示符,输入“你好”回车,模型会逐字生成回复。多轮对话时它会把历史对话一起作为上下文,比单轮问答更接近真实聊天。输入clear可以清空历史,输入exit退出。

观察运行状态有两个重点:一是显存占用,在另一个终端窗口执行nvidia-smi,看 GPU 显存是否被占到预期水平;二是生成速度,在 8GB 显存和 4-bit 量化下,一句话通常几秒内开始输出,速度可以接受。

5.3 Web 界面运行

如果不喜欢黑乎乎的命令行,项目提供了基于 Gradio 的 Web 界面:

python web_demo.py

启动成功后终端会显示一个本地地址,通常是:

Running on local URL: http://127.0.0.1:7860

用浏览器打开这个地址,就能看到一个对话框,像网页聊天一样使用模型。这个界面刷新页面、切换对话都更方便,适合日常体验。如果 7860 端口被占用,终端会报错,改成 7861 或换一个端口即可。

5.4 显存不足时的降级操作

如果你的显存是 8GB 甚至 6GB,用上面的脚本可能直接报CUDA out of memory。解决办法是打开加载模型时的量化参数,把模型压成 8-bit 或 4-bit。

8-bit 量化的加载方式:

model = AutoModel.from_pretrained( MODEL_PATH, trust_remote_code=True, load_in_8bit=True, device_map="auto" )

4-bit 量化则把load_in_8bit换成load_in_4bit。使用这些参数需要先装支持库:

pip install bitsandbytes

量化之后显存占用会明显下降,8GB 显卡跑 8-bit,6GB 显卡跑 4-bit,基本都能玩起来。代价是生成质量轻微下降,但对日常体验来说感知不强。建议低显存用户直接把量化写进 cli_demo.py,省得每次手改。

5.5 首次运行值得观察的细节

第一次跑通之后,不要急着欢呼,顺便看一眼这些细节:权重加载花了多久,模型放机械盘还是固态盘影响很大;生成速度多快,低显存用户如果每生成一个字要等好几秒,是正常的;风扇会不会狂转,这是显卡在大功率计算的正常表现。我把模型放在固态盘和机械盘对比过,加载时间能差出两三倍,有条件的话建议放在固态盘。

6. 常见问题与排查技巧实录

6.1 torch.cuda.is_available() 一直返回 False

这是出现频率最高的问题,按以下顺序排查:

检查项预期如果不对怎么办
虚拟环境已激活命令行前缀有(glm-env)执行conda activate glm-env
torch 版本含 cu 后缀输出2.0.1+cu118卸载后按 3.3 节重装 GPU 版
驱动能识别显卡nvidia-smi能看到 GPU更新驱动,重启电脑
输出为 TrueTrue到这里就通了

很多时候问题出在“同一个 Python 装了两次 torch”,比如先 conda 装一次,又 pip 装一次,版本互相覆盖,建议卸载干净后统一用 pip 装。

6.2 CUDA out of memory 反复出现

显存不足有两种情况:加载阶段就爆,通常是显卡物理显存太小;运行一段时间后才爆,可能是多轮对话把历史上下文越积越长。后者可以清空历史记录再继续,或者减小输入长度。前者只能走量化降级,8GB 卡用 8-bit,6GB 卡用 4-bit,还不行就考虑换卡。另外检查后台有没有其他程序占显存,网页浏览器也很吃显存,运行模型时尽量关掉没用的窗口。

6.3 transformers 版本原因导致的怪报错

如果你用最新版 transformers 加载 ChatGLM-6B,可能看到类似“某某属性不存在”的报错,比如模型加载过程中提示某个函数被移除。这是版本兼容问题,不是你的操作问题。解决办法就是锁定版本,装回 4.30.2 再试。

我也遇到过装完 4.30.2 后又自动被升级的情况,需要确认依赖约束。命令行里可以用pip show transformers查看当前版本,确认是Version: 4.30.2再跑。

6.4 模型文件下载中断、下到一半失败

12GB 的文件难免遇到中断。git lfs 下载断了之后,重新执行同样命令会断点续传,不用从头再来。如果反复在中途失败,先检查磁盘格式和剩余空间,FAT32 格式无法支持超过 4GB 的单文件。另一个办法是改用 Python 的 snapshot_download 接口,它会自动管理分块。

6.5 CPU 推理慢到怀疑人生

有些同学没有独立显卡,也想先跑通流程。把加载代码里的.half().cuda()去掉,改成.float(),模型会在 CPU 上运行。不是不能跑,而是速度慢很多,16GB 内存下大概几十秒甚至一两分钟才出一个短句,只能算“能通”。如果体验太差,建议还是想办法弄一张 NVIDIA 显卡,哪怕 6GB 的卡也会好很多。


这套流程我前后部署过好几次,也帮别人排查过不少问题,最深的感觉是:本地部署大模型的难点不在“模型”本身,而在“环境”二字。环境通了,跑模型就是一行命令的事;环境不顺,每一步都可能卡住。而且一次跑通不代表万事大吉,隔几个月依赖升级后,可能又会弹出新的报错。所以比“照抄命令”更重要的是学会看报错、读版本号、查验证结果。我的建议是把每一步的验证命令当成习惯,装完就检查,别攒到最后。从 ChatGLM-6B 上手之后,再去尝试更大模型或改造推理接口,你会发现底层思路是一样的:驱动和 PyTorch 版本要匹配,模型路径要改成本地,显存不够就量化,剩下的交给模型本身。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询