概述
把你的 ZimaOS NAS 变成私有 AI 服务器。没有云端,没有 API 账单,一切都在你自己的硬盘上。
它是引擎,不是聊天机器人。 本指南部署的是一个 OpenAI 兼容的 API 服务器——http://<your-nas-ip>:8080/v1 这个端点并不是聊天窗口。聊天机器人只是它的一个客户端。更大的价值在于:局域网里的每个 AI 应用和 agent 都可以接入这同一个端点。把 DeepSeek Harness 或任何编码 agent 指向它,agent 本身——而不只是你的聊天——就完全在你自己的硬件上本地运行。
性能是实测的,不是纸面的。 一台装有 RTX PRO 2000 显卡的 ZimaCube 用 35B 混合专家模型可以达到 65–70 tokens/s 的回答速度——回复比你的阅读速度还快。浓缩一周的会议纪要、跨你自己的文档回答问题、响应智能家居 agent 的请求:你还没读完自己的问题,回复已经流出来了。干活的显卡功耗只有 70 W——桌面游戏主机的零头。在这个速度下,大多数日常 agent 工作——以及背后的个人数据——可以完全留在你自己的硬件上。
开始之前
- 一台有闲置 PCIe 插槽并装有 NVIDIA GPU 的 ZimaOS 设备——计算能力 8.0 或更高,显存 16 GB 或以上。以下方案在装有 RTX PRO 2000 的 ZimaCube 上验证过。
- ZimaOS 1.7 或更高版本,插入显卡后会自动激活 NVIDIA 驱动。
- 验证显卡:打开终端运行
nvidia-smi。能看到显卡,就说明准备好了。
如果显卡没有被识别,参见 GPU 扩展 了解物理安装。
路径 A:让 AI Agent 代劳
如果你的 ZimaOS 上装有 DeepSeek Harness(或其他编码 agent),整个搭建过程就变成一场对话。
从应用商店安装 DeepSeek Harness——参见 部署 DeepSeek Harness。
给 agent 它需要的权限。
- 文件夹授权让它能在你的硬盘上工作。
- Docker socket 授权允许系统级的容器管理。
两者在 DeepSeek Harness 指南的使用说明里都有覆盖。
这个任务只要求 agent 安装和配置软件——你的数据不参与其中。搭建期间授予 socket 权限;如果介意,完成后可以撤销。
开始对话,把已知信息交给它。 把下面这段粘贴进对话,然后持续沟通,直到 agent 报告成功:
在这台 ZimaOS 主机上搭建一个本地 LLM 服务器。以下是你需要知道的全部信息:
- 模型: Qwen3.6-35B-A3B,GGUF 格式,IQ3_XXS 量化。用
hfCLI 从 Hugging Face 仓库unsloth/Qwen3.6-35B-A3B-GGUF下载Qwen3.6-35B-A3B-UD-IQ3_XXS.gguf(约 12.3 GB)。 - 引擎: 用容器镜像
ghcr.io/ggml-org/llama.cpp:server-cuda运行 llama.cpp server。无需编译任何东西。 - GPU: 把所有层都放在 GPU 上(
--n-gpu-layers 99)。如果模型在这台 NAS 级机器上回落到 CPU,速度会崩溃。 - 设置: 16 GB 显卡上 128K 上下文,开启 flash attention,采样温度 0.7。永远不要把温度设为 0——贪婪采样会让这个模型无限重复。
- 验证: OpenAI 兼容端点必须在
http://<host-ip>:8080/v1上应答。发送一个简短的 chat completion 确认,然后报告容器名称和你所做操作的摘要。
如果哪里失败了,说明你尝试了什么、报错内容是什么。在改动任何系统级设置之前先问我。
- 模型: Qwen3.6-35B-A3B,GGUF 格式,IQ3_XXS 量化。用
在浏览器里验证。 打开
http://<your-nas-ip>:8080/v1/models——能看到 JSON 模型列表就说明服务器在运行。如果出了任何问题,把下文「遇到问题时」一节的笔记发给 agent,然后继续对话。
追求完全私密的最后一步: 在 agent 的模型设置里,把模型提供商切换到你的新本地端点。从此,agent 就在你自己的模型、你自己的硬件上运行——整个闭环都在家里。
路径 B:手动搭建
五个步骤,全程终端操作。
第 1 步:安装 GPU
打开机箱,把显卡插进 PCIe 插槽,完成——这块卡不需要供电线。
完整流程:GPU 扩展。
第 2 步:拉取引擎镜像
容器化的 llama.cpp server 内置了 sm_80–120 的 CUDA 内核,无需任何编译:
docker pull ghcr.io/ggml-org/llama.cpp:server-cuda |
第 3 步:获取模型
下载 Qwen3.6-35B-A3B 的 IQ3_XXS 量化 GGUF 文件——约 12.3 GB,选择这个量化是为了让整个模型装进 16 GB 显存,并给 128K 上下文留出空间。
如果你的设备网络受限,参见 如何手动下载大语言模型。
mkdir -p models/llm |
第 4 步:启动服务器
docker run -d --name llm-server --gpus all -p 8080:8080 \ |
--n-gpu-layers 99 把所有层都留在 GPU 上。在 NAS 级 CPU 上这不是可选项——模型一旦溢出到 CPU,速度就会崩溃。
第 5 步:打个招呼
服务器在 http://<your-nas-ip>:8080/v1 上暴露 OpenAI 兼容 API:
from openai import OpenAI |
整个搭建就是这样。把任何东西指向它——笔记应用的 AI 搜索、照片整理工具、你自己的脚本——它们每一个现在都在你自己的硬件上运行。
实测数据
在运行 ZimaOS、装有 RTX PRO 2000 的 ZimaCube 上实测:
| 项目 | 结果 |
|---|---|
| 回答速度 | 65–70 tokens/s——比阅读速度还快。同卡上 27B 稠密模型只有 18–23;MoE 架构是原因 |
| 上下文 | 64K 舒适——一部长篇小说的体量;128K 可用——你自己文档的小型文库;256K 在 16 GB 里装不下 |
| 功耗 | 负载 55–70 W,空闲 6–12 W——比游戏本还低,安静到忘了它在运行。适合 24/7 常开 |
| 稳定性 | 多轮对话和长文档检索均已验证 |
遇到问题时
- 服务器一直起不来。 运行
nvidia-smi确认 GPU 在列。然后用docker logs llm-server读日志——前几行通常会指出缺失的部分。 - 启动时端口冲突。 日志显示端口绑定错误:NAS 上另一个应用已经占用了 8080——这是自托管世界里非常常见的端口。挑一个空闲的主机端口,把所有客户端指向它——例如用
-p 8088:8080启动容器,并把 Base URL 设为http://<your-nas-ip>:8088/v1。 - 速度突然下降。 模型有一部分回落到 CPU 了。保持
--n-gpu-layers 99;如果你改用 Ollama,运行ollama ps查看 GPU/CPU 分配——Ollama 会悄悄做 offload。 - 模型无限重复。 你把温度设成了 0。这个模型家族需要 0.6–0.7;贪婪采样会毁掉它。
- 回答半句就停。 思考空间用完了。模型先思考再回答,思考 token 也计入上限——把
max_tokens保持在 2048 或更高。