资讯动态

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

发布时间:2026/9/19 17:35:13 来源:尧图企业网站定制
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 DemoTransformers 直接部署是最薄的一层不需要额外引入 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 309024G 显存级别的机器。租用时镜像按下图选择PyTorch→2.0.0→3.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提供AutoTokenizer与AutoModelForCausalLM负责加载分词器与对话模型sentencepieceChatGLM 系列使用的分词器底层依赖缺少会导致分词器加载失败。如需完整复现更严格的版本组合可参考 02-ChatGLM3-6B FastApi部署调用.md 中transformers4.37.2、modelscope1.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, revisionmaster)随后在终端执行下载python /root/autodl-tmp/download.py关键参数说明第一个参数ZhipuAI/chatglm3-6b模型在 ModelScope 上的仓库 IDcache_dir/root/autodl-tmp模型下载缓存路径建议使用绝对路径下载完成后模型目录位于/root/autodl-tmp/ZhipuAI/chatglm3-6brevisionmaster指定仓库分支/版本。模型总大小约14 GB在普通网络下预计需要1020 分钟。关于模型下载的更多方式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_codeTrue设置允许从网络上下载模型权重和相关的代码 tokenizer AutoTokenizer.from_pretrained(model_dir, trust_remote_codeTrue) # 模型加载本地加载使用AutoModelForCausalLM类 model AutoModelForCausalLM.from_pretrained(model_dir, trust_remote_codeTrue) # 将模型移动到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, 请介绍一下你自己, historyhistory) print(response) # 第三轮对话 response, history model.chat(tokenizer, 请帮我使用python语言写一段冒泡排序的代码, historyhistory) print(response)4.1 逐段拆解加载、落盘与多轮对话加载分词器AutoTokenizer.from_pretrained(model_dir, trust_remote_codeTrue)从本地目录加载 ChatGLM3-6B 的分词器。trust_remote_codeTrue允许执行模型仓库自带的远端 Python 代码ChatGLM3-6B 依赖仓库内的tokenization_chatglm.py等自定义代码这是运行该类模型的标准配置。加载模型AutoModelForCausalLM.from_pretrained(...)以因果语言建模CausalLM方式加载对话模型。值得说明的是transformers的AutoModel/AutoModelForCausalLM都可用于 ChatGLM3-6B本仓库 FastAPI 与 LangChain 示例即使用AutoModelForCausalLM见 LLM.py 的导入方式。设备迁移与评估模式torch.device(cuda if torch.cuda.is_available() else cpu)自动检测 GPUmodel.to(device)将权重移动到设备model.eval()切换为评估模式关闭 dropout 等训练期行为保证生成结果稳定。多轮对话model.chat(tokenizer, query, historyhistory)是 ChatGLM3-6B 仓库代码提供的对话入口返回(response, history)二元组。注意第二、三轮对话把上一轮的history传入模型才能记住前文、形成连续对话——这是多轮对话正确性的关键所在。4.2 进阶用法生成参数与梯度关闭对话脚本还可以按需扩展。参考同目录 02-ChatGLM3-6B FastApi部署调用.md 中的调用方式model.chat()支持max_length、top_p、temperature等生成参数response, history model.chat( tokenizer, prompt, historyhistory, max_length2048, # 生成长度上限 top_p0.7, # 核采样概率阈值 temperature0.95 # 采样温度越大越随机 )此外纯推理场景下可在加载模型后使用torch.no_grad()或model.eval()结合torch.inference_mode()减少显存占用若担心显存不足可参考 Extra-ChatGLM3-6B-Pipeline.md 中的优化写法加载时使用torch_dtypetorch.float16与device_mapauto自动分配设备。五、运行部署加载模型并触发多轮对话在终端依次执行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_codeTrue已传参CUDA out of memoryChatGLM3-6B 以 FP16 加载约占用 1315 GB 显存24G 显存足够如仍超限改用torch_dtypetorch.float16加载或使用device_mapauto模型加载慢属正常现象14 GB 权重从磁盘读取需要时间可通过low_cpu_mem_usageTrue降低内存占用峰值对话上下文不连贯检查是否把上一轮的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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价