GLM-4V-9B快速入门9B参数视觉模型单卡24G显存就能跑想不想在自己的电脑上跑一个能看懂图片、能回答问题的AI助手今天要介绍的GLM-4V-9B就是一个90亿参数的视觉语言模型它最大的特点就是“亲民”——单张RTX 4090显卡就能流畅运行显存要求只要24GB左右。你可能听说过GPT-4V、Claude这些强大的多模态模型但它们要么需要付费使用要么对硬件要求极高。GLM-4V-9B的出现让普通开发者和研究者也能轻松拥有一个本地部署的视觉AI助手。它能做什么呢简单来说你给它一张图片它就能告诉你图片里有什么、分析图表数据、识别文字内容甚至和你进行多轮对话。这篇文章我会带你从零开始一步步把这个模型部署到你的本地环境让你亲身体验它的能力。整个过程不需要复杂的配置跟着做就行。1. 环境准备检查你的“装备”在开始之前我们先确认一下你的电脑环境是否满足基本要求。这就像组装一台新电脑前要先看看主板、电源、内存是否兼容一样。1.1 硬件和系统要求GLM-4V-9B对硬件的要求相对友好但有几个关键点需要注意操作系统推荐使用Ubuntu 20.04或更高版本。如果你用Windows建议通过WSL2来运行Linux环境这样兼容性更好。显卡这是最重要的部分。模型有两种运行模式FP16模式需要大约24GB显存。适合RTX 3090、RTX 4090、A10、A100等高端显卡。INT4量化模式只需要9-12GB显存。RTX 3060 12GB、RTX 4070等中端显卡就能跑。其他建议至少有16GB系统内存硬盘空间预留50GB以上模型文件就占了18GB。1.2 软件环境安装如果你的系统已经安装了Python和PyTorch可以直接跳到下一步。如果没有按照下面的步骤来首先安装Python 3.10或更高版本# 更新系统包管理器 sudo apt update sudo apt upgrade -y # 安装Python 3.10和相关工具 sudo apt install python3.10 python3.10-venv python3.10-dev -y然后创建一个虚拟环境这样不会影响系统原有的Python环境# 创建虚拟环境 python3.10 -m venv glm4v_env # 激活虚拟环境 source glm4v_env/bin/activate接下来安装PyTorch。这里以CUDA 11.8为例你可以根据自己显卡的CUDA版本调整pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118最后安装模型运行需要的其他依赖库pip install transformers4.45.0 accelerate tiktoken einops scipy pillow如果你想让推理速度更快强烈建议安装flash-attn需要CUDA 11.6以上pip install flash-attn --no-build-isolation到这里基础环境就准备好了。接下来我们要下载模型文件。2. 模型下载获取“大脑”文件模型文件比较大大约18GB。直接从Hugging Face下载可能会比较慢特别是国内用户。我推荐使用ModelScope魔搭社区这是国内的一个模型平台下载速度通常快很多。2.1 安装ModelScopepip install modelscope2.2 下载模型文件最简单的方式是直接用命令行下载# 下载模型到当前目录下的glm-4v-9b文件夹 modelscope download --model ZhipuAI/glm-4v-9b --local_dir ./glm-4v-9b这个过程可能需要一些时间取决于你的网络速度。下载完成后你会看到一个名为glm-4v-9b的文件夹里面包含了模型的所有文件。如果你想加快下载速度可以用Python脚本开启多线程下载from modelscope import snapshot_download model_id ZhipuAI/glm-4v-9b local_dir ./glm-4v-9b # 模型保存路径 # 开启16个线程同时下载 snapshot_download( model_id, local_dirlocal_dir, cache_dir./cache, # 临时缓存目录 max_workers16 # 线程数根据带宽调整 )把这段代码保存为download.py然后运行python download.py。多线程下载能显著提升速度特别是对于大文件。3. 基础使用第一次对话模型下载好了现在我们来写一个最简单的程序让模型“看”一张图片并回答我们的问题。3.1 创建推理脚本新建一个文件命名为inference.py把下面的代码复制进去import os import warnings import torch # 先设置环境变量减少不必要的日志输出 os.environ[TF_CPP_MIN_LOG_LEVEL] 3 os.environ[TRANSFORMERS_VERBOSITY] error os.environ[HF_HUB_DISABLE_SYMLINKS_WARNING] 1 # 屏蔽Python警告 warnings.filterwarnings(ignore, categoryFutureWarning) warnings.filterwarnings(ignore, categoryUserWarning) # 现在导入其他库 from PIL import Image import transformers from transformers import AutoModelForCausalLM, AutoTokenizer # 设置transformers的日志级别 transformers.logging.set_verbosity_error() def run_inference(): # 模型路径就是刚才下载的文件夹 model_path ./glm-4v-9b # 1. 加载分词器负责把文字转换成模型能理解的数字 print([1/4] 正在加载分词器...) tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) # 2. 加载模型到显存 print([2/4] 正在加载模型...) model AutoModelForCausalLM.from_pretrained( model_path, trust_remote_codeTrue, torch_dtypetorch.bfloat16, # 使用BF16精度节省显存 device_mapauto # 自动分配到可用的GPU ).eval() # 设置为评估模式不进行训练 # 3. 准备图片和问题 image_path demo.jpg # 你需要准备一张测试图片 query 请详细描述这张图片。 # 打开图片 try: image Image.open(image_path).convert(RGB) print(f[3/4] 已加载图片: {image_path}) except Exception as e: print(f错误无法打开图片 {image_path}) print(f详细错误: {e}) return # 4. 把图片和问题一起传给模型 print([4/4] 正在生成回答...) inputs tokenizer.apply_chat_template( [{role: user, image: image, content: query}], add_generation_promptTrue, tokenizeTrue, return_tensorspt, return_dictTrue ).to(cuda) # 移动到GPU # 5. 让模型生成回答 with torch.no_grad(): # 不计算梯度节省内存 outputs model.generate( **inputs, max_new_tokens512, # 最多生成512个token do_sampleFalse, # 不随机采样保证结果稳定 use_cacheTrue, # 使用缓存加速 eos_token_idtokenizer.eos_token_id # 结束标记 ) # 提取模型生成的回答 response_ids outputs[0][len(inputs[input_ids][0]):] response tokenizer.decode(response_ids, skip_special_tokensTrue) # 6. 打印结果 print(\n *40 模型回答 *40) print(response) print(*90) if __name__ __main__: run_inference()3.2 准备测试图片在同一个目录下放一张你想让模型分析的图片命名为demo.jpg。可以是风景照、人物照、图表截图等等。比如你可以找一张有多个物体的场景图包含文字的截图数据图表或者任何你感兴趣的图片3.3 运行脚本确保你在虚拟环境中然后运行python inference.py第一次运行会稍微慢一点因为模型需要加载到显存。你会看到类似这样的输出[1/4] 正在加载分词器... [2/4] 正在加载模型... [3/4] 已加载图片: demo.jpg [4/4] 正在生成回答... 模型回答 这张图片展示了一个现代化的城市夜景。画面中央是一座高耸的摩天大楼建筑表面覆盖着玻璃幕墙反射着周围的光线。大楼顶部有红色的航空警示灯正在闪烁。前景中可以看到其他建筑的屋顶和部分街道街道上有车辆行驶的轨迹光。天空呈深蓝色有几朵云彩。整体画面色调偏冷以蓝色和紫色为主营造出夜晚宁静而繁华的氛围。图片的构图采用了低角度仰拍突出了建筑的高度和宏伟感。 恭喜你已经成功运行了GLM-4V-9B模型。它不仅能描述图片内容还能回答更复杂的问题比如“图片里有多少个人”“这张图表显示了什么趋势”“图片中的文字是什么”“根据图片内容推测这是什么场合”你可以修改query变量尝试不同的问题。4. 进阶配置应对不同场景基础用法掌握了我们来看看一些实际应用中可能需要的进阶配置。4.1 显存不够怎么办使用量化如果你的显卡显存小于20GB运行上面的代码可能会报“显存不足”的错误。这时候可以用4-bit量化技术把模型“压缩”一下。首先安装量化需要的库pip install bitsandbytes然后修改模型加载部分的代码model AutoModelForCausalLM.from_pretrained( model_path, torch_dtypetorch.bfloat16, trust_remote_codeTrue, load_in_4bitTrue, # 关键开启4-bit量化 device_mapauto ).eval()量化后的模型显存占用会降到9-11GBRTX 3060 12GB这样的显卡就能跑了。不过量化会稍微影响一点精度但对于大多数应用来说这点精度损失是可以接受的。4.2 想要更快的速度使用vLLM如果你需要同时处理很多请求比如做成一个在线服务或者想要更快的推理速度可以用vLLM框架。它比原生的Transformers快很多。先安装vLLMpip install vllm然后启动一个API服务python -m vllm.entrypoints.openai.api_server \ --model ./glm-4v-9b \ --trust-remote-code \ --gpu-memory-utilization 0.9 \ --max-model-len 4096 \ --port 8000服务启动后你就可以用OpenAI的格式来调用它了from openai import OpenAI client OpenAI( base_urlhttp://localhost:8000/v1, api_keytoken-abc123 ) response client.chat.completions.create( model./glm-4v-9b, messages[ { role: user, content: [ {type: text, text: 描述这张图片}, {type: image_url, image_url: {url: data:image/jpeg;base64,...}} ] } ], max_tokens512 ) print(response.choices[0].message.content)这样你就可以轻松地把它集成到Web应用或者其他系统中了。4.3 调整生成参数模型生成回答时有一些参数可以调整让回答更符合你的需求outputs model.generate( **inputs, max_new_tokens512, # 最大生成长度 temperature0.7, # 温度越高越有创意越低越确定 top_p0.9, # 核采样控制多样性 do_sampleTrue, # 开启采样让回答更有变化 repetition_penalty1.1, # 重复惩罚避免重复内容 use_cacheTrue, eos_token_idtokenizer.eos_token_id )temperature建议0.5-1.0之间。写创意内容可以设高一点0.8-1.0回答事实性问题可以设低一点0.2-0.5。top_p通常0.8-0.95之间和temperature配合使用。repetition_penalty如果发现模型老是重复说同样的话可以稍微调高这个值。5. 实际应用让模型帮你做事现在模型跑起来了它能做什么实际的事情呢我举几个例子。5.1 图片内容描述这是最基本的功能但很有用。比如你有一堆产品图片想让AI自动生成描述query 这是一张产品图片请为电商平台写一段吸引人的商品描述突出产品特点和优势。模型会生成类似这样的描述 “这款智能手表采用圆形AMOLED显示屏分辨率高达466×466像素显示效果清晰细腻。表身由航空级铝合金打造重量仅45克佩戴舒适。支持心率监测、血氧检测、睡眠分析等健康功能内置GPS和NFC续航时间可达14天。适合运动爱好者和商务人士日常佩戴。”5.2 图表数据分析如果你有数据图表可以让模型帮你分析query 分析这张销售数据图表指出哪个月份销售额最高整体趋势如何并给出建议。模型会分析图表中的柱状图或折线图给出类似回答 “从图表可以看出7月份销售额达到峰值120万元1月份最低为45万元。整体呈现上升趋势特别是在第二季度增长明显。建议继续保持营销力度同时分析7月份成功因素在其他月份复制该策略。”5.3 文字识别与提取模型能识别图片中的文字这对于处理扫描件、截图很有用query 提取图片中的所有文字内容保持原有格式。5.4 多轮对话GLM-4V-9B支持多轮对话你可以基于同一张图片连续提问# 第一轮 query1 图片里有什么 # 得到回答后基于回答继续问 query2 你刚才说图片里有一只猫它是什么品种的 query3 这只猫大概多大年龄模型会记住之前的对话内容给出连贯的回答。5.5 创意应用除了这些实用功能你还可以玩一些创意应用给图片写故事“根据这张图片写一个300字的小故事。”生成营销文案“为这张产品图片写一段社交媒体文案。”内容审核“检查这张图片是否包含不合适的内容。”教育辅助“解释这张科学示意图中的原理。”6. 常见问题与解决在实际使用中你可能会遇到一些问题。这里整理了几个常见的6.1 报错AttributeError: ChatGLMTokenizer object has no attribute apply_chat_template这个问题通常是因为transformers版本太旧。GLM-4V-9B需要transformers 4.45.0或更高版本。解决升级transformerspip install --upgrade transformers如果升级后还有问题检查一下模型文件夹里是否有tokenizer_config.json文件。没有的话可能需要重新下载模型。6.2 显存溢出OOM如果看到“CUDA out of memory”错误说明显存不够了。解决减小图片尺寸把大图缩小后再传给模型使用量化按照4.1节的方法开启4-bit量化减小max_new_tokens比如从512改成256使用更小的批次如果一次处理多张图片减少同时处理的图片数量6.3 图片识别效果不好如果模型对某些图片识别不准可以尝试检查图片格式确保图片是RGB格式可以用.convert(RGB)转换调整图片大小GLM-4V-9B支持1120×1120分辨率但太大的图片可能需要缩小提供更明确的提示在问题中给出更多上下文信息尝试不同的提问方式有时候换种问法能得到更好的结果6.4 推理速度慢第一次加载模型会比较慢这是正常的。后续的推理速度取决于你的显卡。如果想提升速度使用vLLM框架见4.2节开启flash-attn环境准备时安装的使用更快的GPU调整生成参数减少max_new_tokens7. 总结GLM-4V-9B是一个很实用的视觉语言模型它最大的优势就是“接地气”——不需要昂贵的硬件单张消费级显卡就能跑起来。通过今天的教程你应该已经掌握了环境搭建从零开始准备运行环境模型下载用ModelScope快速获取模型文件基础使用写一个简单的程序让模型分析图片进阶配置应对显存不足、提升推理速度实际应用让模型帮你完成各种任务问题解决遇到常见错误知道怎么处理这个模型特别适合一些需要本地部署的场景比如企业内部应用分析产品图片、处理文档扫描件研究开发快速验证多模态AI的想法个人项目搭建自己的AI助手教育学习理解多模态AI的工作原理它的中文理解能力很强在图表分析、文字识别等方面表现不错。虽然只有90亿参数但在很多任务上能达到甚至超过一些更大模型的效果。如果你在部署过程中遇到其他问题或者有有趣的应用想法欢迎在评论区分享。多模态AI正在快速发展现在正是动手尝试的好时机。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。