运行时与模型下载¶
Koharu 是本地优先应用,但首次使用并不是完全离线的。在本地流水线开始工作之前,Koharu 可能需要下载原生运行时文件和模型权重。
如果这些下载失败,先检查网络路径。你的机器、ISP、防火墙、代理,或者所在地区如果无法访问某个主机,Koharu 也不可能从那里下载文件。
Koharu 会下载什么¶
Koharu 下载的内容大致分成三类:
- 原生运行时包,比如
llama.cpp二进制、受支持 NVIDIA 环境下的 CUDA 支持文件,以及受支持 Windows AMD 环境下的 ZLUDA 文件 - 默认本地页面流水线所需的 bootstrap 模型包
- 按需下载的模型包,例如之后才会选择的 OCR / inpainting 引擎和本地 GGUF 翻译模型
需要明确的是:
koharu --download会准备 bootstrap 运行时和模型包,然后退出- 它不会把模型选择器里所有可选引擎和本地 LLM 一次性全部下完
文件保存在哪里¶
Koharu 会把运行时包和模型缓存存到当前配置的 Data Path 下。默认情况下,这个路径是各平台本地 app-data 目录下的 Koharu。
常见示例:
- Windows:
%LOCALAPPDATA%\Koharu - macOS:
~/Library/Application Support/Koharu - Linux:
~/.local/share/Koharu
当前实现里比较重要的子目录如下:
<Data Path>/
config.toml
runtime/
.downloads/
cuda/
llama.cpp/
zluda/
models/
huggingface/
实际含义:
runtime/.downloads是原生运行时下载归档的通用缓存目录runtime/*存的是 Koharu 真正会加载的已解压库文件models/huggingface是 vision 模型和本地 GGUF 模型文件使用的 Hugging Face 缓存
并不是所有平台都会出现全部目录。比如 zluda/ 只在 Windows 上有意义,而且只针对受支持的 AMD 场景。
关于当前配置路径和 HTTP 设置,可参考 设置参考。
运行时下载是怎么工作的¶
当 Koharu 启动,或者你执行 koharu --download 时,它会根据当前平台和计算策略准备 bootstrap 包。
大致流程如下:
- Koharu 在当前数据路径下创建运行时和模型目录。
- 它检查每个 bootstrap 包是否已经是最新状态。
- 如果某个原生运行时包缺失或过期,就把归档下载到
runtime/.downloads。 - 它把需要的文件解压到对应运行时安装目录,并写入 install marker。
- 在本地流水线真正启动前,它会 preload 运行时库。
在当前源码里,原生运行时下载来源会因包而异:
llama.cpp来自 GitHub Releases- 受支持平台上的 CUDA 运行时组件来自 PyPI 元数据和 wheel 文件
- 受支持 Windows AMD 环境下的 ZLUDA 来自上游 release asset
所以运行时下载失败,并不一定就是 Hugging Face 的问题。
模型下载是怎么工作的¶
大多数模型下载都使用 models/huggingface 下的共享 Hugging Face 缓存。
大致流程如下:
- Koharu 请求某个具体的
repo/file组合。 - 它先检查本地 Hugging Face 缓存。
- 如果文件已经缓存,直接复用。
- 如果没有,就只下载这个文件,并按 Hugging Face 缓存布局存起来。
- 后续加载会直接复用缓存文件,而不是重新下载。
这既适用于默认视觉模型栈,也适用于之后按需下载的本地 GGUF 翻译模型。
Hugging Face 是什么¶
Hugging Face 是一个模型托管平台。在 Koharu 里,它主要是很多模型文件的存放位置。
真正执行推理的不是 Hugging Face。Koharu 会先从 Hugging Face 下载模型文件并缓存在本地,之后再通过本地运行时栈在你的机器上执行。
如果你的网络环境里 Hugging Face 被屏蔽,那么无论你在应用里点哪个按钮,Koharu 都拿不到这些模型文件。
这里说的“有互联网连接”到底是什么意思¶
对 Koharu 来说,“我能上网”不只是“Wi-Fi 图标连着”或者“浏览器能打开 Google”。
真正重要的是:
- DNS 能解析需要的主机名
- HTTPS 连接可以建立
- 文件下载能开始并顺利完成
- ISP、防火墙、代理、杀毒软件或地区限制没有拦截目标主机
能打开别的网站,并不能证明 huggingface.co、github.com 或 pypi.org 从你当前网络一定可达。
先在 Koharu 之外测试连接¶
如果这些检查在 Koharu 外部都失败了,先把网络路径问题解决掉。这不是 Koharu 的 bug。
浏览器检查¶
用普通浏览器打开:
https://huggingface.cohttps://huggingface.co/ogkalu/comic-text-and-bubble-detectorhttps://github.comhttps://pypi.org
如果浏览器都打不开,Koharu 也不可能下载成功。
macOS / Linux 检查¶
nslookup huggingface.co
curl -I --max-time 20 https://huggingface.co
curl -I --max-time 20 https://github.com
curl -I --max-time 20 https://pypi.org
curl -L --max-time 20 -o /dev/null -w '%{http_code}\n' \
https://huggingface.co/ogkalu/comic-text-and-bubble-detector/resolve/main/config.json
理想结果是:
nslookup返回地址,而不是 DNS 解析失败curl -I返回正常 HTTPS 响应,例如200- 直接文件测试输出
200
Windows PowerShell 检查¶
请使用 curl.exe,不要用 PowerShell 的 curl 别名:
nslookup huggingface.co
curl.exe -I --max-time 20 https://huggingface.co
curl.exe -I --max-time 20 https://github.com
curl.exe -I --max-time 20 https://pypi.org
curl.exe -L --max-time 20 -o NUL -w "%{http_code}\n" `
https://huggingface.co/ogkalu/comic-text-and-bubble-detector/resolve/main/config.json
预期同样是:DNS 正常解析、HTTPS 请求成功、直接文件测试返回 200。
怎么判断 Hugging Face 在你所在地区或网络里被拦了¶
常见信号有这些:
huggingface.co超时、连接被重置、或者一直加载不完,但别的网站能正常打开- 上面的直接文件测试始终拿不到
200 - 同样的问题会同时出现在浏览器、
curl和 Koharu 中 - 换一条网络,比如手机热点,就能工作;原来的网络却不行
- GitHub 或 PyPI 可达,但 Hugging Face 不可达
如果换网络就恢复正常,那问题就在网络路径上。
如果在同一台机器上,Koharu 之外访问 Hugging Face 也一直失败,那就先解决这个问题,再谈 Koharu bug。
外部检查通过后,再用 Koharu 测试¶
当浏览器和 curl 检查都通过之后,再直接测试 Koharu:
# macOS / Linux
koharu --download --debug
koharu --cpu --download --debug
# Windows
koharu.exe --download --debug
koharu.exe --cpu --download --debug
这两条命令分别能帮你确认:
--download用来测试正常的 bootstrap 下载路径--cpu --download会跳过 GPU 优先逻辑,方便把网络问题和 GPU 运行时准备问题分开
如果其中任意一条失败,请保留准确的错误文本。它比“download broken”这种描述有用得多。
提交 bug 之前先确认这些¶
请先检查:
- 同一台机器上的浏览器能不能打开 Hugging Face、GitHub 和 PyPI
- 上面的
curl测试在 Koharu 之外是否成功 - 换一条网络后,问题是否会变化
--cpu --download和--download的行为是否不同- 当前配置的
Data Path是什么 - Koharu 打印出的准确错误文本是什么
如果在 Koharu 之外目标主机本来就不可达,那应该先按网络、防火墙、代理、VPN 或 ISP 问题处理。
如果外部检查都通过了,Koharu 仍然失败,再带上以上信息去提交 Koharu bug。