Datawhale Self-LLM 实战:ChatGLM3-6B 基于 Transformers 的本地部署与对话调用指南
2026/9/19 17:35:02 网站建设 项目流程

Datawhale Self-LLM 实战:ChatGLM3-6B 基于 Transformers 的本地部署与对话调用指南

【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调(全参数/Lora)、部署国内外开源大模型(LLM)/多模态大模型(MLLM)教程项目地址: https://gitcode.com/datawhalechina/self-llm

导读

本文是《开源大模型食用指南》(Datawhale / self-llm)中 ChatGLM 系列教程的第一篇,围绕 01-ChatGLM3-6B Transformer部署调用.md 展开,讲解如何在一台 24G 显存的 Linux GPU 服务器上,用 Hugging Facetransformers库本地加载 ChatGLM3-6B 并完成多轮对话。读完本文,你将掌握从云平台镜像选型、pip 环境配置、ModelScope 模型下载,到编写并运行对话脚本的完整链路,为后续的 FastAPI 服务化部署、Streamlit Web Demo 与 LoRA 微调 打好基础。

一、方案概述:为什么用 Transformers 直接部署

ChatGLM3-6B 是智谱 AI 开源的双语(中英)对话大模型,模型权重约 14 GB。相比 FastAPI 服务化或 Web Demo,Transformers 直接部署是"最薄"的一层:不需要额外引入 Web 框架,只需加载分词器(tokenizer)与因果语言模型(Causal Language Model),即可通过模型自带的chat()接口完成带历史记录的多轮对话。它特别适合:

  • 快速验证模型在本地是否可用、回答效果如何;
  • 作为后续接入 LangChain(参见 05-ChatGLM3-6B接入LangChain搭建知识库助手.md)等应用框架前的"冒烟测试";
  • 在 JupyterLab 中以交互方式逐步调试部署流程。

同目录下的 requirements.txt 给出了完整的依赖清单(含 transformers、modelscope、sentencepiece、torch 等),本文部署环节只需其中的核心三件套即可跑通。

二、环境准备:租用 GPU 机器与配置 Python 环境

2.1 云平台镜像选择

在 AutoDL 等云 GPU 平台租用一台RTX 3090(24G 显存)级别的机器。租用时镜像按下图选择:PyTorch2.0.03.8(ubuntu20.04)11.8,即 PyTorch 2.0.0、Python 3.8、Ubuntu 20.04、CUDA 11.8。

说明:ChatGLM3-6B 在 24G 显存下可以用 FP16/BF16 精度完整加载。若本机无 GPU,也可以把文中device换成cpu,但 6B 规模模型在 CPU 上推理速度会明显下降,建议优先使用 GPU 机器。

2.2 pip 换源与安装依赖包

打开服务器的 JupyterLab,进入其中的终端,先升级 pip,并切换清华 PyPI 源以加速安装,然后安装部署所需的三件核心依赖:

# 升级pip python -m pip install --upgrade pip # 更换 pypi 源加速库的安装 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip install modelscope pip install transformers pip install sentencepiece

各依赖在部署链路中的职责:

  • modelscope:提供snapshot_download,用于从 ModelScope(魔搭)模型库下载 ChatGLM3-6B 权重;
  • transformers:提供AutoTokenizerAutoModelForCausalLM,负责加载分词器与对话模型;
  • sentencepiece:ChatGLM 系列使用的分词器底层依赖,缺少会导致分词器加载失败。

如需完整复现更严格的版本组合,可参考 02-ChatGLM3-6B FastApi部署调用.md 中transformers==4.37.2modelscope==1.9.5等固定版本写法,以及仓库根目录的 requirements.txt 完整清单。

三、模型下载:用 ModelScope 拉取 14GB 权重

/root/autodl-tmp路径下新建download.py文件,写入以下内容并保存:

import torch from modelscope import snapshot_download, AutoModel, AutoTokenizer import os model_dir = snapshot_download('ZhipuAI/chatglm3-6b', cache_dir='/root/autodl-tmp', revision='master')

随后在终端执行下载:

python /root/autodl-tmp/download.py

关键参数说明:

  • 第一个参数'ZhipuAI/chatglm3-6b':模型在 ModelScope 上的仓库 ID;
  • cache_dir='/root/autodl-tmp':模型下载缓存路径(建议使用绝对路径),下载完成后模型目录位于/root/autodl-tmp/ZhipuAI/chatglm3-6b
  • revision='master':指定仓库分支/版本。

模型总大小约14 GB,在普通网络下预计需要10~20 分钟。关于模型下载的更多方式(huggingface-cli、HF 镜像、git-lfs 等),可参阅通用章节 03-模型下载.md。

四、编写对话脚本 trans.py

/root/autodl-tmp路径下新建trans.py,完整内容如下(代码中已保留原文注释并补充说明):

# 使用Hugging Face中'transformer'库中的AutoTokenizer和AutoModelForCausalLM以加载分词器和对话模型 from transformers import AutoTokenizer, AutoModelForCausalLM import torch # 使用模型下载到的本地路径以加载 model_dir = '/root/autodl-tmp/ZhipuAI/chatglm3-6b' # 分词器的加载,本地加载,trust_remote_code=True设置允许从网络上下载模型权重和相关的代码 tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True) # 模型加载,本地加载,使用AutoModelForCausalLM类 model = AutoModelForCausalLM.from_pretrained(model_dir, trust_remote_code=True) # 将模型移动到GPU上进行加速(如果有GPU的话) device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) # 使用模型的评估模式来产生对话 model.eval() # 第一轮对话 response, history = model.chat(tokenizer, "你好", history=[]) print(response) # 第二轮对话 response, history = model.chat(tokenizer, "请介绍一下你自己", history=history) print(response) # 第三轮对话 response, history = model.chat(tokenizer, "请帮我使用python语言写一段冒泡排序的代码", history=history) print(response)

4.1 逐段拆解:加载、落盘与多轮对话

加载分词器AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)从本地目录加载 ChatGLM3-6B 的分词器。trust_remote_code=True允许执行模型仓库自带的远端 Python 代码(ChatGLM3-6B 依赖仓库内的tokenization_chatglm.py等自定义代码,这是运行该类模型的标准配置)。

加载模型AutoModelForCausalLM.from_pretrained(...)以因果语言建模(CausalLM)方式加载对话模型。值得说明的是,transformersAutoModel/AutoModelForCausalLM都可用于 ChatGLM3-6B(本仓库 FastAPI 与 LangChain 示例即使用AutoModelForCausalLM,见 LLM.py 的导入方式)。

设备迁移与评估模式torch.device("cuda" if torch.cuda.is_available() else "cpu")自动检测 GPU;model.to(device)将权重移动到设备;model.eval()切换为评估模式,关闭 dropout 等训练期行为,保证生成结果稳定。

多轮对话model.chat(tokenizer, query, history=history)是 ChatGLM3-6B 仓库代码提供的对话入口,返回(response, history)二元组。注意第二、三轮对话把上一轮的history传入,模型才能记住前文、形成连续对话——这是多轮对话正确性的关键所在。

4.2 进阶用法:生成参数与梯度关闭

对话脚本还可以按需扩展。参考同目录 02-ChatGLM3-6B FastApi部署调用.md 中的调用方式,model.chat()支持max_lengthtop_ptemperature等生成参数:

response, history = model.chat( tokenizer, prompt, history=history, max_length=2048, # 生成长度上限 top_p=0.7, # 核采样概率阈值 temperature=0.95 # 采样温度,越大越随机 )

此外,纯推理场景下可在加载模型后使用torch.no_grad()model.eval()结合torch.inference_mode()减少显存占用;若担心显存不足,可参考 Extra-ChatGLM3-6B-Pipeline.md 中的优化写法,加载时使用torch_dtype=torch.float16device_map="auto"自动分配设备。

五、运行部署:加载模型并触发多轮对话

在终端依次执行:

cd /root/autodl-tmp python trans.py

运行后观察终端输出:

  • 出现loading checkpoint相关日志,表示模型正在从本地磁盘加载权重(14GB 权重首次加载需要数分钟);
  • 权重加载完成后,model.eval()生效,脚本立即依次执行三轮对话;
  • 终端会依次打印三轮response:问候语、自我介绍、以及一段用 Python 实现的冒泡排序代码。

从源码结构看,整个调用链是:AutoTokenizer负责把文本转为 token →AutoModelForCausalLM前向推理生成回复 → 仓库内置的chat()方法自动拼接 ChatGLM3 的对话模板并维护history状态,这也是 LLM.py 中自定义 LangChain LLM 类复用同一model.chat()接口的原因——你已掌握的这套调用方式可以直接迁移到后续所有 ChatGLM3-6B 应用教程中。

六、常见问题排查

  • 分词器报错/找不到模块:确认已安装sentencepiece,且trust_remote_code=True已传参;
  • CUDA out of memory:ChatGLM3-6B 以 FP16 加载约占用 13~15 GB 显存,24G 显存足够;如仍超限,改用torch_dtype=torch.float16加载或使用device_map="auto"
  • 模型加载慢:属正常现象,14 GB 权重从磁盘读取需要时间,可通过low_cpu_mem_usage=True降低内存占用峰值;
  • 对话上下文不连贯:检查是否把上一轮的history传入了model.chat()

七、延伸阅读

本教程是 ChatGLM 系列的第一步,部署完成后可继续学习:

  • 02-ChatGLM3-6B FastApi部署调用.md:将本地模型封装为 HTTP 服务,供任意客户端调用;
  • 03-ChatGLM3-6B-chat.md:基于官方 ChatGLM3 仓库搭建 Streamlit 交互界面;
  • 05-ChatGLM3-6B接入LangChain搭建知识库助手.md:把模型封装成 LangChain 自定义 LLM,构建 RAG 知识库问答应用;
  • 06-ChatGLM3-6B-Lora微调.md:在部署基础上进一步做高效微调,定制个性化模型;
  • Extra-ChatGLM3-6B-Pipeline.md:以上流程的整合版,使用 uv 管理依赖,一键跑通部署、服务化、Web Demo 与微调。

【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调(全参数/Lora)、部署国内外开源大模型(LLM)/多模态大模型(MLLM)教程项目地址: https://gitcode.com/datawhalechina/self-llm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

立即咨询