大模型本地部署:用Ollama 3分钟部署Llama 3.1,4GB显存流畅运行
结论先说:用 Ollama 本地部署 Llama 3.1 是当前门槛最低的路径,安装一条命令,拉取模型后即可对话;显存不足时它会自动把部分层放到内存,几 GB 量级显卡也能跑起来,只是速度取决于硬件。
先看清前提:你的机器能跑多大的 Llama 3.1
Ollama 模型库里 Llama 3.1 常用的是 8b 和 70b 两个规格,社区还有大量微调版。个人电脑现实的选择是 8b;70b 建议至少 48GB 显存,或者大内存加 CPU 慢速推理,普通台式机不必考虑。
显存需求不能只看参数量。以 8b 为例,fp16 权重约 16GB,q8 约 8GB,q4 约 4 到 5GB,不同量化方案有浮动。除权重之外还要留 KV Cache 和运行开销,上下文 8k 时通常再吃 1GB 上下,拉到 32k 会明显上涨。所以标题里 4GB 显存那类说法要打折听,它指的是 q4 量化、短上下文、部分层卸载到 CPU 的状态,能出字,但速度有限。
先确认环境:
nvidia-smi
ollama --version
Mac 用户看“关于本机 → 更多信息”,统一内存是显存与内存共用的池子,M 系列 8GB 起步可以跑 8b 的 q4 版本,16GB 以上体验明显好一档。
安装 Ollama:一行脚本与 Windows/macOS 的差异
先装运行时,再谈模型。
Linux 服务器用官方脚本最省事:
curl -fsSL https://ollama.com/install.sh | sh
systemctl status ollama
脚本会装好二进制、创建 ollama 用户、注册 systemd 服务。想指定模型目录,先设环境变量再启动:
export OLLAMA_MODELS=/data/ollama/models
Windows 和 macOS 直接去 ollama.com 下载安装包,装完托盘常驻,命令行里 ollama 就能用。Windows 要改模型存储位置,在系统环境变量里加 OLLAMA_MODELS 后重启服务,否则默认放在 C 盘用户目录,模型多了很快吃掉几十 GB。
这一步常见的坑是网络。权重从官方仓库拉取,直连经常超时,可以配代理,或在能访问的机器上预先 pull,再整体拷贝 ~/.ollama/models 目录。
拉取与运行:模型标签怎么选、量化怎么挑
拉取和运行是两个动作:
ollama pull llama3.1:8b
ollama run llama3.1:8b
pull 只下载,run 启动交互式会话,没下载会自动下载。标签不写默认走 latest,建议显式写 8b 或带量化后缀,避免默认标签变动把脚本搞乱。想确认本地模型和磁盘占用:
ollama list
ollama show llama3.1:8b
show 会打出参数量、上下文长度、量化类型。上下文默认通常是 8k,各版本有差异,以输出为准。要临时拉长:
ollama run llama3.1:8b --num-ctx 16384
如果显存紧张,可以写一个 Modelfile 把量化、上下文、系统提示固定下来:
FROM llama3.1:8b
PARAMETER num_ctx 8192
PARAMETER num_gpu 20
SYSTEM "你是一个简洁的中文助手。"
再执行 ollama create my-llama -f Modelfile,以后用 ollama run my-llama 就是这套配置。num_gpu 控制往 GPU 放多少层,调小就多卸载到 CPU,显存占用随之下降。
显存不够时的关键环节:分层卸载与参数调参
真正决定能不能跑的是显存与模型大小的匹配度。Ollama 会自动估算并把超出的层放到 CPU 和内存,于是画面变成能出字但很慢。
监控两条命令:
ollama ps
nvidia-smi
ollama ps 的 PROCESSOR 列会显示类似 100% GPU、40%/60% CPU/GPU,一眼看出卸载程度。
可调参数:
- num_gpu:放 GPU 的层数,越小越省显存、越慢;
- num_ctx:上下文长度,对显存影响接近线性,能小就小;
- num_thread:CPU 线程数,建议设成物理核心数;
- OLLAMA_NUM_PARALLEL:并发数,家用机器设 1,设高显存成倍涨;
- OLLAMA_KEEP_ALIVE:驻留时间,交互用 30m,脚本调用设 0 用完即卸。
实用顺序:先把 num_ctx 降到 4096,再看 ps 的卸载比例;仍大部分在 CPU,就把 num_gpu 往下调,保证显存不爆,稳定比峰值速度重要。
用 API 把本地模型接进自己的工具
Ollama 默认监听 127.0.0.1:11434,起服务:
ollama serve
curl http://127.0.0.1:11434/api/generate -d '{
"model": "llama3.1:8b",
"prompt": "用三句话解释 DNS 解析过程",
"stream": false
}'
它也提供 OpenAI 兼容接口,路径是 /v1/chat/completions,客户端只要改 base_url:
base_url = "http://127.0.0.1:11434/v1"
api_key = "ollama"
局域网内其他机器要访问,改 OLLAMA_HOST=0.0.0.0:11434 后重启服务并放行防火墙。这等于把模型暴露给内网,不要直接开到公网。
常见报错与速度参考
- 提示模型超出系统内存:换更小的量化或更小参数版本;
- 拉取卡在某个百分比:网络问题,配代理或换时间段重试;
- 首次回答特别慢:权重从磁盘加载,第二次起会快,把 OLLAMA_KEEP_ALIVE 调长可保留;
- 输出重复或语无伦次:上下文太小或量化太狠,换 q4_K_M 以上的量化;
- 速度参考:纯 GPU 跑 8b 的 q4,消费级显卡常见几十 token/s,部分卸载到 CPU 后往往掉到个位数。数字随硬件差异大,以 ollama run --verbose 的输出为准。
判断标准可以简单些:本地问答、草稿、轻量代码补全,8b 量化版够用;要长上下文、高并发、稳定低延迟,本地小显存方案不划算,租卡或用云端 API 更省事。