
使用 Ollama 本地部署 Qwen3.5-4B 多模态模型背景对于大模型初学者来说本地部署的第一步不一定是直接追求最大、最强的模型而是先把完整流程跑通。一个比较完整的入门流程通常包括下载模型本地运行模型命令行对话API 调用图片输入测试查看显存占用理解模型量化方式本次选择的模型是qwen3.5:4b这是 Qwen3.5 系列的 4B 多模态模型支持文本和图像输入适合用来学习本地多模态大模型部署。Ollama 可以简单理解为一个本地大模型运行器。它不是模型本身而是负责模型下载、模型管理、本地推理和 API 服务。使用 Ollama 的好处是安装和使用比较简单可以直接下载量化模型默认提供本地 HTTP API支持 GPU 加速适合快速验证模型效果适合初学者理解本地部署流程Ollama 和 Python 环境的关系Ollama 不是 Python 包也不是安装在 conda 的 base 环境里。它是一个独立的本地服务。可以这样理解Ollama 负责运行模型。Python 脚本只是客户端通过 HTTP 请求调用 Ollama。conda 环境只影响 Python 代码不影响 Ollama 本体。后续 Python 调用 Ollama 时本质上是访问http://localhost:11434/api/chat所以不用担心 Ollama 会污染 Python 环境。模型目录规划Ollama 默认会把模型文件放在系统目录中。随着后续下载的模型越来越多可能会占用较多系统盘空间。因此建议提前设置一个独立的模型存储目录例如OLLAMA_MODELS_DIR这里可以替换成自己的数据盘路径。后续所有通过 Ollama 下载的模型都会统一放在这个目录中方便管理。注意在 systemd 服务配置中建议使用绝对路径不要使用~因为服务环境中不一定会自动展开当前用户目录。安装 Ollama网络稳定时可以直接使用官方安装方式curl-fsSLhttps://ollama.com/install.sh|sh安装完成后检查whichollama ollama-v如果能看到 Ollama 的路径和版本号说明安装成功。如果网络不稳定直接安装可能会遇到下载中断例如curl: (92) HTTP/2 stream was not closed cleanly tar: 归档文件中异常的 EOF这通常表示安装包下载到一半中断导致压缩包不完整。更稳妥的方式是先完整下载安装包再手动解压。创建安装目录mkdir-pAPP_DIR/ollama_installcdAPP_DIR/ollama_install安装下载和解压工具sudoaptupdatesudoaptinstall-yaria2 zstd使用 aria2c 断点续传下载aria2c-x8-s8-k1M-c\https://ollama.com/download/ollama-linux-amd64.tar.zst\-oollama-linux-amd64.tar.zst下载完成后检查压缩包是否完整unzstd-tollama-linux-amd64.tar.zst如果没有报错再解压安装sudotar--use-compress-programunzstd-xfollama-linux-amd64.tar.zst-C/usr再次检查whichollama ollama-v创建模型存储目录创建模型目录sudomkdir-pOLLAMA_MODELS_DIR如果是手动安装系统里可能还没有ollama用户。可以先检查idollama如果提示用户不存在则创建 Ollama 系统用户sudouseradd-r-s/bin/false-U-m-d/usr/share/ollama ollama然后把模型目录权限交给 Ollamasudochown-Rollama:ollamaOLLAMA_MODELS_DIR这样 Ollama 服务才能正常读写模型文件。配置 Ollama 后台服务创建 systemd 服务文件sudotee/etc/systemd/system/ollama.service/dev/nullEOF [Unit] DescriptionOllama Service Afternetwork-online.target [Service] ExecStart/usr/bin/ollama serve Userollama Groupollama Restartalways RestartSec3 EnvironmentPATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin EnvironmentOLLAMA_MODELSOLLAMA_MODELS_DIR [Install] WantedBymulti-user.target EOF这里需要把OLLAMA_MODELS_DIR替换成自己的模型目录绝对路径。如果需要使用 NVIDIA GPU建议给ollama用户添加显卡访问权限sudousermod-aGvideo ollama getent group render/dev/nullsudousermod-aGrender ollama重载并启动服务sudosystemctl daemon-reloadsudosystemctlenable--nowollama查看服务状态systemctl status ollama --no-pager如果看到active (running)说明服务启动成功。检查模型目录环境变量是否生效systemctl show ollama--propertyEnvironment如果输出中包含OLLAMA_MODELSOLLAMA_MODELS_DIR说明模型目录配置成功。下载并运行 Qwen3.5-4B下载模型ollama pull qwen3.5:4b下载成功后通常会看到类似信息verifying sha256 digest writing manifest success查看本地模型列表ollama list检查模型目录大小du-shOLLAMA_MODELS_DIR如果模型目录出现几个 GB 的占用说明模型已经下载到了指定位置。启动模型ollama run qwen3.5:4b进入交互界面后可以直接输入你好请介绍一下你自己。如果模型正常回复说明本地模型已经成功运行。退出交互模式可以使用Ctrl D或者输入/bye查看模型信息和量化级别查看模型信息ollama show qwen3.5:4b可以看到类似信息architecture qwen3 parameters 4.7B context length 262144 embedding length 2560 quantization Q4_K_M capabilities completion, vision, tools, thinking其中最关键的是quantization Q4_K_M这说明当前下载的是 4-bit 量化版本。可以简单理解为Q4_K_M 是 GGUF / llama.cpp 体系中的一种 4-bit 权重量化格式。它接近 INT4 级别的压缩但不是最朴素的 int4而是包含分组、scale 等机制的量化格式。这也是为什么模型文件只有几 GB运行时显存占用也比较低。如果使用 FP16 原始权重4B 参数模型理论上仅权重就需要大约 8GB 显存4B × 2 bytes ≈ 8GB这还不包括 KV cache、运行时缓存、视觉编码器开销和上下文长度开销。而 Ollama 下载的通常是量化模型例如 Q4_K_M。量化后模型权重明显变小所以实际显存占用会低很多。检查是否使用 GPU可以打开一个新终端执行watch-n1nvidia-smi然后在另一个终端运行模型或发送 API 请求。如果nvidia-smi中出现 Ollama 进程并且显存占用增加说明模型正在使用 GPU。也可以查看当前正在运行的 Ollama 模型ollamaps测试本地 APIOllama 默认 API 地址是http://localhost:11434可以使用 curl 测试文本输入curlhttp://localhost:11434/api/chat\-d{ model: qwen3.5:4b, messages: [ { role: user, content: 你好请用三句话介绍一下你自己。 } ], stream: false }如果返回 JSON并且其中包含模型回复说明本地 API 调用成功。因为qwen3.5:4b是多模态模型所以也可以测试图片输入。假设有一张图片IMAGE_PATH先将图片转成 base64IMG$(base64-w0IMAGE_PATH)然后发送请求curlhttp://localhost:11434/api/chat\-d{\model\:\qwen3.5:4b\,\messages\: [ {\role\:\user\,\content\:\请描述这张图片并判断图中是否有车辆、建筑、道路、水体或裸土。请用 JSON 格式输出。\,\images\: [\$IMG\] } ],\stream\: false,\options\: {\temperature\: 0.2,\num_ctx\: 4096 } }如果模型能够返回图片描述说明多模态输入已经跑通。使用 Python 调用 Ollama API后续如果要批量处理图片更推荐使用 Python 调用本地 API。示例脚本如下importbase64importjsonimportrequestsfrompathlibimportPath MODELqwen3.5:4bURLhttp://localhost:11434/api/chatIMAGE_PATHIMAGE_PATHdefencode_image(image_path:str)-str:returnbase64.b64encode(Path(image_path).read_bytes()).decode(utf-8)defmain():image_b64encode_image(IMAGE_PATH)payload{model:MODEL,messages:[{role:user,content:(你是一个图像理解助手。请判断图像中主要包含什么内容是否有车辆、建筑、道路、水体或裸土。请严格用 JSON 输出格式为{\summary\:\一句话描述\, \objects\:[\车辆\,\建筑\], \reason\:\简短原因\}),images:[image_b64]}],stream:False,options:{temperature:0.2,num_ctx:4096}}responserequests.post(URL,jsonpayload,timeout120)response.raise_for_status()dataresponse.json()contentdata[message][content]print(模型原始输出)print(content)try:parsedjson.loads(content)print(\n解析后的 JSON)print(json.dumps(parsed,ensure_asciiFalse,indent2))exceptException:print(\n注意模型输出不是严格 JSON后续可以加强提示词或做 JSON 清洗。)if__name____main__:main()运行脚本python test_qwen35_image.py常用 Ollama 命令查看已下载模型ollama list运行模型ollama run qwen3.5:4b查看模型信息ollama show qwen3.5:4b查看正在运行的模型ollamaps删除模型ollamarmqwen3.5:4b查看 Ollama 服务状态systemctl status ollama --no-pager重启 Ollama 服务sudosystemctl restart ollama查看模型目录大小du-shOLLAMA_MODELS_DIR