跳至主要内容

如何在 8GB 内存上本地运行 Bonsai 27B

学习如何使用 llama.cpp、本地 OpenAI 兼容 API、Web 界面以及 Pi 编码代理,在本地运行 Bonsai 27B(紧凑的 1-bit Qwen3.6-27B 模型)。
· 10分钟 阅读

使用 AI 探索

注意:Bonsai 2 27B 现已推出,基于 Qwen3.8 27B

Qwen3.6-27B 已成为本地运行具备推理与编程能力模型的热门之选。它速度快、性能强,但完整的 270 亿参数模型仍需要相当可观的内存。

使用常规的量化可以降低这些需求,但也可能带来明显的性能下降。

Hugging Face 上的 prism-ml/Bonsai-27B-gguf

来源:prism-ml/Bonsai-27B-gguf

Prism ML 采用了不同的方法,推出了Bonsai 27B——Qwen3.6-27B 的高度压缩 1-bit 版本。

据 Prism ML 称,Bonsai 在将模型权重压缩至约 3.9 GB 的同时,仍保留了原始模型近 90% 的基准性能。

这使得在更易获得的消费级硬件上,尝试 27B 级别的推理模型成为可能。

在本教程中,我将使用 1-bit 的Bonsai-27B-Q1_0.gguf 模型和 Prism ML 的自定义安装脚本。该脚本会自动下载模型、选择兼容的预构建运行时,并根据可用硬件进行配置。

随后,我会在命令行测试 Bonsai,启动其本地 Web 界面,通过 OpenAI 兼容 API 访问它,并将其连接到 Pi 编码代理。

Bonsai 27B 有何特别之处?

让Bonsai 27B有意思的是,它并不只是另一个常规量化的 Qwen 模型。

大多数本地 GGUF 模型是在训练后,通过降低现有模型的数值精度来压缩的。

Bonsai 采取了更激进的方法,围绕二值权重来适配模型,使网络的大部分可以使用接近-1 或 +1的值进行运算。

这点很重要,因为大语言模型的运行往往受限于内存容量与内存带宽,而不仅仅是算力本身。

降低权重量化精度能减少推理过程中需要存储与传输的数据量。

配合优化的运行时,这让大型 27B 模型在通常难以加载或运行它的消费级硬件上也变得可行。

prism-ml/Bonsai-27B-gguf 基准测试结果

来源:prism-ml/Bonsai-27B-gguf · Hugging Face 

Bonsai 还保留了超越基础聊天所需的能力。

它支持推理、编程、结构化工具调用、长上下文提示和代理式工作流。

它也可以通过 OpenAI 兼容的 API 运行,更容易连接到编码代理、检索系统、自动化工具,以及已支持 OpenAI 风格端点的应用程序。

但需要注意,Bonsai 不应被视为与全精度的 Qwen3.6-27B 完全相同。

极致压缩仍然涉及权衡,可能会在不同任务上,分别影响指令遵循、工具选择、推理一致性和输出质量。

它的主要优势在于平衡:以显著更低的硬件要求,提供大模型的能力。

本地运行 Bonsai 27B 的前提条件

开始之前,请确保您的系统具备:

  • 至少 8 GB 系统内存,推荐 16 GB 或以上
  • 约 8 GB 可用存储空间,用于模型、运行时和支持文件
  • Git,用于克隆 Bonsai 演示仓库
  • 受支持的操作系统,如 Linux、Windows 或 macOS
  • 一块NVIDIA、AMD、兼容 Vulkan 或 Apple Silicon 的 GPU,以获得更快的推理速度

独立显卡是可选项,因为 Bonsai 也可以使用 CPU 运行。

但通过 CPU 推理通常会更慢,尤其是在模型生成较长推理内容时。

在本指南中,我使用一块NVIDIA RTX 5070 Ti,配备 16 GB 显存。

这足以将约 3.9 GB 的模型权重完全加载到 GPU 中,并为 KV 缓存、模型激活与运行时开销留出额外空间。

不过,可用显存也会决定可使用的上下文长度。

尽管 Bonsai 27B 支持超过256K tokens的对话,加载其完整训练上下文会占用大量额外内存,可能耗尽内存或显存较小的系统。

因此 Prism ML 采用了感知内存的默认上下文大小,而不是自动分配完整的 262K-token 窗口。

在本教程中,我们先使用较小的8,192-token 上下文窗口进行命令行测试。随后在启动服务器时,根据可用内存再增大它。

较小的上下文窗口已足以应对大多数编程和聊天任务,并且启动更快、内存占用更低。

步骤 1:下载并安装 Bonsai 27B

打开终端,克隆官方 Bonsai 演示仓库:

git clone https://github.com/PrismML-Eng/Bonsai-demo.git
cd Bonsai-demo

该仓库包含用于下载模型、检测硬件、选择正确运行时二进制、在终端运行模型以及启动本地服务器的脚本。

运行以下安装命令:

BONSAI_FAMILY=bonsai \
BONSAI_MODEL=27B \
BONSAI_OPENWEBUI=0 \
BONSAI_CODE_INTERPRETER=0 \
./setup.sh

运行 Bonsai-27B 安装脚本

在安装过程中,可能会提示您输入Hugging Face 访问令牌。

对于公开模型文件这是可选的,您可以直接按Enter 跳过。

不过,使用令牌有助于避免匿名下载的限制。

下载 Bonsai-27B 模型文件

该脚本会下载约7.15 GB 的文件,包括:

  • 语言模型 Bonsai-27B-Q1_0.gguf
  • 多模态投影器(mmproj)
  • 其他与 D-Spark 相关的文件
  • 适配您硬件、经过测试的预构建运行时二进制

设置 BONSAI_FAMILY=bonsai 将选择紧凑的 1-bit Bonsai 模型,而非更大的三值版本。

以下选项会禁用两个附加环境:

BONSAI_OPENWEBUI=0
BONSAI_CODE_INTERPRETER=0

本教程不需要 Open WebUI,因为附带的服务器二进制已提供一个轻量级的基于浏览器的聊天界面。

代码解释器环境对于基础本地安装同样非必需。

安装过程中,安装脚本会自动:

  • 安装所需的 Linux 软件包
  • 创建 Python 虚拟环境
  • 下载 Bonsai 27B 模型文件
  • 下载合适的预构建运行时
  • 检测可用的 CPU 或 GPU 后端
  • 根据您的硬件配置项目

Bonsai-27B 安装脚本已成功完成。

这种自动化安装尤其实用,因为您无需手动编译 llama.cpp,也无需亲自选择 CUDA、ROCm、Vulkan、Metal 或 CPU 二进制。

如果您需要快速入门,我推荐这份llama.cpp 教程。

步骤 2:通过 CLI 测试 Bonsai 27B

安装完成后,使用随附的 llama.cpp 命令行界面直接在终端测试模型:

BONSAI_FAMILY=bonsai \
BONSAI_MODEL=27B \
BONSAI_CTX=8192 \
./scripts/run_llama.sh \
-p "Create a simple Python function that calculates compound interest."

该命令将:

  • 选择1-bit Bonsai 模型族
  • 加载27B 模型
  • 将上下文窗口设置为8,192 tokens
  • 启动交互式的llama.cpp 终端
  • 将复利计算请求作为首个提示发送

llama.cpp CLI 运行 Bonsai-27B

首次启动可能需要片刻时间来将模型加载到系统内存或 GPU 显存中。

准备就绪后,终端会显示活动模型、构建信息和可用命令,然后开始生成响应。

llama.cpp CLI 运行 Bonsai-27B

如输出所示,Bonsai 会先给出其推理过程,然后生成完整的 Python 示例,包括函数、使用说明和计算结果。

在首个响应后,会话保持打开,您可以继续输入其他提示,而无需重启模型。

步骤 3:启动 Bonsai 服务器

首先按下Ctrl+C,关闭上一步的交互式 CLI 会话。

然后启动本地 Bonsai 服务器:

BONSAI_FAMILY=bonsai \
BONSAI_MODEL=27B \
BONSAI_CTX=100000 \
./scripts/start_llama_server.sh \
--alias bonsai-27b \
--host 0.0.0.0 \
--port 8910

使用 llama.cpp 服务化 1bit Bonsai-27B 模型

该命令将:

  • 加载1-bit Bonsai 27B 模型
  • 分配100,000-token 上下文窗口
  • 将模型注册为 bonsai-27b 名称
  • 在端口8910 启动服务器
  • 使其可从本机及同一网络内的其他设备访问

100,000-token 的上下文窗口比先前 8,192-token 的 CLI 测试需要显著更多内存。如果模型无法启动或系统内存/显存不足,请降低 BONSAI_CTX。

由于 --host 0.0.0.0 会将服务器暴露给本地网络,请避免在不受信任的网络使用。若仅需本地访问,请改为:

--host 127.0.0.1

在使用模型期间请保持此终端打开。关闭终端将停止服务器。

Bonsai 服务器提供:

  • 轻量级本地 Web 界面
  • 一个OpenAI 兼容 API
  • 流式响应
  • 结构化工具调用
  • 模型特定的推理控制

OpenAI 兼容 API 地址:

http://127.0.0.1:8910/v1

步骤 4:使用 CURL 测试 Bonsai 27B

打开第二个终端,向 chat-completions 端点发送请求:

curl http://127.0.0.1:8910/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bonsai-27b",
    "messages": [
      {
        "role": "user",
        "content": "Write a Python function for loading and validating a CSV file."
      }
    ],
    "max_tokens": 1000
  }'

该请求使用与 OpenAI Chat Completions API 相同的结构:

  • model 选择前面创建的服务器别名
  • messages 包含会话内容
  • max_tokens 限制生成的 token 数量

API 返回的 JSON 速度约为每秒 95 个 token,但响应在 1,000-token 处被截断。因此在将 Bonsai 连接到应用、代理或 Python 程序前,将 "max_tokens" 提高到 3000 以获取完整答案。

步骤 5:测试 Bonsai 27B Web 界面

在浏览器中打开以下地址:

http://127.0.0.1:8910

在 llama.cpp webui 测试 Bonsai-27B

内置的 llama.cpp 界面可与 Bonsai 对话、上传文件,并将推理强度从 Off 调整到 Max。

使用如下编程提示进行测试:

Create a Python command-line application that converts CSV files to JSON.

在 llama.cpp webui 测试 Bonsai-27B

在我的 RTX 5070 Ti 上,Bonsai 以约每秒 92 个 token 的速度生成了完整的 Python 脚本。

在 llama.cpp webui 测试 Bonsai-27B

我还让它创建了一个个人作品集网站。

尽管代码可用,但我对生成的界面并不满意,设计过于基础且通用。

这表明 Bonsai 能产出可运行的代码,但要构建精致的界面,可能需要更详细的提示与多次迭代。

使用 Bonsai-27B 1bit 模型生成的网站。

步骤 6:安装 Pi 编码代理

Pi 是一个基于终端的编码代理,我们用它通过本地 OpenAI 兼容 API,在真实的代理式编码工作流中测试 Bonsai 27B。

打开新的终端,安装Pi 编码代理:

curl -fsSL https://pi.dev/install.sh | sh

安装 Pi 编码代理

出现提示时,按Enter 或输入y 以使用默认安装继续。

确认 Pi 是否安装成功:

pi --version

测试时安装的版本为:

0.82.0

步骤 7:将 Bonsai 27B 接入 Pi

确保 Bonsai 服务器仍在运行,然后打开新终端,创建 Pi 的配置目录:

mkdir -p ~/.pi/agent

创建自定义模型配置文件:

nano ~/.pi/agent/models.json

粘贴以下配置:

{
  "providers": {
    "bonsai-local": {
      "baseUrl": "http://127.0.0.1:8910/v1",
      "api": "openai-completions",
      "apiKey": "local",
      "compat": {
        "supportsDeveloperRole": false,
        "supportsReasoningEffort": false
      },
      "models": [
        {
          "id": "bonsai-27b",
          "name": "Bonsai 27B Local",
          "reasoning": true,
          "input": ["text"],
          "contextWindow": 100000,
          "maxTokens": 50000,
          "cost": {
            "input": 0,
            "output": 0,
            "cacheRead": 0,
            "cacheWrite": 0
          }
        }
      ]
    }
  }
}

此配置将 Pi 连接到本地的 OpenAI 兼容端点,将模型注册为Bonsai 27B Local,并与服务器的 100,000-token 上下文设置保持一致。

保存并关闭文件:

Ctrl + O
Enter
Ctrl + X

Pi 会自动从 ~/.pi/agent/models.json 加载自定义模型提供方。

步骤 8:使用 Bonsai 27B 运行 Pi

确保 Bonsai 服务器仍在运行,然后创建新项目目录:

mkdir simple-python
cd simple-python

使用本地 Bonsai 模型启动 Pi:

pi --provider bonsai-local --model bonsai-27b

使用 Bonsai-27B 模型运行 Pi 编码代理

输入如下提示:

Build a simple Python application with a FastAPI backend and a modern, 
responsive web interface that accepts user input, processes it, 
and displays the result.

在 Pi 编码代理中测试 Bonsai-27B 模型

Pi 开始推理、创建项目文件、安装所需依赖,并产出一个带 FastAPI 后端与响应式前端的文本分析应用。

在以100,000-token 上下文窗口运行模型时,nvidia-smi 显示我的 RTX 5070 Ti 约占用 11.9 GB 显存:

Bonsai-27B 100K 上下文加载到 GPU 显存。

运行结束后,Pi 确认任务完成,并清晰总结了其所执行的一切。

总结包括创建的文件、应用的主要功能、执行的测试,以及本地运行项目所需的准确命令。

在 Pi 编码代理中测试 Bonsai-27B 模型

生成后,Pi 对其创建的文件与功能进行了总结。

我使用以下命令测试了后端:

curl -s -X POST http://localhost:10100/analyze \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello world! This is a test."}'

API 工作正常,界面也比之前通过基础 Web 界面生成的网站更佳。

使用 Bonsai-27B 生成的应用

不过,应用仍不完整:部分按钮与控件缺失,前端未展示后端 API 提供的全部统计信息。

这说明 Bonsai 能构建可用的全栈应用,但结果仍需要测试与完善。

使用 Bonsai-27B 生成的应用

结语

在我的测试中,Bonsai 27B 依然能感受到作为重度压缩模型的特性。

其输出质量仍不及我先前测试并在编码代理工作流中更可靠的Q4 量化的 Qwen3.6-27B。

Q4 版本需要更多内存,但在推理、代码生成和一致性方面表现更强。

尽管如此,以约3.8 GB 体量的模型而言,Bonsai 27B 的能力依旧令人称道。

它能理解指令、创建项目文件、执行命令、测试结果,并可在本地构建可用的应用。在这一体量级别中,它是我试过的最强模型之一。

对于严肃的编码代理工作,我仍会选择 Qwen3.6-27B 的 Q4 版本,尤其是我的RTX 3090 具有 24 GB 显存,足以从容应对更大的模型。

即便如此,我非常喜欢使用 Bonsai 27B,并对更广泛的 Prism ML 生态留下深刻印象。其自动化安装、优化运行时、内置 Web 界面、OpenAI 兼容 API 与代理集成,让更多人能在消费级硬件上更轻松地本地运行并体验大型推理模型。

FAQs

Bonsai 27B 的 1-bit 与三值变体有什么区别?

1-bit 变体(3.9 GB)使用二值权重(接近 -1 或 +1 的值),针对极端内存约束进行了优化,保留了约 90% 的 Qwen3.6-27B 基线性能。默认的三值变体(5.9 GB)使用 1.58-bit 权重(-1、0 或 +1)。它需要稍多内存,但可将基准留存推高至 95%,如果您的系统拥有 16 GB 或以上 RAM/VRAM,这是更好的选择。

Bonsai 27B 是否支持图像或文档输入?

支持。1-bit 与三值变体均为多模态。它们使用紧凑的 4-bit 视觉塔(即在安装脚本中下载的 mmproj 文件)。这使得本地应用可以在文本提示之外,向模型传入截图、文档与相机输入。

Bonsai 27B 能否在 Mac 或智能手机上原生运行?

支持。虽然本指南侧重于 NVIDIA GPU,Prism ML 也提供专为 Apple Silicon 优化的 MLX 构建。1-bit 变体的 3.9 GB 体量足以适配现代手机的单应用内存预算——在 iPhone 17 Pro Max 上可实现约每秒 11 个 token——并能在采用统一内存的 Apple M 系列笔记本上高效运行。

主题