4、模型加载故障:显存不足、模型文件损坏、依赖缺失

模型加载失败,是 Ollama 运维里最常见的「拦路虎」。

我遇到过不少新手,一上来就拉了个 70B 的大模型,然后盯着黑屏发呆。其实说白了,就三类问题:显存不够、文件坏了、缺东西。咱们一个一个拆开聊。

4.1 显存不足:最直白的「装不下」

显存不足,错误日志里通常长这样:

Error: CUDA out of memory. Tried to allocate 2.34 GiB (GPU 0; 8.00 GiB total capacity; 5.23 GiB already allocated; 1.02 GiB free; 5.89 GiB reserved in total by PyTorch)

嗯,看到这个,基本就是模型太大,或者显存被别的进程占了。

为什么会这样?

每个模型加载时,需要把参数、中间计算结果都塞进显存。比如一个 7B 的模型,量化成 Q4 大概需要 4-5GB 显存。你显卡只有 6GB,再跑个浏览器,那就炸了。

核心判断逻辑:

  • 模型参数量 × 量化精度 ≈ 显存需求
  • 7B Q4 约 4-5GB
  • 13B Q4 约 8-10GB
  • 70B Q4 约 40-50GB

我个人的排查习惯:

  1. 先跑 nvidia-smi 看看显存还剩多少。
  2. 如果显存够,但报错,检查是不是有残留进程占着显存。用 fuser -v /dev/nvidia* 查一下。
  3. 实在不够,换小模型,或者用 CPU 模式(虽然慢,但能跑)。

小技巧:ollama run --help 看看有没有 --num-gpu 参数,可以限制 GPU 使用量。不过说实话,这只能缓解,不能根治。

4.2 模型文件损坏:下载一半断了

模型文件损坏,错误信息五花八门。最常见的是:

Error: model file is corrupted or incomplete
Error: unexpected EOF
Error: checksum mismatch

我遇到过最坑的一次,是公司网络不稳定,下载到 90% 断了,但 Ollama 没报错,只是加载时一直卡住。后来我手动检查了文件大小,才发现少了 2GB。

怎么排查?

  • 检查模型文件大小:ls -lh ~/.ollama/models/blobs/
  • 对比官方给出的 SHA256 校验值。Ollama 的模型文件通常有 .sha256 文件。
  • 如果校验不通过,删掉重新拉:ollama rm 模型名ollama pull

警告: 千万别手动修改模型文件!我曾经手贱改了个二进制,结果模型直接崩了,还连带着把别的模型也搞坏了。血的教训。

4.3 依赖缺失:缺库、缺驱动、缺版本

依赖缺失,错误日志里经常出现:

Error: libcuda.so.1: cannot open shared object file
Error: ModuleNotFoundError: No module named 'transformers'
Error: OSError: [WinError 126] 找不到指定的模块

说白了,就是运行环境里少了某个动态链接库或者 Python 包。

我总结的常见依赖问题:

错误信息 原因 解决方案
libcuda.so.1 找不到 NVIDIA 驱动没装或版本不对 重装驱动,或设置 LD_LIBRARY_PATH
No module named 'transformers' Python 环境缺包 pip install transformers
OSError: [WinError 126] Windows 下缺 VC++ 运行库 安装 Visual C++ Redistributable

避坑指南: 我曾经在 CentOS 7 上部署,结果缺了 libstdc++.so.6 的某个版本。折腾了半天,最后发现是系统 GCC 太老。嗯,后来我学乖了,直接用 Docker 部署,省心。

快速诊断命令:

# 检查 CUDA 库
ldconfig -p | grep cuda

# 检查 Python 包
pip list | grep transformers

# 检查系统库
ldd /usr/lib/x86_64-linux-gnu/libcuda.so.1

4.4 知识体系图

下面这张图,是我自己梳理的模型加载故障排查逻辑。你照着走一遍,基本能解决 90% 的问题。

模型加载故障排查流程图 模型加载失败 显存不足? 换小模型/CPU模式 文件损坏? 重新拉取模型 依赖缺失? 安装缺失依赖 检查其他日志

这张图从左到右,从上到下。你遇到加载失败,先看显存,再看文件,最后查依赖。三步走完,基本能定位问题。

我的个人经验: 很多时候,显存不足和依赖缺失会同时出现。比如你显存刚好够,但缺了某个 CUDA 库,Ollama 会尝试用 CPU 模式,结果 CPU 内存又不够,报错信息就变得很混乱。这时候,先解决依赖,再解决显存,顺序别搞反了。


公众号:蓝海资料掘金营,微信deep3321