很多公司的推理机器在内网,不允许装 Docker,也连不上模型仓库,但业务又要在上面跑 Ollama。卡点通常不在推理本身,而在「模型怎么进去」。这篇按搬运前准备、选搬运物、落到目标机、验证与踩坑四个环节走一遍,只讲不依赖容器的做法,并说清哪些情况下这套流程不成立。
内网隔离机器上装 Ollama,经常卡住的不是推理,而是模型怎么进去。很多公司规定不许装 Docker,也连不上外网模型仓库,运维只有一台能上外网的机器和一条单向拷贝通道。这篇就按「不依赖容器」的思路,把搬运前准备、选搬运物、落到目标机、验证与踩坑四段讲一遍,能给同事照着做。
先说清适用边界:两端 Ollama 大版本不能差太远,模型格式本身要兼容,公司也没规定只能走镜像仓库分发。满足这几条,纯文件搬运是可行的;不满足就得另走审批链路,不是换个命令能绕过去的。
搬之前先确认三件事
- 两端 Ollama 版本尽量对齐,版本跨太多时模型目录结构可能不兼容;先在站内部署测算页按目标机显存定好要搬哪个量化档位,别搬完才发现跑不动
- 记下目标机的模型存储路径:默认位置因系统而异,用环境变量 OLLAMA_MODELS 指定一个数据盘目录更稳,避免塞满系统盘
- 确认内网机器能起服务、能监听端口,但不需要外网;如果只是同一局域网,走的是普通文件拷贝,难度比跨隔离区低一个量级
版本对齐这件事最容易被忽略。源机跑得好好的模型,拷到版本差得多的目标机上可能连列表都出不来。先在源机上把版本号记下来,再去目标机核对,差得远就先升级目标机,别先搬。
- OLLAMA_MODELS
- 指定模型存放目录的环境变量,换到数据盘能避免系统盘被撑满
- 量化档位
- 同一个模型不同精度版本,决定显存占用和输出质量,搬之前要先定
- 单向拷贝通道
- 隔离环境常见的文件摆渡方式,只能从外往内拷,反向不行
到底搬哪些文件:模型目录 vs 导出包
两条路:一是把源机 OLLAMA_MODELS 下的模型文件夹整体拷走,放到目标机同一层目录;二是用导出/导入的方式打包。前者简单,路径和版本要自己对齐;后者适合要过审批、要压缩体积或跨多个隔离区的场景,包体更干净。
| 对比项 | 整体拷模型目录 | 导出/导入打包 |
|---|---|---|
| 适用场景 | 同版本、同操作系统、批量搬 | 版本不一致、只搬单个模型、要过审批 |
| 操作量 | 目录拷过去即可,路径要对齐 | 一条命令一个模型,多个要分批 |
| 体积处理 | 原样拷贝,压缩要自己另做 | 包体较干净,便于压缩和分卷 |
| 出错点 | 路径写错、权限不对、模型名对不上 | 漏搬依赖、分批时容易漏模型 |
怎么选:同版本同系统批量搬,直接拷目录最省事;版本不一致或只搬一个模型,用导入导出更稳。模型本体是只读的,搬运不会丢参数,真正会出问题的是路径写错、权限不对、模型名对不上。
落地步骤:从打包到跑通
- 源机验证先在源机正常推理一次,确认模型本身没问题,再执行停服务,避免拷到一半的残缺目录
- 打包过隔离区建议先压缩再分卷,拷贝完做一次大小或校验值比对,别指望拷过去了就是对的
- 落到目标机解压到 OLLAMA_MODELS 指向的目录,确认文件和目录的属主、读写权限正确,再用普通用户重启服务
- 最短验证重启后用列表命令确认模型出现在清单里,然后发一条最短的推理请求;不通先看服务日志,别急着重新拷
中间那步「校验值比对」值得强调。隔离区摆渡经常出现拷了一半、文件名对但内容截断的情况,只看文件在不在是不够的,至少要比对大小,条件允许就比校验值。
# 源机:记录模型目录大小和校验值;目标机:解压后比对
# 具体路径以实际 OLLAMA_MODELS 为准,不要照抄默认路径
du -sh "$OLLAMA_MODELS"
find "$OLLAMA_MODELS" -type f -exec md5sum {} + | sort > manifest.txt验证与常见坑排查顺序
不通的时候按固定顺序查,别一上来就怀疑模型文件坏了。顺序是:服务有没有起来、模型列不列得出来、能不能加载进显存、输出是否正常。每一步对应不同的原因,跳着查只会浪费时间。
- 服务起不来:看端口占用、运行用户权限、日志里的启动报错
- 模型列不出来:看 OLLAMA_MODELS 路径是否指对、目录层级是否和源机一致
- 加载不进显存:看量化档位是否超出目标机显存,回到部署测算页核对
- 输出异常或很慢:看是否走到了 GPU,去接口测速页量一下延迟基线再判断
典型坑还有几个:路径里大小写或分隔符写错、目标盘空间不足导致加载中断、模型名带冒号标签但拷进去的目录名不匹配、跨平台后符号链接失效。这些都在日志里有迹可循,别靠猜。
| 现象 | 先看哪里 | 常见原因 |
|---|---|---|
| 服务没起来 | 启动日志、端口 | 权限、端口占用 |
| 列表为空 | OLLAMA_MODELS 路径 | 路径指错、层级不一致 |
| 加载失败 | 显存占用、日志 | 档位超出显存、空间不足 |
| 速度异常 | 接口测速页 | 没走 GPU、链接失效 |
还有一点:这套做法只解决「模型怎么进去」,不解决资源够不够、性能行不行。目标机能不能长期稳定跑,得看显存和并发,别把搬运跑通当成业务上线。
下一步搬之前先去站内部署测算页核对目标机能带动的量化档位,跑通后再用接口测速页量一条延迟基线,后续排查才有参照。→常见问题
不装 Docker 会不会影响后续升级?
不会。Ollama 本身是独立进程,模型目录和程序是分开的。升级程序时模型目录可以原地保留,只要新版本仍认这个目录结构。稳妥做法是升级前把模型目录备份一份,升级后先确认模型还能列出来再删备份。
模型拷过去之后提示找不到,先查什么?
先查存放路径是否和 OLLAMA_MODELS 指向一致,再看目录名与模型名标签是否对得上,最后看权限和服务日志。多数情况是路径或命名问题,不是文件损坏。
能不能只搬一部分层来省空间?
不建议。模型目录里的各层是配套的,缺一层就加载失败。要省空间应该换更低的量化档位重新准备模型,而不是从已有目录里挑文件拷,省下的空间远不够填排查成本。