# Chiquito：用内存预加载让消费级显卡跑起大模型

> Chiquito 通过逐层推理和 RAM 预加载技术，让显存受限的设备也能流畅运行大型语言模型。相比从磁盘逐层读取，内存预加载可将推理速度提升 2-5 倍。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-04-05T20:40:44.000Z
- 最近活动: 2026-04-05T20:51:20.661Z
- 热度: 159.8
- 关键词: LLM, 推理优化, 显存优化, 内存预加载, 边缘计算, HuggingFace, 量化, 消费级硬件
- 页面链接: https://www.zingnex.cn/forum/thread/chiquito
- Canonical: https://www.zingnex.cn/forum/thread/chiquito
- Markdown 来源: ingested_event

---

## 背景：显存瓶颈困扰大模型本地部署

随着大语言模型参数规模不断攀升，消费级显卡（如 8GB VRAM 的 RTX 2080）已难以直接加载完整的 LLM。即便是 7B 参数的模型，在 fp16 精度下也需要约 14GB 显存，远超普通游戏显卡的容量。

传统的解决方案要么依赖云端 API（牺牲隐私和自主性），要么使用量化技术（可能损失精度）。而 **Chiquito** 项目提供了一条不同的路径：通过逐层推理和系统内存预加载，在保持精度的同时，让大模型在消费级硬件上跑起来。

## 项目概述：Chiquito 是什么

Chiquito 是一个受 [AirLLM](https://github.com/lyogavin/airllm) 启发的轻量化重实现，专为显存受限但内存充足的机器设计。其核心思路很简单：

1. **逐层推理**：每次只在 GPU 上加载一个模型层，执行前向传播后立即释放
2. **内存预加载**：将所有层权重预加载到系统 RAM（而非每次从磁盘读取）
3. **滑动窗口**：对于超大模型，使用滑动窗口模式保持 N 层常驻内存，后台线程异步预加载后续层

这种设计使得 PCIe 传输（RAM → GPU）取代磁盘 I/O 成为瓶颈，而前者速度是后者的 2-5 倍。

## 核心机制：三种运行模式

Chiquito 提供灵活的配置选项，适应不同的硬件条件：

### 模式一：完全预加载（preload_to_ram=True）

适用于模型能完全放入系统内存的场景。初始化时将整个模型拆分为每层独立的 .safetensors 文件并加载到 RAM。推理时直接从内存拷贝到 GPU，速度最快。

### 模式二：滑动窗口（preload_to_ram=N）

适用于模型超过可用内存的场景。只保持 N 层在内存中，后台线程持续预加载即将使用的层。只要磁盘 I/O 能跟上 GPU 计算速度，就不会产生停顿。

### 模式三：磁盘回退（preload_to_ram=False）

最小内存占用模式，每次从磁盘读取层权重。速度最慢，但可在极低内存环境下运行。

## 性能实测：数据说话

项目作者在 Intel Core i9-10980HK + 64GB RAM + RTX 2080 Super（8GB VRAM）环境下进行了测试：

**小型模型（TinyLlama-1.1B）**：
- 完全预加载加载时间 7.91s，生成 20 tokens 耗时 55.10s
- 磁盘模式加载时间 1.74s，生成耗时 54.58s
- 由于模型小，差异不明显

**中型模型（Qwen2.5-Coder-32B）**：
- 完全预加载生成 20 tokens 耗时 361.67s
- 磁盘模式耗时 391.50s
- 预加载模式快约 8%，得益于 DMA 传输优化

**大型模型（65GB fp16）**：
- 超出 64GB 内存，无法使用完全预加载
- 滑动窗口模式（5/10/34 层）与磁盘模式性能接近
- 验证了后台预加载能有效隐藏磁盘延迟

此外，Chiquito 支持 bitsandbytes 的 4-bit/8-bit 量化，可将 32B 模型从 65GB 压缩至约 16GB（4-bit），进一步降低内存门槛。

## 实际意义：谁该关注这个项目

**个人开发者**：想本地运行 13B-70B 模型进行研究，但不想购买专业显卡

**边缘计算场景**：在内存充足但显存受限的嵌入式设备上部署 LLM

**隐私敏感应用**：需要完全离线运行模型，不能依赖云端 API

**模型评测**：需要快速切换不同模型进行对比测试，Chiquito 的分层设计便于灵活加载

## 使用示例

```python
from chiquito import AutoModel

# 完全预加载模式
model = AutoModel.from_pretrained("TinyLlama/TinyLlama-1.1B-Chat-v1.0")

# 滑动窗口模式（10层）
model = AutoModel.from_pretrained(
    "Qwen/Qwen2.5-Coder-32B-Instruct",
    preload_to_ram=10,
)

# 4-bit量化模式
model = AutoModel.from_pretrained(
    "Qwen/Qwen2.5-Coder-32B-Instruct",
    preload_to_ram=True,
    quantization="4bit",
)

tokens = model.tokenizer("The meaning of life is", return_tensors="pt")
output = model.generate(tokens["input_ids"].cuda(), max_new_tokens=50)
```

## 技术亮点与局限

**亮点**：
- 纯 Python 实现，代码简洁易懂
- 支持 HuggingFace 生态，兼容主流 transformer 模型
- 提供详细的[开发者文档](https://github.com/elcapo/chiquito/tree/main/docs)和[教程](https://github.com/elcapo/chiquito/tree/main/tutorial)
- 不修改模型结构，保持原始精度

**局限**：
- 逐层推理本质上是用内存带宽和延迟换取显存容量
- 对于需要频繁层间通信的模型（如某些 MoE 架构）可能效率较低
- 当前主要支持 decoder-only 的因果语言模型

## 总结与展望

Chiquito 代表了一种务实的工程思路：不追求理论上的最优解，而是在现有硬件约束下找到可行的平衡点。对于显存受限但内存充足的场景，它提供了一个开箱即用的解决方案。

随着模型规模继续增长和边缘计算需求上升，类似的内存-显存分层优化技术将越来越重要。Chiquito 的滑动窗口设计也为未来支持更大的模型（如 100B+ 参数）预留了扩展空间。
