手把手教学:如何在本地运行ChatGLM3-6B对话模型
手把手教学如何在本地运行ChatGLM3-6B对话模型1. 项目简介你是否曾经遇到过这样的情况想用AI助手帮忙写代码、分析文档或者只是聊聊天但云端服务要么响应慢要么担心隐私泄露今天我要介绍的ChatGLM3-6B本地部署方案正好能解决这些问题。这个项目基于智谱AI开源的ChatGLM3-6B-32k模型我用Streamlit框架做了全新重构在你的本地电脑上打造了一个真正零延迟、高稳定的智能对话系统。不同于那些需要联网的云端服务这个方案完全在本地运行你的所有对话内容都不会离开你的电脑。最棒的是即使你只有一张RTX 4090D显卡也能流畅运行这个拥有32k超长上下文记忆的AI大脑。无论是写代码、分析长文档还是日常聊天它都能秒级响应而且彻底解决了常见的组件版本冲突问题。2. 环境准备与安装2.1 硬件要求要顺利运行ChatGLM3-6B你的电脑需要满足以下配置显卡至少RTX 4090D或同等级别的显卡显存建议12GB以上内存32GB或更多确保系统运行流畅存储空间至少20GB可用空间用于存放模型文件操作系统Windows 10/11或Linux系统都可以如果你不确定自己的显卡是否够用可以打开任务管理器查看显卡型号和显存大小。一般来说近三年购买的主流游戏显卡都能胜任。2.2 软件环境搭建首先我们需要安装必要的软件环境。推荐使用Anaconda来管理Python环境这样可以避免版本冲突。打开命令行工具依次执行以下命令# 创建新的Python环境 conda create -n chatglm python3.10 # 激活环境 conda activate chatglm # 安装核心依赖 pip install transformers4.40.2 pip install streamlit pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118这里特别指定了transformers的4.40.2版本这是经过测试最稳定的版本能避免很多兼容性问题。3. 模型下载与配置3.1 获取模型文件ChatGLM3-6B模型文件比较大大约需要12GB空间。你可以通过以下方式获取from transformers import AutoModel, AutoTokenizer # 自动下载模型需要稳定网络连接 model_name THUDM/chatglm3-6b-32k tokenizer AutoTokenizer.from_pretrained(model_name, trust_remote_codeTrue) model AutoModel.from_pretrained(model_name, trust_remote_codeTrue).half().cuda()如果网络不稳定也可以手动下载模型文件访问Hugging Face模型库搜索THUDM/chatglm3-6b-32k下载所有文件到本地目录修改代码指定本地路径3.2 模型初始化配置下载完成后我们需要对模型进行初始化设置# 模型配置 model model.eval() # 设置为评估模式 # 如果你遇到显存不足的问题可以尝试量化 # model model.quantize(8).cuda() # 8-bit量化 print(模型加载完成准备就绪)4. Streamlit界面开发4.1 基础界面搭建现在我们来创建主要的聊天界面。新建一个app.py文件写入以下代码import streamlit as st import torch from transformers import AutoModel, AutoTokenizer # 设置页面标题 st.set_page_config( page_titleChatGLM3-6B本地助手, page_icon, layoutwide ) # 初始化session状态 if messages not in st.session_state: st.session_state.messages [] if model_loaded not in st.session_state: st.session_state.model_loaded False4.2 实现模型加载与缓存使用Streamlit的缓存功能让模型只需要加载一次st.cache_resource def load_model(): 加载模型并缓存避免重复加载 try: tokenizer AutoTokenizer.from_pretrained( THUDM/chatglm3-6b-32k, trust_remote_codeTrue ) model AutoModel.from_pretrained( THUDM/chatglm3-6b-32k, trust_remote_codeTrue ).half().cuda() return model, tokenizer except Exception as e: st.error(f模型加载失败: {str(e)}) return None, None # 在侧边栏添加加载按钮 with st.sidebar: if st.button( 加载模型, typeprimary): with st.spinner(正在加载模型请稍候...): model, tokenizer load_model() if model is not None: st.session_state.model_loaded True st.success(模型加载成功)4.3 创建聊天界面现在实现主要的聊天功能# 显示聊天历史 for message in st.session_state.messages: with st.chat_message(message[role]): st.markdown(message[content]) # 用户输入 if prompt : st.chat_input(请输入您的问题...): # 添加用户消息到历史 st.session_state.messages.append({role: user, content: prompt}) with st.chat_message(user): st.markdown(prompt) # 生成AI回复 if st.session_state.model_loaded: with st.chat_message(assistant): message_placeholder st.empty() full_response # 流式输出 for response in model.stream_chat( tokenizer, prompt, historyst.session_state.messages[:-1], max_length32768 # 使用32k上下文 ): full_response response[0] message_placeholder.markdown(full_response ▌) message_placeholder.markdown(full_response) st.session_state.messages.append({role: assistant, content: full_response}) else: st.warning(请先加载模型再开始聊天)5. 运行与使用5.1 启动应用一切准备就绪后在命令行中运行streamlit run app.py你会看到类似这样的输出You can now view your Streamlit app in your browser. Local URL: http://localhost:8501 Network URL: http://192.168.1.100:8501在浏览器中打开http://localhost:8501就能看到聊天界面了。5.2 开始对话现在你可以尝试各种对话技术问答用Python写一个快速排序算法文档分析粘贴长篇文章让它总结要点代码帮助帮我调试这段代码的错误创意写作写一个关于太空探险的短故事模型支持32k上下文意味着你可以进行很长的对话它都能记住之前的聊天内容。6. 常见问题解决6.1 显存不足问题如果你遇到显存不足的错误可以尝试以下解决方案# 方法1使用8-bit量化 model model.quantize(8).cuda() # 方法2使用4-bit量化需要更多依赖 # pip install bitsandbytes # model model.quantize(4).cuda() # 方法3使用CPU模式速度会慢很多 # model AutoModel.from_pretrained(THUDM/chatglm3-6b-32k, trust_remote_codeTrue).float()6.2 性能优化建议为了让对话更加流畅你可以关闭不必要的应用程序释放更多显存调整批量大小如果处理长文本可以分批次使用最新的显卡驱动确保最佳性能定期清理对话历史避免内存占用过多7. 进阶功能扩展7.1 添加文件上传功能让AI能够分析你上传的文档uploaded_file st.file_uploader(上传文档, type[txt, pdf, docx]) if uploaded_file is not None: # 读取文件内容 text uploaded_file.getvalue().decode(utf-8) st.session_state.messages.append({role: user, content: f请分析以下文档{text}})7.2 实现对话导出添加导出聊天记录的功能if st.sidebar.button( 导出对话记录): chat_text \n.join([f{m[role]}: {m[content]} for m in st.session_state.messages]) st.sidebar.download_button( 下载对话记录, chat_text, file_namechat_history.txt )8. 总结通过这个教程你已经成功在本地部署了ChatGLM3-6B对话模型。这个方案最大的优势就是完全在本地运行不需要担心隐私问题而且响应速度极快。关键要点回顾使用Streamlit构建了轻量级聊天界面通过缓存技术实现模型一次加载多次使用支持32k超长上下文适合处理长文档完全本地运行保障数据隐私安全下一步建议尝试不同的提示词技巧获得更好的回复质量探索模型的其他能力比如代码生成、文档分析等考虑添加更多实用功能比如对话模板、预设提示词等现在你已经拥有了一个强大的本地AI助手尽情探索它的能力吧无论是工作还是学习它都能成为你的得力助手。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2460621.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!