Docker 部署 ollama 使用 qwen 模型
文档:https://docs.ollama.com/docker
qwen3.5:4b 模型:https://ollama.com/library/qwen3.5:4b qwen3.5:4b-q4_K_M 模型:https://ollama.com/library/qwen3.5:4b-q4_K_M
拉取镜像并启动
shell
# 镜像 3.13GB
docker pull ollama/ollama:0.17.7
# 启动
docker run \
--name ollama-code \
-p 11434:11434 \
--restart=unless-stopped \
-v /opt/ollama-code:/root/.ollama \
-d ollama/ollama:0.17.7拉取 qwen3.5:4b-q4_K_M 模型
shell
# 方式1:进入容器内部执行(推荐)
docker exec -it ollama-code ollama pull qwen3.5:4b-q4_K_M
# 方式2:外部通过API拉取(效果一致)
curl http://localhost:11434/api/pull -d '{
"name": "qwen3.5:4b-q4_K_M"
}'测试模型是否可用
shell
# 方式1:在本地运行。容器内交互式对话
docker exec -it ollama-code ollama run qwen3.5:4b-q4_K_M
# 输入测试指令:比如 "写一个Java计算斐波那契数列的函数",回车即可得到代码shell
# 方式2:API调用(编程集成用)
curl http://localhost:11434/api/generate -d '{
"model": "qwen3.5:4b-q4_K_M",
"prompt": "写一个Java计算斐波那契数列的函数",
"stream": false # 非流式输出,便于查看结果
}'查看已下载的模型
shell
# 如果是 Docker 环境(当前场景)
docker exec -it ollama-code ollama list
# 如果是本地 Ollama 环境(补充参考)
ollama list删除指定模型
shell
# Docker 环境删除 qwen3.5:4b-q4_K_M(你的高内存模型)
docker exec -it ollama-code ollama rm qwen3.5:4b-q4_K_M
# 本地环境删除示例(补充参考)
ollama rm qwen3.5:4b-q4_K_M
# 也可以用模型 ID 删(从 ollama list 中获取)
docker exec -it ollama-code ollama rm 1234567890
# -f 强制删除
docker exec -it ollama-code ollama rm -f qwen3.5:4b-q4_K_M
# 删除模型后,Ollama 可能会残留少量缓存文件,可通过以下命令彻底清理
# Docker 环境进入容器
docker exec -it ollama-code sh
# 清理 Ollama 缓存(容器内执行)
ollama prune
# 或直接一键执行(无需进入容器)
docker exec -it ollama-code ollama pruneqwen3.5:4b-q4_K_M 和 qwen3.5:4b 的差异说明
在 Ollama 中,qwen3.5:4b-q4_K_M 和 qwen3.5:4b 核心差异在于量化精度与量化算法——前者是明确指定了 4bit K_M 量化的版本,后者是 Ollama 预设的默认 4bit 量化版本(底层也基于 K_M 算法,但命名更简化)。下面拆解具体区别和选择逻辑:
核心概念先理清
在解释区别前,先明确两个关键术语(新手友好版):
- 4B:模型参数量为 40 亿,是 Qwen3.5 系列的轻量版本,适合低内存设备;
- 量化:通过降低模型参数的数值精度(如从 16bit 降到 4bit),减少内存占用,牺牲少量精度换可运行性;
- Q4_K_M:是当前主流的 4bit 量化算法(属于 GGUF 格式的
K系列量化),K代表针对大模型优化的新一代量化算法,M代表「混合精度」(对不同层采用不同量化策略),是平衡精度和内存的最优 4bit 方案。
两者的具体区别
| 维度 | qwen3.5:4b(默认版) | qwen3.5:4b-q4_K_M(显式指定版) |
|---|---|---|
| 量化核心 | 默认为 Q4_K_M 量化(Ollama 预设) | 明确指定 Q4_K_M 量化,无歧义 |
| 内存占用 | ~2.5GB(运行时总占用 3-4GB) | ~2.5GB(和默认版完全一致) |
| 精度/响应质量 | 与 Q4_K_M 无差异 | 量化算法明确,精度可控 |
| 命名逻辑 | 简化命名,面向普通用户 | 精确命名,面向需要明确量化参数的用户 |
| 兼容性 | 依赖 Ollama 版本(旧版可能用老算法) | 强制使用 Q4_K_M,跨版本更稳定 |
关键细节拆解
为什么默认版 qwen3.5:4b 本质和 Q4_K_M 一致?
Ollama 对 Qwen3.5 系列的预设规则是:所有未指定量化后缀的 4B/8B/14B 版本,默认采用 Q4_K_M 量化(这是 Ollama 官方为平衡性能和精度选择的最优 4bit 方案)。
qwen3.5:4b=qwen3.5:4b-q4_K_M(底层完全相同);- 类似的,
qwen3.5:8b=qwen3.5:8b-q4_K_M,以此类推。
显式指定 q4_K_M 的意义
虽然两者底层一致,但显式指定后缀有两个核心价值:
无歧义:避免 Ollama 版本更新后默认量化算法变更(比如未来默认改成 Q4_0),保证模型量化策略固定;
可追溯:在配置/脚本中明确量化参数,团队协作或部署时更清晰,比如:
properties# 显式指定,可读性更强 spring.ai.ollama.chat.model=qwen3.5:4b-q4_K_M # 简化版,依赖 Ollama 预设 spring.ai.ollama.chat.model=qwen3.5:4b
其他量化后缀的对比(拓展)
如果看到其他后缀(如 q4_0/q5_K_M),可参考下表理解差异(以 4B 模型为例):
| 量化版本 | 内存占用 | 精度 | 适用场景 |
|---|---|---|---|
| Q4_0 | ~2.2GB | 略低 | 极致省内存(如 4GB 设备) |
| Q4_K_M | ~2.5GB | 优 | 平衡首选(默认) |
| Q5_K_M | ~2.8GB | 更优 | 内存充足(如 8GB 设备) |
总结
- 核心等价:
qwen3.5:4b是qwen3.5:4b-q4_K_M的简化命名,两者量化算法、内存占用、响应质量完全一致; - 选择建议:
- 普通使用:选
qwen3.5:4b即可,命名简洁; - 生产环境/精准配置:选
qwen3.5:4b-q4_K_M,明确量化策略,避免版本变更风险;
- 普通使用:选
- 关键结论:两者无性能/精度差异,仅命名和配置明确性不同,4GB 物理内存即可流畅运行(系统占用+模型共 3-4GB)。
扩展提示
- 若你的设备内存≤4GB,优先选
qwen3.5:4b-q4_0(比 Q4_K_M 省约 300MB 内存); - 若内存≥8GB,可尝试
qwen3.5:4b-q5_K_M(精度更高,响应质量更好); - 验证量化版本:可通过
ollama show qwen3.5:4b --details查看模型详情,会显示quantization_level: Q4_K_M。
