最近在帮项目组搭本地推理环境,发现大家对 Ollama 的认知普遍停留在“能用”的阶段,而一旦涉及到模型存哪个盘、端口怎么开、并发要不要调这些实际问题,就很容易卡住。这篇文章是“大模型基础知识”系列的第三篇,前两篇聊了大模型和推理的基本概念,这篇落到工具和配置层面,把 Ollama 是什么讲清楚,再把环境变量设置的完整逻辑和步骤拆开。内容不多,但都是我在好几台机器上实际验证过的经验,适合刚装好 Ollama、准备认真用起来的朋友,也适合想把模型仓库从系统盘迁走的开发者。
1. 先理解 Ollama 的定位
1.1 一条命令背后到底做了什么
Ollama 本质上是一个本地大模型运行工具,它帮你承担了模型下载、格式转换、运行时调度这些底层工作。它的核心由一个后台守护进程、一个命令行客户端和一个模型仓库组成。你敲一条 ollama run qwen2.5:0.5b,它会先去本地模型仓库找这个模型,找不到就自动下载,然后启动推理进程,再把你带到对话界面。整个过程体感上像下载一个 App,但这背后其实跨越了好几个环节。
把它类比成手机应用商店加本地运行时的组合,可能更容易理解。应用商店负责分发,运行时负责执行。Ollama 对模型做的就是同样是分发和执行:ollama pull 负责拉模型,模型在本地跑起来后,所有推理细节都交给它处理。你不必关心 GGUF 量化文件是否匹配、算子怎么优化、显存怎么分配,这些本来很折磨人的事情,它都做了封装。
但反过来也要注意,Ollama 不是万能的。它不会帮你训练模型,也不改变模型质量,它只是把运行环节标准化。理解这一点很重要,因为很多人误以为换了 Ollama 跑同样的模型效果就会变好,其实推理效果主要由模型权重和量化精度决定,跟运行工具本身没有直接关系。
1.2 它悄悄替你处理的三件事
第一是模型格式的兼容。开源模型的文件格式很多,不同量化版本之间差异很大,Ollama 提供了一套统一的管理方式,你在 ollama pull 时指定 模型名:标签,它就知道该拉哪个版本。
第二是运行时资源的分配。GPU 显存够不够、该把模型加载到显存还是内存,Ollama 会根据硬件环境自动判断。你可以在 ollama ps 里看到当前加载到显存和内存的模型大小,这个信息在排查问题时会非常有用。
第三是提供了一个标准的本地 HTTP 接口。默认监听在 127.0.0.1:11434,任何程序都可以通过 HTTP 请求调用本地模型,不依赖特定编程语言。这意味着你可以用一个几百行的脚本去对接它,也可以把前端界面、后端服务、自动化任务全接进来。
1.3 适合谁来用
我觉得 Ollama 真正适合的场景有两类。一类是个人开发者,想在本机快速试不同模型,不想折腾复杂的 Python 推理环境;另一类是团队内部做原型验证,需要把大模型能力快速接入现有系统。如果你要处理大规模生产部署、精细化调度 GPU 资源,那需要更复杂的推理框架,Ollama 未必是最优解。但作为本地大模型的基础设施,它几乎是目前上手门槛最低的方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装与第一次运行
2.1 三个平台的安装方式与验证方法
Windows 和 macOS 的安装都很简单。Windows 直接去官网下载安装包,双击后按提示完成安装。安装完成之后 Ollama 会以后台程序形式常驻系统托盘,同时把命令行工具加入用户 PATH 环境变量。macOS 是下载 dmg 镜像,把应用图标拖进“应用程序”目录。第一次启动时系统可能会因为应用来源提示要确认,在“系统设置”里允许即可。
Linux 推荐使用官网提供的安装脚本,简单高效。脚本的基本形态是一条 curl 管道命令,建议直接去官网复制对应版本。脚本执行后会以 systemd 服务方式运行 Ollama,服务名为 ollama.service,同时也会把 ollama 命令安装到系统目录。这种方式对后续配置环境变量有影响,后面的章节会专门讲。
无论哪个平台,装完后第一步都应该验证命令是否可用。打开终端,输入:
bash复制ollama --version
如果回显一个版本号,说明命令行已经就绪。如果提示“command not found”,Windows 上大概率是安装完成后没有重新打开终端,Linux 上可能是安装脚本没走完或者 PATH 没刷新。
2.2 常用命令清单:管理模型和守护进程
装好后先用一个小体积模型做冒烟测试,我比较推荐 0.5B 到 1B 的模型,CPU 也能跑。比如:
bash复制ollama run qwen2.5:0.5b
这条命令会做三件事:拉取模型、启动后台服务、进入交互对话界面。第一次运行会先下载模型,等几秒到几十秒后,输入一句“你好”试试。退出对话用 /bye。
除了 run,下面这组命令是我日常使用频率最高的:
bash复制ollama list # 查看本地已下载的模型
ollama ps # 查看当前加载在内存/显存中的模型
ollama show 模型名:标签 # 查看模型详情,包含参数量、量化方式、上下文长度
ollama pull 模型名:标签 # 只下载模型,不启动对话
ollama rm 模型名:标签 # 删除本地模型
ollama stop 模型名:标签 # 卸载当前模型,释放显存
ollama serve # 在前台启动守护进程,适合排查问题
有一点值得提醒:ollama run 是“下载加运行”的复合命令,如果你只想预先下载模型,用 ollama pull。我经常看到有人用 run 下载完之后又不知道后台进程怎么停,其实用 ollama stop 把模型卸载,再退出托盘程序就可以了。
2.3 模型默认存储位置:提前规划别踩坑
模型文件并不是保存在你的工作目录里,Ollama 把下载下来的模型统一放在一个默认仓库目录。不同平台的默认路径差别很大:
- Windows:
C:\Users\你的用户名\.ollama\models - macOS:
~/.ollama/models - Linux(通过 systemd 服务安装):
/usr/share/ollama/.ollama/models - Linux(手动
ollama serve):~/.ollama/models
这个目录就是以后模型仓库的根目录,所有模型的权重文件、量化文件、索引信息都存在这里。一个 7B 参数的模型,下载下来通常 4GB 到 5GB,比较大的版本甚至超过 10GB。如果你把它放在 C 盘,系统盘很容易在不知不觉中被塞满。
我见过不少人在安装完成后没有检查这个目录,直到系统盘报红才开始着急。其实最合理的做法是:装好以后、首次下载大模型之前,就把模型存储目录迁到容量充足的数据盘。后面我会给一套完整的迁移流程。
3. 环境变量设置全解
3.1 环境变量在 Ollama 里意味着什么
环境变量就是一组进程启动时读取的键值对配置。Ollama 的守护进程在启动时会读取它关心的环境变量,并据此决定模型存哪、监听哪个地址、允许多少并发。这里的关键在于“启动时读取”,所以每次修改环境变量之后,都必须重启 Ollama 进程,否则新的配置不会生效。
很多人改完环境变量发现没有效果,其实不是变量名写错,而是忘了服务一直在旧环境里运行。Windows 上托盘程序不重启,Linux 上 systemd 服务不重载,配置自然停留在旧值。这个问题在后面的排查章节会重点讲。
另外还要明白环境变量的作用域。Windows 有“用户变量”和“系统变量”的区别,用户变量只影响当前用户,系统变量影响所有用户。Linux 上如果 Ollama 通过 systemd 服务运行,那么它读取的是 systemd 配置里定义的环境,而不是你当前 shell 里的 export。macOS 上安装包通常会注册 LaunchAgent,环境变量要看 launchd 的配置。搞清这个逻辑,比死记几个变量名重要得多。
3.2 核心变量速查表与设置建议
我把常用变量整理成了一张表,方便保存参考。默认值以常见版本的官方文档为准,实际使用中如果你不确定,就用 ollama --version 查看版本后,再去核对对应文档。
| 变量名 | 作用 | 默认值 | 典型设置 |
|---|---|---|---|
OLLAMA_MODELS |
指定模型仓库目录 | 平台默认目录 | D:\ollama_models、/data/ollama/models |
OLLAMA_HOST |
监听地址 | 127.0.0.1 |
0.0.0.0(允许局域网访问) |
OLLAMA_PORT |
监听端口 | 11434 |
端口冲突时改,如 11435 |
OLLAMA_KEEP_ALIVE |
模型驻留内存的时间 | 5m |
0(立即卸载)、-1(常驻) |
OLLAMA_NUM_PARALLEL |
并发请求数 | 自动 | 显存有限时调小 |
OLLAMA_MAX_LOADED_MODELS |
同时加载的模型数量 | 1 |
内存充足时可设 2 |
OLLAMA_MAX_QUEUE |
排队请求上限 | 512 |
同时请求多时增大 |
OLLAMA_DEBUG |
开启调试日志 | 空 | 1 |
这里有三个变量我要特别说一下设置思路。
OLLAMA_MODELS 是最先应该设置的。它决定了几十 GB 模型文件落到哪个磁盘,直接影响系统盘寿命和迁移成本。新装机器我建议第一件事就是把它设到数据盘。
OLLAMA_HOST 是一个安全边界。默认只监听本机回环地址 127.0.0.1,其他设备访问不了。如果你想在内网的另外一台电脑上调用这台机器的模型,就把它设为 0.0.0.0,表示监听所有网络接口。但 Ollama 本身没有用户认证,暴露到公网等于把模型推理能力裸奔出去,极度不建议。
OLLAMA_KEEP_ALIVE 是个容易忽略的调优点。默认 5m 的意思是模型空闲 5 分钟后从内存卸载。如果你频繁调用,每次重新加载都要等几秒,那可以设为 -1 让模型常驻;反过来,如果你只是偶尔试一下,为了省显存,就设为 0,每次用完立刻释放。
3.3 Windows 图形界面设置步骤
Windows 上最直观的方式是图形界面。右键“此电脑”,选择“属性”,在左侧找到“高级系统设置”,点击“环境变量”按钮,弹出的窗口分为上下两栏,上栏是当前用户变量,下栏是系统变量。
如果你只是自己用,建议在“用户变量”区域操作。点击“新建”,变量名填 OLLAMA_MODELS,变量值填你想放置模型的目标目录,比如 D:\ollama_models。点确定后,任务栏托盘找到 Ollama 图标,右键退出,再重新打开。这一步不能省略,因为托盘程序不会自动感知环境变量变化。
也可以顺手设置 OLLAMA_HOST,变量值填 0.0.0.0,然后去防火墙放行 11434 端口。放行方式是在“Windows 安全中心”的“防火墙和网络保护”里,添加一条允许 11434 TCP 入站连接的规则。需要提醒的是,只有你在内网有跨设备调用需求时才需要这么做。
改完环境变量后,新开的终端才会读取到最新配置。如果 ollama 命令还是找不到,检查用户 PATH 是否包含 Ollama 的安装目录,新版安装包一般会自动加入。
3.4 Linux 下 systemd 场景设置方法
Linux 上用官方脚本安装后,Ollama 以 systemd 服务运行,环境变量不能只写在 ~/.bashrc 里,因为服务进程并不是从你的 shell 里启动的。正确做法是给服务单元文件加一个 override 配置文件。
建议用 systemctl edit 命令,它会自动创建 override 文件:
bash复制sudo systemctl edit ollama
在弹出的编辑器里添加:
ini复制[Service]
Environment="OLLAMA_MODELS=/data/ollama/models"
Environment="OLLAMA_KEEP_ALIVE=-1"
Environment="OLLAMA_HOST=0.0.0.0"
保存退出后,执行:
bash复制sudo systemctl daemon-reload
sudo systemctl restart ollama
这种 drop-in 配置方式的好处是,不修改厂商提供的原始服务文件,后续升级 Ollama 时配置不会丢失。如果你用 systemctl cat ollama 能看到 Environment 片段,就说明配置已并入服务定义。
如果 Ollama 是你手动用 ollama serve 在前台跑的进程,那直接在启动它的那个终端里设置环境变量就行。你可以把 export 语句写进 ~/.bashrc 或 ~/.profile,但要注意,从图形界面启动的终端有时不读 ~/.bashrc,可能还需要加进 ~/.profile 才能保证各种登录方式下都生效。
3.5 macOS 场景设置方法
macOS 稍微特殊一点。用官方 dmg 安装时,Ollama 会注册一个 LaunchAgent,路径通常在 /Users/你的用户名/Library/LaunchAgents/com.ollama.plist。要让环境变量对该服务生效,需要编辑这个 plist 文件,在 <dict> 部分添加:
xml复制<key>EnvironmentVariables</key>
<dict>
<key>OLLAMA_MODELS</key>
<string>/Volumes/SSD/ollama_models</string>
<key>OLLAMA_KEEP_ALIVE</key>
<string>-1</string>
</dict>
修改完重新加载服务:
bash复制launchctl unload ~/Library/LaunchAgents/com.ollama.plist
launchctl load ~/Library/LaunchAgents/com.ollama.plist
如果你的 Ollama 是用 Homebrew 安装的,服务文件的位置可能会不一样,用 brew services list 查看服务状态,再用 brew services restart ollama 重启。本质上还是同一套逻辑,让启动服务的进程在启动前读到新的键值对。
4. 实战:把模型目录迁移到数据盘
4.1 迁移的完整操作流程
我建议大家在首次下载大模型之前就做迁移,这样省去拷贝已有模型的麻烦。但如果你已经下载了一些模型,迁移也不复杂,关键是顺序要对。
第一步,停止 Ollama 的守护进程。Windows 上从托盘退出;Linux 上执行 sudo systemctl stop ollama;macOS 上退出应用并执行 launchctl 卸载命令。这一步必须做,否则文件正被占用,复制过去会出现不完整或权限问题。
第二步,创建新目录。比如在 D 盘根目录建 D:\ollama_models,或者 Linux 上建 /data/ollama/models。
第三步,设置环境变量。按前面章节的方法把 OLLAMA_MODELS 指向新目录。
第四步,启动 Ollama 一次。这一步的目的是让进程在空目录里创建好模型仓库的基本结构。不要急着拷文件,让服务空跑一次,确认新目录下有 models 结构,或者至少服务能正常起来。
第五步,把旧目录中的内容复制到新目录。Windows 用户可以直接用资源管理器全选复制,或者用 robocopy 更稳妥。Linux 推荐用 rsync:
bash复制sudo rsync -av /usr/share/ollama/.ollama/models/ /data/ollama/models/
第六步,重启 Ollama,执行 ollama list 确认模型列表还在。如果一切正常,旧的空目录可以保留,但不要急着删,先观察几天再用。磁盘空间确实吃紧时再清理,避免误删模型文件。
第七步,删除旧目录。注意当你删除旧目录后,如果模型仍然正常调用,说明仓库已经完整迁移到了新路径。万一之后 ollama list 显示没有了,就是复制过程中文件不完整,可以回到旧目录恢复原状。
4.2 权限与路径问题:迁移中最容易翻车的两个点
第一个坑是 Linux 下所有权错乱。用 systemd 安装的 Ollama,服务进程以 ollama 用户运行,模型目录的所有者也应该是 ollama。如果你用 root 身份把文件复制到 /data/ollama/models,新文件的所有者会是 root,Ollama 进程可能会没有权限读取。迁移完记得检查一次:
bash复制sudo chown -R ollama:ollama /data/ollama/models
第二个坑是路径里面有中文、空格或者特殊符号。环境变量解析这类路径时,不同系统处理方式不太一样。为了避免奇怪问题,模型目录路径尽量只用英文字母、数字和短横线。Windows 上更不建议把模型目录放在 OneDrive、云同步目录里,大文件同步会拖垮性能。
4.3 验证迁移结果
迁移完成后,可以做个最简单有效的验证。先 ollama list 看模型数量是否和以前一致,再运行一次 ollama run qwen2.5:0.5b 测试推理。然后打开任务管理器或者 du -sh /data/ollama/models,确认磁盘占用真的出现在新目录。
还有一个技巧是故意做一个破坏性测试:把 ollama show 指向一个模型,查看它的路径信息。旧版本中模型文件以哈希值形式存在 blobs 目录里,而不是直接以模型名展示,所以不要因为看不到模型名目录就以为没迁移成功。模型仓库内部结构是统一的,你只要看到新目录的 blobs 目录有较大的磁盘占用,就基本可以确定迁移完成。
5. 常见问题与排查技巧实录
5.1 环境变量改完却不生效
这个问题出现频率最高。先检查是不是终端没重开,Windows 下旧终端窗口不会自动更新环境变量,必须新开一个。再检查 Ollama 进程有没有重启,托盘程序不从新环境变量启动的话,配了等于没配。Linux 下则要区分是 systemd 服务还是手动进程。如果你在 shell 里 export 了变量,但 Ollama 是通过 systemd 启动的,它根本读不到你的 shell 变量。
还有一个排查技巧:用 ollama ps 或 ollama show 看运行时状态。如果你设置了 OLLAMA_DEBUG=1,重启服务后看日志,里面会打印它实际读取到的模型路径。这是最直接的验证方式,比反复猜要高效得多。
5.2 端口占用与局域网访问
Ollama 默认端口是 11434,如果启动失败或者外部访问不通,先检查端口是否被占用。Windows 上用:
text复制netstat -ano | findstr 11434
Linux 和 macOS 上用:
bash复制lsof -i :11434
如果发现端口被其他程序占用,最省事的方案是换端口,设置 OLLAMA_PORT 为另一个可用端口。局域网访问不通时,先确认 OLLAMA_HOST 已设为 0.0.0.0,再确认防火墙是否放行了对应端口。很多时候不是程序问题,而是系统防火墙拦截了入站流量。
需要说明的是,单纯设置 OLLAMA_HOST=0.0.0.0 只会让服务监听所有网卡,但 Windows 防火墙默认可能还会拦截外部访问,所以在内网开放端口时,防火墙规则这一步不能少。
5.3 模型下载中断与磁盘空间
模型比较大的话,下载中断很常见。ollama pull 本身有重试机制,断了之后重新执行一次,一般会从断点处继续,而不是从头开始。如果反复在同一进度失败,优先检查两件事:磁盘剩余空间是否够,网络环境是否稳定。
磁盘空间不足往往会被忽略,因为用户只看到下载进度卡在 99%。建议下载前用 df -h 或者磁盘属性确认,模型文件要占的实际空间可能比模型标注的权重文件更大,预留出 20% 余量比较稳。下载速度慢的时候,可以选在低峰时段重试,或者下载体积更小的量化版本模型。我个人的经验是,不要在下大模型的同时运行多个拉取任务,既拖网速,又容易触发排队限制。
5.4 显存、并发与上下文调优
很多人反映模型跑起来后“推理突然变慢”或者“直接内存溢出”。这通常不是网络问题,而是并发参数和资源不匹配。当 OLLAMA_NUM_PARALLEL 设置得过大,或者 OLLAMA_MAX_LOADED_MODELS 大于 1,多个模型同时驻留显存,就可能超过硬件容量。
我的建议是从小往大调,不要一上来就追求高并发。先保持默认,观察单次请求的响应时间和资源占用,再逐步增大 OLLAMA_NUM_PARALLEL。如果显存持续紧张,除了调小并发,还可以考虑两个方面:一是用更小的模型,比如 7B 换成 3B 或 0.5B;二是在对话中调整上下文窗口长度,num_ctx 越大占用的显存越多,如果日常回答不涉及长文档,把它从默认值调到 2048 或者 4096 会明显缓解压力。
当你在多个人同时使用同一台机器上的 Ollama 时,建议把 OLLAMA_KEEP_ALIVE 适当调大,比如 -1,让模型常驻内存,避免每次请求都触发冷加载。如果是个人机器,用完就释放更划算。
5.5 常见问题速查表
| 问题现象 | 排查方向 | 推荐解决方式 |
|---|---|---|
ollama 命令找不到 |
PATH 未生效或安装不完整 | 重开终端,检查 PATH,必要时重装 |
| 环境变量改了没变化 | 服务未重启或作用域不对 | 重启托盘/systemd/LaunchAgent,重新加载配置 |
| 模型卡在下载中 | 网络波动或磁盘空间不足 | 重试 ollama pull,检查磁盘余量 |
| 局域网设备访问不了 | 端口被防火墙拦或 HOST 未放开 | 设 OLLAMA_HOST=0.0.0.0,防火墙放行端口 |
| 显存/内存溢出 | 并发过高或模型过大 | 调小 OLLAMA_NUM_PARALLEL,换小模型 |
| 模型一调用就卡 | 冷加载耗时 | 调大 OLLAMA_KEEP_ALIVE 或设为 -1 |
| 莫名多占几个 GB 磁盘 | 多个模型叠加 | 用 ollama list 和 ollama rm 清理不用的模型 |
我自己在实际使用中有一个体会:环境变量本身没有多深的技术含量,真正考验人的是对“服务在哪一层启动、从哪个环境读取配置”这件事的理解。很多人卡住,不是因为代码写不出来,而是不清楚 Windows 用户变量、Linux systemd、macOS launchd 之间配置传递的差异。只要把“启动时读取”和“改完必须重启”这十个字记牢,大部分配置问题都能迎刃而解。
最后分享一个小技巧:如果你会在一台新机器上重复配置 Ollama,建议把你要用到的变量先写到一份固定的配置片段里,Windows 上手动填,Linux 上直接放到 override 文件,macOS 上改 plist。以后换机器的时候照着做一遍,十分钟就能把环境复制好。下一篇我会继续写模型文件的底层存储结构,以及如何用 Modelfile 定制自己的模型,欢迎接着往下看。
