ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

CharacterGLM-6B Transformers 本地部署调用指南:从环境搭建到多轮角色对话实战

CharacterGLM-6B Transformers 本地部署调用指南:从环境搭建到多轮角色对话实战 CharacterGLM-6B Transformers 本地部署调用指南从环境搭建到多轮角色对话实战【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/datawhalechina/self-llmCharacterGLM-6B 是聆心智能与清华大学 CoAI 实验室联合发布的新一代对话预训练模型专为角色扮演Character类对话场景设计。本指南以 models/CharacterGLM/01-CharacterGLM-6B Transformer部署调用.md 为核心主体完整演示在 AutoDL 平台上使用 Transformers 框架从零部署 CharacterGLM-6B 的完整流程包括环境准备、ModelScope 模型下载、模型与分词器加载、以及携带角色人设信息的多轮对话生成。读完本文你将能够独立完成 CharacterGLM-6B 的本地化部署并理解其session_meta人设机制与chat接口的多轮对话调用方式为后续的 FastAPI 服务化部署 与 LoRA 微调 打下基础。模型与部署方式简介CharacterGLM-6B 是在通用对话大模型基座之上针对角色扮演场景进一步优化得到的 6B 级对话模型其核心能力在于模型能够在一个稳定的**角色人设Character Profile**约束下进行对话同时保持角色语言风格、性格特点与人物关系的一致性。这与普通 Chat 模型一问一答的通用回复模式有本质区别——CharacterGLM 的每一次回复都建立在明确的角色设定之上。围绕该模型models/CharacterGLM 目录下沉淀了完整的部署与微调教程体系文档主题01-CharacterGLM-6B Transformer部署调用.md基于 Transformers 框架的最小化部署调用本文主体02-CharacterGLM-6B FastApi部署调用.md基于 FastAPI Uvicorn 的 HTTP 服务化部署03-CharacterGLM-6B-chat.md基于官方仓库的 Web DemoStreamlit与命令行 Demo04-CharacterGLM-6B Lora微调.md基于 transformers peft 的 LoRA 指令微调本文聚焦第一种方式直接在 Python 脚本中调用 Transformers 的AutoModelForCausalLM加载模型并生成对话。该方式不依赖 Web 服务与前端界面代码量最小、链路最清晰适合作为理解 CharacterGLM-6B 对话机制的入门实践。第一步环境准备租用 GPU 实例CharacterGLM-6B 参数量约 6B推理时需要加载完整权重显存占用较高。原文档明确建议在 AutoDL 平台租用RTX 3090 等 24G 显存的显卡机器。镜像选择路径为PyTorch -- 2.0.0 -- 3.8 (ubuntu20.04) -- 11.8即 PyTorch 2.0.0、Python 3.8Ubuntu 20.04 系统、CUDA 11.8 的组合如上方图 1 所示。选择该组合的原因在于PyTorch 2.0.0 与 CUDA 11.8 的匹配关系成熟稳定Python 3.8 与后续所需的 transformers、modelscope、sentencepiece 等库均保持较好的兼容性。若使用 AutoDL 平台的 JupyterLab 镜像通常已经预装 PyTorch、CUDA 驱动等基础组件无需重复安装。打开终端并配置 pip租用实例后打开 JupyterLab 中的终端Terminal依次执行以下命令完成 pip 升级与国内镜像源切换# 升级 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阿里达摩院开源的模型与数据集管理平台 Python SDK本文使用其snapshot_download函数从 ModelScope 模型库下载 CharacterGLM-6B 权重transformersHugging Face 的 Transformers 框架提供AutoTokenizer、AutoModelForCausalLM等统一的模型加载与推理接口sentencepiece子词subword分词器依赖。CharacterGLM-6B 采用 sentencepiece 分词方案缺少该库会导致分词器加载失败。第二步使用 ModelScope 下载模型编写下载脚本在/root/autodl-tmp路径下新建download.py文件写入以下内容import torch from modelscope import snapshot_download, AutoModel, AutoTokenizer import os model_dir snapshot_download(THUCoAI/CharacterGLM-6B, cache_dir/root/autodl-tmp, revisionmaster)对关键参数说明如下第一个参数THUCoAI/CharacterGLM-6BModelScope 模型仓库中的模型名称模型 IDTHUCoAI为组织/用户名CharacterGLM-6B为模型名cache_dir模型的下载缓存路径必须为绝对路径这里设置为/root/autodl-tmpAutoDL 数据盘挂载目录容量更大、持久性更好revisionmaster指定拉取master分支默认主干分支的模型文件。模型总大小约12 GB在 AutoDL 平台网络环境下下载大约需要10~15 分钟。下载完成后模型文件会保存在/root/autodl-tmp/THUCoAI/CharacterGLM-6B目录下。在终端执行下载python /root/autodl-tmp/download.py补充说明snapshot_download返回的是模型文件实际落盘的目录路径即model_dir变量该返回值可以直接作为后续加载模型时的model_dir使用避免手写路径出错。除 ModelScope 外仓库 models/General-Setting/03-模型下载.md 还介绍了 huggingface-cli、HF 镜像、git-lfs、Openxlab 等多种模型下载方式国内网络环境下 ModelScope 通常最为稳定高效。第三步编写部署脚本并理解关键代码下载完成后在/root/autodl-tmp路径下新建trans.py文件粘贴以下完整代码原文档代码含详细注释from transformers import AutoTokenizer, AutoModelForCausalLM import torch # 使用模型下载到的本地路径以加载 model_dir /root/autodl-tmp/THUCoAI/CharacterGLM-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() # 设定角色人设信息session_meta session_meta { user_info: 我是陆星辰是一个男性是一位知名导演也是苏梦远的合作导演。我擅长拍摄音乐题材的电影。苏梦远对我的态度是尊敬的并视我为良师益友。, bot_info: 苏梦远本名苏远心是一位当红的国内女歌手及演员。在参加选秀节目后凭借独特的嗓音及出众的舞台魅力迅速成名进入娱乐圈。她外表美丽动人但真正的魅力在于她的才华和勤奋。苏梦远是音乐学院毕业的优秀生善于创作拥有多首热门原创歌曲。除了音乐方面的成就她还热衷于慈善事业积极参加公益活动用实际行动传递正能量。在工作中她对待工作非常敬业拍戏时总是全身心投入角色赢得了业内人士的赞誉和粉丝的喜爱。虽然在娱乐圈但她始终保持低调、谦逊的态度深得同行尊重。在表达时苏梦远喜欢使用我们和一起强调团队精神。, bot_name: 苏梦远, user_name: 陆星辰 } # 第一轮对话 response, history model.chat(tokenizer, session_meta, 你好呀小苏, history[]) print(response) # 第二轮对话 response, history model.chat(tokenizer, session_meta, 最近对音乐有什么新的想法吗, historyhistory) print(response) # 第三轮对话 response, history model.chat(tokenizer, session_meta, 那我们商量一下下一部音乐电影的拍摄好嘛, historyhistory) print(response)代码要点拆解1. 本地路径加载与trust_remote_codeTrueCharacterGLM-6B 的官方仓库包含自定义模型代码modeling_chatglm.py、tokenization_chatglm.py等因此无论是加载分词器还是模型都必须显式传入trust_remote_codeTrue允许 Transformers 执行模型目录下随权重一同下载的自定义 Python 代码。这一点在后续的 LoRA 微调 中同样适用。2. 设备迁移与评估模式model.to(device)将模型权重迁移到 GPUcuda或 CPUmodel.eval()切换为评估模式关闭 Dropout 等训练期行为保证生成结果的确定性同时由于无需计算梯度推理期间显存占用更低。注意model.eval()与torch.no_grad()的语境不同这里仅依赖eval()模式即可完成生成。3.session_metaCharacterGLM 的核心机制session_meta是一个 Python 字典承载当前会话的完整人设信息包含 4 个键键含义本文示例值user_info用户我方的角色设定与身份背景导演陆星辰苏梦远的合作导演与良师益友bot_info模型扮演角色Bot的完整人设背景当红女歌手兼演员苏梦远的生平、性格、语言习惯bot_name模型扮演角色的名字苏梦远user_name用户角色的名字陆星辰这份人设信息会在每一轮对话中作为上下文前缀注入模型使得模型的回复始终贴合苏梦远这一角色说话带有舞台腔与礼貌语气、用词谦逊、强调我们和一起的团队感等。这是 CharacterGLM 区别于普通 Chat 模型的关键——改变session_meta的内容即可让同一个模型权重扮演完全不同的角色无需重新训练。4.model.chat()多轮对话接口model.chat()是模型自定义代码提供的便捷对话接口其调用签名为response, history model.chat(tokenizer, session_meta, query, historyhistory)tokenizer已加载的分词器session_meta上述人设字典query当前轮用户输入history历史对话列表格式为[[问1, 答1], [问2, 答2], ...]实现多轮上下文传递返回值(response, history)其中新的history已追加当前轮问答直接传入下一轮调用即可形成多轮会话。从代码可以看出第一轮传入history[]开启新会话之后每一轮都将上一轮返回的history回传从而让模型具备多轮记忆能力。仓库中的 FastAPI 部署版api.py 对应代码同样复用这一model.chat()接口将其包装为 HTTP 端点。第四步运行脚本完成部署调用在终端中执行cd /root/autodl-tmp python trans.py运行过程中终端会打印Loading checkpoint shards加载检查点分片等日志表示模型正在从磁盘加载权重CharacterGLM-6B 的权重通常被切分为多个 shard 分片依次加载。等待加载完成并短暂预热后终端即开始逐轮输出苏梦远对陆星辰的回复效果如下图所示。常见问题与排障提示显存不足OOM若在小于 24G 显存的显卡上运行可尝试降低输入长度或使用torch_dtypetorch.bfloat16或torch.half半精度加载以压缩显存占用详见 LoRA 微调文档 中的半精度加载写法trust_remote_code相关报错确认加载分词器与模型时均已传入trust_remote_codeTrueModuleNotFoundError: No module named sentencepiece回到环境准备步骤补装 sentencepiece首次加载较慢12 GB 权重从磁盘加载需要一定时间耐心等待Loading checkpoint shards进度到 100% 即可。扩展阅读从脚本到服务的完整链路完成本文的 Transformers 最小化部署后你可以沿着 models/CharacterGLM 目录下的文档体系继续深入02-CharacterGLM-6B FastApi部署调用.md将model.chat()封装进 FastAPI使用uvicorn在 6006 端口启动 HTTP 服务通过curl或requests以 JSONprompt、history、max_length、top_p、temperature等参数方式远程调用并提供torch_gc()清理显存缓存的工程实践03-CharacterGLM-6B-chat.mdclone 官方仓库thu-coai/CharacterGLM-6B运行 Streamlit Web Demo 与命令行 Demo体验带角色选择的图形化交互端口映射方法参考 General-Setting/02-AutoDL开放端口.md04-CharacterGLM-6B Lora微调.md基于 transformers peft 对模型进行 LoRA 指令微调将角色扮演能力定制到如甄嬛等自定义角色配套可运行的 04-CharacterGLM-6B-Lora微调.py 脚本与示例数据集 dataset/huanhuan.json。总结本文以 01-CharacterGLM-6B Transformer部署调用.md 为骨架完整走通了租用 GPU 实例 → pip 环境配置 → ModelScope 下载 12 GB 权重 → Transformers 加载模型 → 携带session_meta人设执行多轮对话的全流程。整个部署的代码量极小一个 Python 脚本即可却能清晰呈现 CharacterGLM-6B 最核心的工程要点trust_remote_codeTrue的自定义代码加载、model.chat()的多轮对话接口以及通过session_meta字典驱动角色扮演的对话范式。掌握这一最小部署后你可以自然迁移到 FastAPI 服务化与 LoRA 微调等更进阶的应用场景中。【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/datawhalechina/self-llm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表