桃子桃子快讯
返回首页
工具

NightRun:无操作系统启动,直接跑本地大模型

NightRun 是一个无 OS 的 LLM 推理运行时,从 U 盘或 SD 卡直接启动,在裸机 UEFI 环境下加载并…

2026.07.29 · 周三5 分钟阅读

NightRun 是一个直接在裸机上启动并运行大语言模型的运行时环境。它不依赖传统操作系统(Linux、macOS、Windows),机器固件(UEFI)会直接加载 NightRun,把量化后的模型文件读入内存,并在显示帧缓冲上绘制一个终端界面供用户对话。整个流程离线完成,无网络栈、无浏览器、无宿主机进程。

项目定位与运行方式

NightRun 的核心思路是「机器只做一件事」。它被烧录到 U 盘或 SD 卡中,从该介质启动后:

  • 固件直接调用 NightRun,不再加载任何 OS;
  • 1.3 至 2.4 GB 的量化模型以流式方式读入内存,并在读取过程中完成校验和验证;
  • 存储在读取完成后被「密封」,后续任何磁盘读操作都会被触发硬错误;
  • 用户随即看到一个聊天提示符,所有推理在 CPU 上本地完成。

项目以 Rust 实现,关键路径使用 no_std,支持 x86_64 普通 PC(U 盘启动)和 Raspberry Pi 5(SD 卡启动),并可通过 QEMU 进行无硬件测试。

技术实现要点

  • 启动与运行时:单一 UEFI 应用,自带 GOP 帧缓冲渲染、位图字体、USB 键盘输入(含光标编辑与回滚)、多核固件 MP 服务用于并行推理,以及串口诊断输出。在 Pi 5 上还会通过 RP1 驱动风扇。
  • 模型生命周期:自研 .nrm 容器格式替代通用 GGUF 用于运行时加载,但支持从 GGUF 转换;模型必须完全驻留在内存中才开始对话;CRC-32 校验在文件流式读取过程中完成,不存在独立的「二次校验」阶段。
  • 推理内核:手写量化内核,x86_64 平台使用 AV2 + FMA + F16C,Pi 5 平台使用 NEON,并保留标量参考实现。Q8_0、Q4_K、Q6_K 权直接以量化形式参与计算,不先生成去量化副本。Prompt 处理批量化,单次最多 64 个 token,并被证明与逐 token 解码逐位一致;生成循环不进行堆分配。
  • 正确性保证:贪心解码结果在每次改动后都与 llama.cpp 进行 token 级比对;分词器与官方 Hugging Face 分词器生成的测试夹具对齐;对话模板对照 apply_chat_template 验证。任何破坏一致性的内核改动都会被直接判定为错误。

已支持的模型与硬件

模型量化大小所需内存平台
Llama 3.2 1B InstructQ8_01.3 GB4 GBx86_64、Pi 5
Llama 3.2 3B InstructQ4_K_M1.9 GB6 GBx86_64、Pi 5
Granite 4.1 3BQ4_K_M2.0 GB6 GBx86_64、Pi 5
Qwen3 4B Instruct 2507Q4_K_M2.3 GB8 GBx86_64、Pi 5(8 GB)

针对三种架构,项目分别处理了 Llama 3.2 的 GQA、相邻配对 RoPE、tied embeddings;Qwen3 的 NEOX 风格 RoPE、per-head Q/K RMSNorm、无 BOS token 以及注意力宽度大于隐藏层维度等细节;Granite 4.1 仅支持 dense Transformer,混合 SSM/MoE 变体在转换阶段会被明确拒绝。任何使用 Q8_0、Q4_K、Q6_K 或 F32 张量的 GGUF 都可在保留原始 dtype 的前提下转换,但新架构仍需手动编写引擎与参考验证。

架构选择与意义

NightRun 故意停留在 UEFI Boot Services 阶段,不调用 ExitBootServices(),从而复用固件自带的 USB 键盘、显示与磁盘读取能力,避免自带「半套内核驱动」。项目方明确表示,「no conventional OS」并不意味着「pure bare metal」,措辞上的精确比噱头更重要。

从工程角度看,这是一个相当极客的实验性项目:它证明了大模型推理栈可以被压缩到一个 UEFI 应用之内,并保证与 llama.cpp 的输出一致。对于关注离线推理、嵌入式 AI、可信执行环境的开发者而言,NightRun 提供了一个可复现的起点。但它仍是社区驱动的小项目,并非主流厂商产品,性能、易用性与生态支持仍非常有限,更适合作为研究参考而非生产部署方案。

信源