什么是Hypura
Hypura是专为苹果硅芯片设计的存储层级感知LLM推理调度器。它可以根据访问模式、带宽成本和硬件能力,将模型张量分布在GPU、内存和NVMe三级存储上,让超过物理内存的模型也能正常运行,不会导致系统崩溃。
在32GB Mac Mini上可以运行31GB的Mixtral 8x7B,速度2.2 token/s;运行40GB的Llama 70B,速度0.3 token/s。而原生的llama.cpp在这两个场景下都会直接OOM崩溃。
解决的问题
消费级苹果硬件(MacBook Pro、Mac Studio)虽然有快速的统一内存和NVMe存储,但容量有限。32GB的M1 Max无法原生加载40GB的模型,操作系统会陷入交换颠簸,直到OOM杀手终止进程。
Hypura通过理解模型架构来解决这个问题:
- 归一化层和嵌入层:体积很小但每个token都要访问,直接固定在GPU中
- MoE专家路由:利用稀疏性,每个token仅激活8个专家中的2个。路由拦截会识别选中的专家,仅从NVMe加载需要的专家分片,减少75%的I/O。神经元缓存跟踪已加载的专家切片,利用时间局部性实现99.5%的命中率。共激活跟踪还能预测下一个要激活的专家,实现 speculative预取
- 密集FFN权重:占模型大小的~60%,通过动态大小的池缓冲区从NVMe流式加载,而注意力层和归一化层始终驻留在GPU中。预取超前深度会根据可用内存自动调整
核心设计
Hypura会读取GGUF模型文件,分析你的硬件配置(GPU工作集、内存、NVMe带宽),然后求解一个放置优化问题,将每个张量分配到合适的存储层级:
- GPU(Metal):存放注意力层、归一化层、嵌入层。访问速度最快,但受限于推荐的最大工作集大小
- 内存(RAM):存放无法放入GPU工作集的溢出层,通过mmap访问
- NVMe:剩余的层通过直接I/O按需加载,在前向传播前预取
根据模型大小、架构和可用内存,Hypura会自动选择最佳推理模式:
- 全驻留模式:模型可以完全放入GPU+内存,没有NVMe I/O,达到全速Metal性能
- 专家流式模式:针对MoE模型(如Mixtral),仅非专家张量(~1GB)留在GPU,专家张量按需从NVMe通过池缓冲区流式加载,神经元缓存(99.5%命中率)在预热后消除大部分I/O
- 密集FFN流式模式:针对无法放入GPU的密集模型(如Llama 70B),注意力层和归一化层(~8GB)留在GPU,FFN张量(~32GB)通过动态大小的池缓冲区从NVMe流式加载,支持可扩展的预取超前
性能表现
测试环境:M1 Max,32GB统一内存,~5.1 GB/s NVMe顺序读取速度
| 模型 | 大小 | GPU占用 | NVMe占用 | 模式 | Hypura速度 | llama.cpp速度 | 说明 |
|---|---|---|---|---|---|---|---|
| Qwen 2.5 14B Q4_K_M | 8.4 GB | 8.4 GB | — | 全驻留 | 21 tok/s | ~21 tok/s | 完全放入GPU,无 overhead |
| Mixtral 8x7B Q5_K_M | 30.9 GB | 1.1 GB | 29.8 GB | 专家流式 | 2.2 tok/s | OOM | 99.5%缓存命中率 |
| Llama 3.3 70B Q4_K_M | 39.6 GB | 7.8 GB | 31.8 GB | 密集FFN流式 | 0.3 tok/s | OOM | 动态24槽池,7层预取 |
核心结论:对于能放入内存的模型,Hypura零开销;对于放不下的模型,Hypura让"无法运行"变成"可以运行"。
使用方法
安装
git clone --recurse-submodules https://github.com/hypura/hypura.git
cd hypura
cargo build --release
二进制文件位于 target/release/hypura,Homebrew安装方式即将推出。
基础命令
# 硬件分析(仅运行一次,结果缓存)
hypura profile
# 运行推理
hypura run ./model.gguf --prompt "Hello, world"
# 交互式聊天
hypura run ./model.gguf --interactive
# 基准测试
hypura bench ./model.gguf
# 查看模型放置计划
hypura inspect ./model.gguf
Ollama兼容API
Hypura提供兼容Ollama的HTTP API,可以作为任何Ollama工具的替代:
hypura serve ./model.gguf
# 服务地址:http://127.0.0.1:8080
# 兼容API:/api/generate, /api/chat, /api/tags
在OpenClaw中使用Hypura:
openclaw config set models.providers.ollama.baseUrl "http://127.0.0.1:8080"
常见问题
Q:会损伤SSD吗? A:不会。Hypura在推理过程中仅从SSD读取数据,读取操作不会磨损闪存单元。仅有的写入操作是基准测试结果JSON、共激活统计数据(都只有KB级别),正常推理不会产生任何SSD写入。
项目说明
作者表示这个项目大部分代码是由LLM根据他的指导生成的,探索了利用NVMe存储支持大模型推理的可能性。