ChatGLM-6B本地部署全攻略:CUDA配置、量化选型与WebUI搭建 本地大模型这件事琢磨一阵子之后你会发现真正卡人的不是模型本身而是环境。ChatGLM-6B这种级别的模型只要是近几年的显卡都能跑但很多人在第一步装CUDA、配PyTorch的时候就栽了跟头然后整个计划就搁浅了。这篇攻略我按自己实际折腾的顺序来写从显卡驱动怎么确认到CUDA装哪个版本再到模型怎么下载、怎么量化、怎么跑起来全部走一遍。你不用懂底层原理照着步骤来大概率一次能通。1. 整体设计与方案选型思路1.1 为什么选ChatGLM-6B作为本地部署的起点现在本地能跑的大模型不少ChatGLM-6B、Llama系列、通义千问、百川都有对应的小尺寸版本。但如果你是第一次接触本地部署ChatGLM-6B是最合适的入门选择原因很实在。显存门槛低。6B参数对应FP16精度大约是12GB显存但实际上通过量化手段最低6GB显存的显卡也能跑起来这正好覆盖了市面上主流游戏卡的显存区间。很多人的显卡是8GB或12GB正好在甜点位上。中文效果好。这个模型在中文语料上做过专门优化你拿它做文本生成、内容总结、对话问答输出质量明显比同体量的其他模型更自然。对中文用户来说日常使用体验很重要。资料多、踩坑记录全。这个模型发布得早社区里积累了大量的部署经验、常见问题解决方案你遇到报错基本都能搜到答案。新手最怕的是卡住没人问选一个生态成熟的模型相当于自带了一本错题集。部署流程覆盖完整。从环境配置到模型下载再到启动推理整个流程把本地大模型的部署链路完完整整地走了一遍。你把这个流程跑通之后再换其他模型其实就是替换参数的事底层的环境和工具链是通用的。1.2 本地部署的核心链路和技能储备本地部署大模型本质上就是一条链路硬件资源 → CUDA计算平台 → Python环境 → 深度学习框架 → 模型权重 → 推理脚本/界面。一个环节出错后面全部跑不起来。你不用提前把每个环节都吃透但每个环节的核心逻辑得心里有数。CUDA是用来让程序调用显卡计算能力的桥梁PyTorch是在这个桥梁上运行的深度学习框架模型权重是训练好的知识推理脚本是把知识和你的输入结合起来、生成回答的程序。对小白来说Windows系统其实比Linux更友好。很多人一听大模型就觉得必须用Linux其实ChatGLM-6B在Windows上完全能跑配置得当之后启动个脚本就行。我自己的主力环境是Windows 11加显卡驱动部署过程没遇到什么系统层面的障碍。当然如果你本身熟悉Linux用Linux会更顺手但这不是必需的。2. 环境准备与CUDA配置详解2.1 硬件配置要求与显卡状态确认开始之前先确认你的机器配置。显卡是最关键的部件显存大小决定了你能跑多大参数量的模型、用不用量化。我的经验是这样的显存容量可运行的模型方案6GBChatGLM-6B INT4量化版流畅运行生成速度尚可8GBChatGLM-6B INT4或INT8量化版体验更好12GBFP16半精度原版或者更高参数量的量化模型16GB及以上原版FP16运行无压力可尝试多轮对话加长上下文注意这只是模型加载占用的显存实际上系统其他功能也会占用一点显存所以留出1GB到2GB的余量比较保险。内存建议16GB起步32GB更从容。模型加载到显存之前权重文件是先经过内存的内存不足会直接崩溃。另外硬盘上要留出至少20GB的空间模型文件本身大约12GBPython环境和依赖库还要占掉几个GB。确认显卡状态很简单。在Windows下打开任务管理器点性能标签页看左侧有没有GPU选项右侧看GPU名称和专用显存。如果你看到的名称是Microsoft基本显示适配器说明显卡驱动没装好后面CUDA环境配了也白配先去显卡官网把驱动更新到最新版。2.2 CUDA Toolkit的版本选择和安装过程这一步是新手最容易迷惑的地方。显卡驱动、CUDA、PyTorch三者之间的版本关系很多人理不清。其实记住一个原则就行显卡驱动是最底层的驱动支持新版本的CUDA而CUDA是给开发用的工具包PyTorch又依赖特定的CUDA版本所以版本匹配是从上往下一层一层对应的。打开命令行输入nvidia-smi如果正常显示显卡信息看右上角CUDA Version这是驱动支持的最高CUDA版本。我的机器显示的是12.2所以我装CUDA 11.8或者12.1都没问题。这里给小白一个关键建议CUDA版本不需要跟驱动的上限版本完全一致只需小于或等于驱动支持的上限即可。我一般习惯装CUDA 11.8因为PyTorch对11.8的官方支持非常稳定很多模型源码也是基于这个版本测试的。下载CUDA Toolkit时可以直接在搜索引擎里搜CUDA Toolkit 11.8进入官方下载页面选择Windows系统然后选exe local格式。安装的时候注意选择自定义安装不要全选。组件里的Visual Studio Integration如果没装VS可以不勾选其他保持默认。安装完成后环境变量里会自动加入CUDA相关的路径但有时候不全需要手动检查。在系统环境变量里确认或添加这两个路径C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin和C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\libnvvp。然后打开新的命令行窗口输入nvcc --version能输出版本信息就说明CUDA配置成功了。提示很多人在第一步就把CUDA理解成显卡驱动其实驱动是驱动CUDA是CUDA它们是两回事。驱动让系统能用显卡显示画面CUDA是给开发者调用显卡算力用的工具包。大模型推理依赖的是CUDA支持的算力功能所以单纯更新驱动是不够的。2.3 Python与PyTorch的安装及版本匹配Python版本建议3.8到3.10之间不要装最新的3.11或3.12。虽然新版本性能更好但很多深度学习库的预编译包还没有完全适配装的时候容易碰到莫名其妙的坑。下载Python安装包时注意勾选Add Python to PATH这样后续在命令行里直接输入python就能进入环境。装完验证一下命令窗口输入python --version确认当前版本。然后进入PyTorch官网选择对应的版本。这里有个关键操作ChatGLM-6B的代码基于老版本的transformers库在较新的PyTorch版本上可能会出现接口不兼容的问题。所以我建议安装PyTorch 1.13.x版本。在PyTorch官网首页选择PyTorch 1.13.1、Conda或Pip、Windows、CUDA 11.7或11.8生成安装命令。复制官网生成的那行命令类似pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117这里有个知识点cu117表示CUDA 11.7版本对应的PyTorch版本。如果你的CUDA是11.8也可以选cu117的包因为PyTorch的预编译包把CUDA运行时打包在内部了只要显卡驱动支持比它新就能用。装好之后验证CUDA是否真的被PyTorch调用了。在命令行里进入Python交互环境输入import torch print(torch.cuda.is_available())如果输出True说明环境打通了PyTorch能使用GPU。如果输出False大概率是驱动太老或者PyTorch版本装成了纯CPU版。CPU版的安装包路径里没有cu117或cu118字样如果之前装错过先卸载再重装。3. ChatGLM-6B模型下载与量化方案选择3.1 模型权重文件的获取渠道和校验方法ChatGLM-6B的权重文件在HuggingFace和国内一些镜像源上都有发布。因为HuggingFace的访问经常不稳定我建议直接从托管平台上找到对应仓库下载国内网络下更省心。你需要的文件是一个chatglm-6b文件夹里面包含文件作用config.json模型结构和超参数配置pytorch_model.binFP16精度下的模型权重最核心的文件tokenizer.json分词器文件tokenization_chatglm.py分词流程脚本quantization.py量化工具脚本ice_text.model词表文件下载过程中最容易踩的坑是权重文件不完整。pytorch_model.bin文件很大网速稍微不稳就下载不全。文件下载完后对照官方页面上标注的SHA256校验值验一下哈希值如果对不上说明文件损坏直接重新下载别用损坏的文件硬跑。下载完成后把这些文件解压到一个路径里记住这个路径后续代码里要用到。建议路径不要有中文不要有空格D:\models\chatglm-6b这种格式最稳妥。3.2 量化原理和不同量化档位的选择逻辑如果不加任何处理ChatGLM-6B的FP16权重直接加载需要大约12GB显存。很多人的显卡不够这个数这时候就要用到量化技术。量化这个词听起来高级本质上就是降低数值精度。原来的每个参数用16位浮点数存储和运算量化后变成8位甚至4位整数占用空间小了运行也更快代价是模型精度有一定损失回答质量可能轻微下降。衡量一个模型能不能在显卡上跑主要看两点加载权重占用的空间推理过程中产生的临时显存。ChatGLM-6B的官方仓库里给出了量化方式用load_in_8bit或者load_in_4bit加载时显存占用可以降到8GB甚至6GB以内。实际使用我的建议是显存只有6GB用INT4量化能跑但生成速度稍慢对话回合数多的时候可能出现前面历史的遗忘。显存8GB用INT8量化平衡了速度和效果这个组合体验最好。显存12GB及以上直接用FP16原版质量和速度都在线省心。说到速度生成一段回答的速度受显卡算力、显存带宽和量化格式三个因素共同影响。我自己测试下来8GB显存显卡配INT8单字生成速度大概在一秒几个字到十几个字之间作为日常对话工具完全够用。3.3 模型运行脚本的编写和启动验证ChatGLM-6B提供了官方推理脚本但你还需要手动处理一下依赖库的版本。创建一个新目录放一个requirements.txt文件内容大致包括transformers库、accelerate、sentencepiece、protobuf等。执行下面这行命令安装依赖pip install -r requirements.txt接下来是核心的推理脚本。新建一个Python文件内容如下from transformers import AutoTokenizer, AutoModel model_path D:\\models\\chatglm-6b tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) model AutoModel.from_pretrained(model_path, trust_remote_codeTrue).half().cuda() model model.eval() prompt 介绍一下杭州 response, history model.chat(tokenizer, prompt, history[]) print(response)这里说明几点。trust_remote_codeTrue必须加因为这个模型使用了自定义的建模代码不信任远程代码的话HuggingFace会拒绝加载。.half()是把模型转成半精度FP16格式这样加载的显存占用直接减半。.cuda()是把模型放到显卡上运行。跑一下脚本看到完整生成了一段通顺的回答说明整个环境已经通了。这个命令行模式可以作为基础运行方式适合调用API做批量处理或者集成到自己的程序里。4. WebUI界面部署与对话体验优化4.1 Gradio界面启动和参数调整命令行方式验证通过后你还可以加装一个WebUI界面这样不用命令行浏览器里就能直接对话使用体验提升一个档次。用Gradio框架可以快速搭建这个对话界面。在刚才的目录下新建一个webui.py文件from transformers import AutoModel, AutoTokenizer import gradio as gr model_path D:\\models\\chatglm-6b tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) model AutoModel.from_pretrained(model_path, trust_remote_codeTrue).half().cuda() model.eval() def chat(message, history): response, _ model.chat(tokenizer, message, historyhistory) return response gr.ChatInterface( fnchat, title本地大模型对话测试, ).launch(server_name127.0.0.1, server_port7860)启动后会看到一个本地的URL地址浏览器打开就能访问。这个界面支持多轮对话上方的文本框输入问题下方显示完整的对话历史。server_name设成127.0.0.1表示只允许本机访问想在局域网内其他设备访问改成0.0.0.0就可以了。server_port是端口号如果7860被占用换一个就行。注意Gradio默认只开一条线程处理请求如果多个人同时访问同一个界面后进入的人会排队。个人使用场景不用管这个团队协作场景需要额外配置多线程支持。4.2 流式输出与记忆长度的调优技巧默认情况下模型生成完一整段回答后才会一次性显示出来句子长的时候等待感很明显。改成流式输出文字会一个字一个字蹦出来体验上更像真人聊天。要实现流式输出需要修改推理的调用方式。ChatGLM的官方backend代码如下model.stream_chat(tokenizer, query, history)用stream_chat替代chat配合Gradio的ChatInterface使用就能实现逐字输出。参数方面top_p控制采样的累积概率阈值数值越小、输出越保守temperature控制随机性数值越高、回答越发散。日常使用建议保持默认追求稳定回答就调低temperature到0.6到0.8之间。对话历史越长显存占用越高回答延迟也跟着增加。这是因为每次对话都需要把之前所有的历史重新处理一遍。所以长对话进行到一定程度的时候生成速度会明显变慢这时候清空一下历史或者主动开新话题会流畅很多。5. 常见问题与排查技巧实录5.1 显存溢出与运行崩溃的解决方案现象一加载模型时报错CUDA out of memory。这表示显存不够了你有两个方向可以走。一是降低量化档位从FP16降到INT8再到INT4二是把模型加载到CPU上运行。用AutoModel.from_pretrained(..., device_mapcpu)强制CPU推理但生成速度会慢很多纯CPU生成一个字可能要几秒钟。机器学习玩家可以尝试先加载模型到CPU然后用to(0)移到GPU这样至少能运行。现象二加载过程中内存占用飙升电脑卡死。通常是内存不够大或者有别的程序占了内存。关掉浏览器标签页、后台软件再试试。加载模型本身是一件吃资源的事跑起来之后就轻松很多。现象三生成到一半报错然后程序退出。常见原因是显存被其他进程占用比如浏览器开启了硬件加速。显存不够生成过程中间数据溢出解决方案和现象一一致。5.2 版本冲突与依赖库报错的排查指南报错No module named transformers。依赖库没装全要么装错环境了。确认你在命令行里输入的pip install跟启动脚本时用的是同一个Python环境。建议创建一个虚拟环境专门给这个项目用避免和系统全局环境里的包互相污染。报错AttributeError: ChatGLMForConditionalGeneration object has no attribute chat。transformrs版本太新或者太旧。ChatGLM-6B需要 transformers 4.27.1到4.30.0之间的版本装一个指定版本即可pip install transformers4.29.2报错TypeError: NoneType object is not iterable。通常是模型的tokenizer加载不完整重新检查权重文件是否齐全特别是tokenizer.json。显卡明明支持但torch.cuda.is_available()是False。检查PyTorch是不是装了纯CPU版卸载后用包含cu117或cu118的安装命令重装。再检查显卡驱动版本是否过老更新驱动后重启电脑。5.3 下载速度慢与网络源选择的经验建议从HuggingFace下载权重经常碰到龟速下载解决办法是切换镜像源。国内一些高校和企业提供了HuggingFace的镜像站在命令行设置环境变量set HF_ENDPOINThttps://hf-mirror.com这样设置之后HuggingFace的下载请求会自动走镜像速度能提升好几倍。下载完成后再取消这个环境变量避免影响后续操作。另外不建议用Git LFS直接clone整个仓库容易中断。直接访问模型仓库的文件列表单独下载pytorch_model.bin和其余小文件配合下载工具支持断点续传稳定得多。6. 实操总结与个性化扩展建议6.1 一次完整的部署流程回顾跑通一个本地大模型的流程从上到下总结成一张流程表阶段关键操作验证方式硬件检查确认显卡显存、驱动版本任务管理器 / nvidia-smiCUDA安装安装CUDA Toolkit 11.8nvcc --versionPython准备安装Python 3.10python --versionPyTorch安装按CUDA版本安装GPU版torch.cuda.is_available()模型获取下载权重至本地目录哈希校验环境配置安装依赖库无报错即可运行验证执行推理脚本成功生成回答整个流程中最耗时的其实是权重下载和环境配置一旦跑通了命令行版本后续加WebUI、换量化档位、换其他模型都是顺水推舟的事。6.2 从入门到进阶的路线图跑通ChatGLM-6B之后你已经掌握了本地部署大模型的基础能力。下一步可以根据自己的硬件条件和使用需求选择不同的进阶方向。显存允许的话可以试试更大的模型比如13B参数级别的量化版本文本生成质量和上下文理解的深度都会有明显提升。也可以把模型接入到自己写的应用里比如做一个个人知识库问答机器人或者集成到自动化办公流程中做文本处理。更高阶的玩法是用LangChain这类工具把模型包装成Agent让大模型具备调用工具、搜索资料、执行任务的能力。本质上你已经在本地拥有了一台可以持续运行的智能处理引擎能做的事情远比聊天窗口展示的多得多。部署这件事卡住人的从来不是技术门槛而是一堆细节没理顺。显卡驱动和CUDA版本的关系搞明白了Python环境装干净了模型文件校验完整了剩下就是跑通一次流程建立信心的问题。按照这篇攻略走一遍遇到问题回来看排查清单本地大模型的大门就打开了。