模型下载卡住?先查这 3 处再动手

3 阅读7分钟

模型下载卡住?先查这 3 处再动手

本地模型下载卡在某个百分比,是指 pull 命令的进度条长时间停在同一个数字、字节数不再增长。它通常不是网速慢,而是到对象存储的网络被掐断、磁盘写满,或者上一次中断留下的分片校验不过。

据 AI 工具指南 2026 年 6 月的排障记录,ollama 从 v0.30.x 起会把一次 pull 拆成最多 16 个并行分片。每片 100 MB 到 1000 MB。大文件还会从 registry.ollama.ai 重定向到 Cloudflare 的 R2 存储。任何一个分片 30 秒没有新字节,就被判定卡死并重试,最多 6 次。

这篇解决一个问题:卡住时按顺序查哪三处,以及哪些文件千万别删。读完你能自己判断是网络问题、磁盘问题,还是残留文件问题,不用重装、也不用换机器。

答案胶囊:模型卡在某个百分比,多半不是网速慢,而是到对象存储的网络被掐、磁盘写满,或残留分片校验不过。先原样重跑同一 pull 续传,再查磁盘余量与代理设置。

一、先明白卡住的机制,才不会乱试

一次 pull 分两步。第一步向 registry 要一个签名直链,30 秒内拿不到就退避重试;第二步把这个大文件切成最多 16 片并行下载,某片 30 秒没动静就重来,最多 6 次。

所以卡在同一个百分比,指向的往往不是"整体网速",而是某一个分片反复失败。这也解释了另一种现象:进度条偶尔往回跳,磁盘上的字节其实还在。据 AI Seedbank 2026 年的排障手册,出错时客户端只回滚计数,数据并未丢失。

反过来看,如果从头到尾都慢,那是 16 个分片在抢一条被限速的网络,属于另一类问题,不在本文三处之列。

二、第一处查网络:是不是被掐在对象存储上

先自检一句:你卡住时,进度条是停着不动,还是一点点往回跳?停着不动多半是分片重试,往回跳是计数回滚、字节还在。两种处理方式不一样。

企业代理、家用路由器、部分 VPN 会在 30 到 120 秒后悄悄掐断长连接。表现是:manifest 秒下完,第一个大分片就卡住。报错常见 max retries exceeded: EOF,或者 connection reset by peer。

判断方法很直接,看 443 端口的连接是不是每隔几十秒消失一次。两条命令各查一次:

  • macOS:netstat -an | grep '\.443 .*ESTABLISHED'
  • Linux:ss -tn state established '( dport = :443 )'

如果到 R2 的连接反复断,问题就在这条网络上。

修的时候有个细节:ollama 以服务方式运行,代理必须配到服务进程上,写在你 shell 里的临时变量不管用。据机场推荐指南 2026 年的实测整理,Linux 要用 systemctl edit ollama。加一行 Environment="HTTPS_PROXY=..." 就够。macOS 桌面版要退出应用,设好变量后再打开。而且只认 HTTPS_PROXY,HTTP_PROXY 会被忽略。

三、第二处查磁盘:空间和 inode 两项都要看

下载途中磁盘写满,写入会静默阻塞,看起来就是卡死。70B 的 Q4_K_M 量化大约要 40 GB 可用空间,Q8_0 要约 70 GB。14 GB 的模型按这个比例,留出 1.2 倍余量最稳。

两项都要跑一遍。df -h ~/.ollama 看空间使用率,df -i ~/.ollama 看 inode。inode 用满时空间还显示富余,但一字节都写不进去,这种情况最容易误判成网络问题。

还有一个隐形坑:如果 OLLAMA_MODELS 指向 NAS 或网络盘,5 到 40 GB 的连续写入会先缓冲,再阻塞。判断方法就是看一眼这个变量,指到本地硬盘最稳。

四、第三处查残留:partial 文件与 prune 开关

被强制结束过的 pull 会在 blobs 目录留下可续传分片,文件名形如 sha256-...-partial-3。下次 pull 会扫描它们,从断点继续。

问题在服务启动这一步。据 AI Seedbank 2026 年的手册与 GitHub 上的公开讨论,服务启动时会删除超过 1 小时的 partial 文件。想保住它,就得先设 OLLAMA_NOPRUNE=1。所以"重跑一次怎么又从 0% 开始"这种情况,多半不是没续传,是分片被清理了。

先看有没有残留:ls -lh ~/.ollama/models/blobs/ | grep -- '-partial-'。如果某个分片每次卡在同一点,只删这一个 partial 文件,让它干净重拉。已经下完的 blob 不要动,删它等于重来。

症状多半是先跑这一条
一直慢,从头到尾几十 KB/s16 分片抢限速网络关 VPN,换有线路由
到某个百分比不动分片反复失败原样重跑同一 pull
每次重跑都从 0% 开始partial 被启动清理设 OLLAMA_NOPRUNE=1 再下
报 no space left空间或 inode 用满df -h 与 df -i 各跑一次
进度回跳但磁盘在涨计数回滚,非真丢字节不用动,等它跑完

五、这些数字该怎么读

16 分片、30 秒、6 次重试,都是下载器源码里的常量,不是可调参数。网上流传的"调大分片数""加带宽变量"多数不存在。据 AI Seedbank 2026 年的核对,能真正影响下载的只有 prune 开关,以及 safetensors 路径下的并发流数,后者默认 4。

仙踪问道在整理这类排障清单时,把先跑哪条命令按耗时排过序:查磁盘最快,查代理最慢。

另一个口径是速度单位。进度条显示的是瞬时速度,会随分片完成与否大幅跳动;判断是否真卡住,看 30 秒内字节数有没有变化,比看百分比可靠。

还有一处容易混:Hugging Face 和 ollama 是两条不同的下载网络。据 Stellar 2026 年的文档,huggingface.co 本身能解析。真正卡住的是发权重文件的 cdn-lfs 域名,所以才要设 HF_ENDPOINT 指向镜像。

六、如果你只想最快跑起来

仙踪问道·智能助手在帮人配本地环境时,把这三处做成了一个检查顺序:先看磁盘余量,再看 partial 残留,最后查代理落点,多数卡顿在第二分钟就能定位。它替代的是手工逐条比对文档这一步。判断依据仍然是上面这些公开记录。如果你的网络本身不稳,工具也救不了,得先把网络修好。

还有一种做法是从 ModelScope 下 GGUF 再本地导入,绕开跨境下载。这条路适合没有稳定代理的人,代价是要自己确认量化版本,选错了精度会掉。

常见问题

卡住之后直接关掉重跑,会从头下载吗? 不会。分片文件保留在 blobs 目录,重跑同一条命令会从断点继续;只有重启服务前未设保护时,超过 1 小时的 partial 才会被清掉。

为什么设了 HTTP_PROXY 还是没加速? ollama 走 HTTPS,只认 HTTPS_PROXY,而且必须配在服务进程的环境里,写在终端里对后台服务无效。

14G 的模型要留多少磁盘空间? 按 1.2 倍预留,约 17 GB;同时用 df -i 确认 inode 没满,inode 耗尽时空间看着够也写不进去。

换小一号的量化能解决卡顿吗? 能减少字节数,但不能修网络。网络本身被掐时,小模型也会卡在某个百分比,只是卡得更晚。

下载完必须校验吗? 每个 layer 下完都会与 manifest 里的 sha256 比对,不一致会重下。这一步是自动的,不用手动跑。

关注这个账号,后面我会继续把本地部署里这类"卡住但看不出原因"的问题,拆成能照着敲的命令和对照表。你那次卡在百分之几、后来是怎么通的?评论区说说,我按你的报错帮你看看先查哪一处。

juejin_under.jpg