GLM-4V-9B Streamlit版保姆级教程:Windows/Mac/Linux三平台部署

张开发
2026/4/20 9:32:50 15 分钟阅读

分享文章

GLM-4V-9B Streamlit版保姆级教程:Windows/Mac/Linux三平台部署
GLM-4V-9B Streamlit版保姆级教程Windows/Mac/Linux三平台部署1. 引言你是否想要在个人电脑上运行强大的多模态AI模型却苦于显存不足或环境配置复杂GLM-4V-9B作为一款支持图文对话的先进模型现在通过Streamlit版本可以轻松在消费级硬件上运行。本教程将手把手教你如何在Windows、Mac和Linux三大平台上部署GLM-4V-9B的Streamlit版本。这个版本经过了深度优化解决了官方示例在特定环境下的兼容性问题特别是实现了4-bit量化加载让即使只有8GB显存的显卡也能流畅运行。学完本教程你将能够在个人电脑上搭建完整的GLM-4V-9B运行环境通过简洁的Web界面与AI进行图文对话理解并解决常见的部署问题2. 环境准备与安装2.1 系统要求在开始之前请确保你的设备满足以下最低要求硬件要求GPUNVIDIA显卡至少8GB显存推荐RTX 3070或以上内存16GB RAM或以上存储至少20GB可用空间软件要求操作系统Windows 10/11, macOS 10.15, 或 Ubuntu 18.04Python3.8-3.10版本CUDA11.7或11.8仅NVIDIA显卡需要2.2 基础环境搭建首先我们需要安装Python和必要的工具。如果你已经安装了Python可以跳过这一步。Windows系统安装# 下载并安装Python 3.10 # 访问 python.org 下载安装包安装时勾选Add to PATH # 安装Git for Windows # 从 git-scm.com 下载并安装Mac系统安装# 使用Homebrew安装 brew install python3.10 git # 或者从python.org下载安装包Linux系统安装Ubuntu为例sudo apt update sudo apt install python3.10 python3.10-venv python3.10-dev git2.3 创建虚拟环境为了避免包冲突我们为项目创建独立的Python环境# 创建项目目录 mkdir glm4v-streamlit cd glm4v-streamlit # 创建虚拟环境 python -m venv glm4v_env # 激活虚拟环境 # Windows: glm4v_env\Scripts\activate # Mac/Linux: source glm4v_env/bin/activate激活虚拟环境后你的命令行提示符前会出现(glm4v_env)字样表示已经在虚拟环境中。3. 依赖安装与模型下载3.1 安装Python依赖在虚拟环境中安装必要的Python包# 升级pip pip install --upgrade pip # 安装核心依赖 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 安装项目依赖 pip install streamlit transformers accelerate bitsandbytes Pillow安装说明如果你使用AMD显卡或只有CPU请使用CPU版本的PyTorchbitsandbytes库负责4-bit量化大幅降低显存需求安装过程可能需要几分钟请耐心等待3.2 下载模型文件GLM-4V-9B模型文件较大约18GB我们需要使用git lfs来下载# 安装git lfs如果尚未安装 git lfs install # 克隆模型仓库这需要较长时间 git clone https://huggingface.co/THUDM/glm-4-9b-vision如果网络连接不稳定你也可以考虑使用国内镜像源手动下载模型文件并放置到正确目录使用下载工具加速4. 部署与运行4.1 获取Streamlit应用代码创建一个新的Python文件app.py并添加以下内容import streamlit as st import torch from transformers import AutoModelForCausalLM, AutoTokenizer from PIL import Image import io # 页面设置 st.set_page_config(page_titleGLM-4V-9B Chat, layoutwide) # 模型加载函数 st.cache_resource def load_model(): model_path ./glm-4-9b-vision # 动态检测视觉层数据类型 model AutoModelForCausalLM.from_pretrained( model_path, torch_dtypetorch.float16, device_mapauto, load_in_4bitTrue, trust_remote_codeTrue ) # 获取视觉层的实际数据类型 try: visual_dtype next(model.transformer.vision.parameters()).dtype except: visual_dtype torch.float16 tokenizer AutoTokenizer.from_pretrained( model_path, trust_remote_codeTrue ) return model, tokenizer, visual_dtype # 初始化会话状态 if messages not in st.session_state: st.session_state.messages [] if model_loaded not in st.session_state: st.session_state.model_loaded False # 侧边栏 with st.sidebar: st.title(GLM-4V-9B Chat) st.write(上传图片并开始对话) uploaded_file st.file_uploader( 选择图片文件, type[jpg, jpeg, png] ) if uploaded_file is not None: image Image.open(uploaded_file) st.image(image, caption上传的图片, use_column_widthTrue) st.session_state.current_image image # 加载模型 if not st.session_state.model_loaded: with st.spinner(正在加载模型这可能需要几分钟...): try: model, tokenizer, visual_dtype load_model() st.session_state.model model st.session_state.tokenizer tokenizer st.session_state.visual_dtype visual_dtype st.session_state.model_loaded True st.success(模型加载成功) except Exception as e: st.error(f模型加载失败: {str(e)}) # 聊天界面 st.title(GLM-4V-9B 多模态对话) # 显示聊天历史 for message in st.session_state.messages: with st.chat_message(message[role]): if message[type] text: st.write(message[content]) else: st.image(message[content], use_column_widthTrue) # 用户输入 if prompt : st.chat_input(输入你的问题...): if current_image not in st.session_state: st.warning(请先上传图片) st.stop() # 添加用户消息 st.session_state.messages.append({ role: user, type: text, content: prompt }) with st.chat_message(user): st.write(prompt) # 生成回复 with st.chat_message(assistant): with st.spinner(思考中...): try: # 准备输入 image st.session_state.current_image question prompt # 使用模型生成回复 response model.chat( tokenizer, image, question, history[], do_sampleTrue ) st.write(response) # 添加助手回复 st.session_state.messages.append({ role: assistant, type: text, content: response }) except Exception as e: error_msg f生成回复时出错: {str(e)} st.error(error_msg)4.2 运行Streamlit应用保存文件后在终端中运行streamlit run app.py等待片刻后你会看到类似下面的输出You can now view your Streamlit app in your browser. Local URL: http://localhost:8501 Network URL: http://192.168.x.x:8501打开浏览器访问http://localhost:8501就能看到GLM-4V-9B的聊天界面了。5. 使用指南与技巧5.1 基本操作步骤访问界面浏览器打开http://localhost:8501默认端口8501上传图片在左侧边栏选择或拖拽图片文件支持JPG/PNG格式输入问题在底部输入框输入你的问题或指令获取回答模型会分析图片并生成回答5.2 实用对话示例以下是一些你可以尝试的对话示例详细描述详细描述这张图片的内容图片里有哪些主要物体和人物文字识别提取图片中的所有文字图片中的标语是什么物体识别这张图里有什么动物找出图片中的所有交通工具场景理解这是什么场合或活动图片表达的是什么情绪或氛围5.3 使用技巧为了获得更好的对话效果可以尝试以下技巧问题要具体 instead of 描述这张图片try 详细描述图片中的建筑风格和色彩搭配分步提问 复杂问题可以拆分成多个简单问题结合上下文 在后续问题中可以引用之前的对话内容多尝试不同角度 同一个图片可以从不同角度提问获得更全面的理解6. 常见问题解决6.1 模型加载问题问题CUDA out of memory原因显存不足解决确保使用了4-bit量化load_in_4bitTrue关闭其他占用显存的程序问题RuntimeError: Input type and bias type should be the same原因数据类型不匹配解决代码中已包含自动类型适配无需手动处理6.2 运行性能优化如果感觉运行速度较慢可以尝试以下优化# 在模型加载时添加这些参数 model AutoModelForCausalLM.from_pretrained( model_path, torch_dtypetorch.float16, device_mapauto, load_in_4bitTrue, low_cpu_mem_usageTrue, # 减少CPU内存使用 trust_remote_codeTrue )6.3 网络与下载问题模型下载缓慢使用国内镜像源使用下载工具如wget、axel分段下载手动下载后放置到对应目录端口冲突 如果8501端口被占用可以指定其他端口streamlit run app.py --server.port 80807. 总结通过本教程你已经成功在个人电脑上部署了GLM-4V-9B的Streamlit版本。这个优化版本不仅解决了官方示例的兼容性问题还通过4-bit量化技术让模型能够在消费级硬件上流畅运行。关键收获学会了跨平台的Python环境配置掌握了大型AI模型的部署技巧了解了多模态模型的基本使用方式获得了解决常见部署问题的能力现在你可以开始探索GLM-4V-9B的强大能力了。尝试上传各种类型的图片问一些有趣的问题看看这个多模态AI能给你带来什么惊喜。无论是学术研究、创意工作还是日常学习这个工具都能为你提供强大的视觉理解能力。记住AI工具的价值在于如何应用它来解决实际问题。多尝试、多探索你会发现更多有趣的应用场景。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章