第 1 章 设计目标与硬件约束

这套系统的硬件清单并不奇特,但这批硬件凑在一起能跑出什么,并不是一开始就明摆着的。


1.1 为什么会有这套系统

这个项目不是从“我要做一个 LLM 推理系统”的愿景出发的,而是从一批已经存在的机器出发的。

在这之前,已经有一批运行 JudgeDuck-OS 的 N100 小机器,长期用作在线评测(OJ)节点。它们能够网络启动、远端执行、快速载入用户程序并返回结果。这套流程对评测来说够用;但对推理来说,它的意义是:已经有一批可以在网络上被远程指挥的计算节点,只是还没有被当成计算集群用。

到 2025 年初,大型语言模型的规模已经让单机部署变得难以置信地昂贵。DeepSeek-V3 系列的官方发布格式本身就是 fp8(含 MTP head 共约 685B 参数),完整权重在磁盘上约 688 GB。主流做法是 NVLink 多卡或者 InfiniBand 集群,而这些选项在这里都不可用,也不是目标。

问题因此变成了:手边这批硬件,到底能不能硬趟出一条路?


1.2 Host 机器

整套系统有一台 host 机器,是 2023 年自费购置的主力工作机,当时的配置是 13900K + 128 GB DDR5,用于日常科研和开发。做 duck-llm 之前,这台机器和鸭子群完全没有关联;后来在项目推进过程中,逐步加装了网卡和 GPU,才接入了这套系统。

CPU:Intel i9-13900K,24 核(8P+16E),最高睿频 5.8 GHz。

内存:128 GB DDR5,物理形态是 4 条 32 GB DIMM,经过比较完整的 memtest86 之后稳定跑在 5400 MT/s。DDR5 的频率调校并不轻松,当时经历了多轮测试才敢把长期负载压在这个频率上。

memtest86 截图
图:host 机器装机阶段的 memtest86 跑分,内存 4x32GB DDR5 稳定通过。

GPU:NVIDIA RTX 5090,Blackwell 架构,32 GB 显存,显存带宽约 1792 GB/s,于 2026 年 2 月初安装到位。为什么是 5090,后面在约束分析里会说。

网卡:4 张 Intel E810-C,每张一个 SFP28 口,跑 25 GbE;另外还有一张 Realtek RTL8125 2.5 GbE 用于管理网络。这 4 个 25 GbE 口是系统和 duck 群通信的上联侧主链路,分别对应四个独立的广播域。

host 机箱现状
图:host 机箱当前状态,额外竖起的风扇是为给 4 张 25GbE 网卡散热加装的。


1.3 Duck 节点群

“鸭子”(duck)是这套系统的远端计算节点,共 32 台在役。

每台鸭子的基本配置是:

项目规格
CPUIntel N100,4 核 4 线程,官方最高睿频 3.4 GHz
内存32 GB DDR4-3200
网口1GbE(RTL8168)+ 2.5GbE(RTL8125)
指令集AVX2 + FMA,无 AVX-512,无原生 BF16

这批鸭子在 2024 年 12 月以准系统形式采购,当时的出发点还是“评测机扩容”,并不是为 LLM 推理。但当时就已经给每台配了 32 GB DDR4-3200,这个内存容量在后来的 LLM 路线里变得非常关键。

如果不熟悉这颗 CPU,需要明确一点:N100 不是服务器 CPU,也不是常见的高性能推理节点处理器,而是一颗 6W、4 个 E-core(Alder Lake-N,Gracemont 系)、单通道内存、只有 AVX2 的低功耗小核 x86(Intel ARK)。也正因为它这么弱,后面的 fp9 自定义格式、same-ELF SMP 和 AFD 分工才显得不是“常规优化”,而是被硬件现实逼出来的路径。

采购规模比最终在役的 32 台更大:最初按 100 台 N100 准系统 + 100 条 32 GB DDR4-3200 的规模下单,总内存约 3.2 TB。后来在役的 32 台,是从这 100 台中划拨出来的一部分。

鸭子装机现场
图:2025 年 1 月初,鸭子装机现场。

N100 的实际频率口径:Intel 官方标称 N100 最高睿频 3.4 GHz,单核跑到这个频率没有问题。但全核持续负载下,实际可维持的频率更接近 2.9 GHz 左右;为了在这个频率下长时间稳跑,还专门写了 BIOS 调教 SOP(包括调整 Turbo Ratio Limit 和开放 PL1/PL2)。

内存带宽:32 GB DDR4-3200 单通道,理论带宽约 25.6 GB/s。这个数字是后续 fp9 kernel 设计的关键约束。

集群供电:每 8 台鸭子配一组 12V/200W 的电源(型号 LRS-200N2-12)。

到 2026 年 3 月真要跑 DeepSeek-V3.2 的时候,还发现有几台鸭子因为 BIOS 电池耗尽而“失忆”——可以响应 magic packet 唤醒,但不再按预期进入 PXE 启动。随后统一给那些“失忆过”的鸭子换了 CR1220 电池。这是一个集群进入真实维护阶段的标志性细节。


1.4 网络拓扑

网络并不复杂,但从起点到最终形态走了一段路。

最终形态是:4 个相互隔离的星型子网,每个子网包含 8 只鸭子,公用一台可管理交换机(48x2.5GbE + 4x25G uplink)。

  • Host 侧:4 个 DPDK 口,IP 分别是 10.21.1.110.21.2.110.21.3.110.21.4.1
  • Duck 侧:32 个 IP,分布在 10.21.[1-4].101~108

每个广播域里,host 以 25GbE 接交换机上联口,8 只鸭以 2.5GbE 各自接交换机接入口,端口均配置为 untagged,不需要在节点侧处理 VLAN 细节。

为什么是 2.5GbE:更早时期,鸭子用的是 1GbE 链路。每 token 在 1GbE 下的网络序列化时间约 15 ms,换到 2.5GbE 后可以压到约 6 ms,这个差距直接影响单步 forward 的端到端时延。升速的驱动力不是追求理论吞吐,而是序列化时间本身是延迟瓶颈。

为什么 host 要 4 个 NIC:一个 25GbE 口,对端连 8 只 2.5GbE 的鸭子,理论上联侧(25Gbps)对下行侧(8 × 2.5Gbps = 20Gbps)有足够余量。4 个独立广播域意味着 4 个 DPDK worker 可以独立占用自己的 NIC,互不干扰,这个设计后来被证明是对的。

网络演化简述2025-02-16 先补了 10GbE 上联交换机(H3C S1850V2-28X),2025-02-28 改买 82599 / X520-DA4 把多口 10G 拓扑真正点亮;到 2026-02-10,再把这套拓扑整体升级成 25GbE 交换机(ZX-SWTG3DE48A6S)和 E810 网卡。中间还试过华为 SP570 25G 网卡,结果实物发热严重且 dmesg 行为不稳定,换回了兼容性更好的 Intel 方案。


1.5 约束推出的分离架构

把上面的数字放在一起,一个自然的分工就浮现出来了。

32 台鸭子的理论总内存带宽:32 × 25.6 GB/s ≈ 819 GB/s。

RTX 5090 的显存带宽:约 1792 GB/s,明显高于鸭子侧总量。

对于一个 685B 参数的模型(如 DeepSeek-V3.2),Attention 相关参数(包括 KV cache、MLA 低秩矩阵、attention projection)可以被 32 GB 显存装下;而 FFN/MoE 专家层的权重体积远超单机能容纳的范围,但可以分散到鸭子群的总内存里。

这个分工被称为 AFD(Attention-FeedForward Disaggregation)

  • Attention 放到单张 5090 上:显存带宽充裕,GPU 的并行计算能力直接用上。
  • FFN/MoE 专家层放到鸭子群上:每个 forward 步骤里,host 通过网络向鸭子广播输入激活值,鸭子完成 GEMV(矩阵向量乘)后回传结果,GPU 再消费这批输出。

选 5090 而不是更便宜的方案,核心判断只有两条:32 GB 显存能装下 Attention 侧工作集,且 1792 GB/s 显存带宽明显高于鸭子侧的理论总量。这不是靠榜单选出来的,而是系统约束选出来的。

N100 的指令集约束同样对架构有决定性影响:没有 AVX-512,没有原生 BF16 指令,这意味着要在 N100 上做高效推理,必须从格式和 kernel 层重新设计。fp9 这个自定义数值格式,就是在这个约束下被逼出来的——后面第 3 章会详细展开。


小结

这套系统的硬件不来自统一规划,而是从已有条件出发,一步步把约束变成设计决策:

  • N100 的 AVX2/FMA 约束 → 必须重新设计权重格式
  • 鸭子群的内存容量和带宽 → 只能放 FFN/MoE,不能放 Attention
  • 5090 的显存带宽优势 → Attention 集中到单卡处理
  • 以太网而非 NVLink/InfiniBand → 所有通信必须节省网络时延,每一步 forward 都不能浪费

这四个约束,奠定了后续整套系统设计的基础。


项目声明 / Project Disclaimer

本项目为作者以个人身份、利用业余时间推进的个人娱乐项目;除非另有明确说明,它与作者的任何雇主、客户、学校、单位或其他组织均无合作、雇佣、委托、赞助或背书关系,也不代表任何该等主体的立场。除普通个人捐赠外,本项目未获得任何资金支持。

This project is a personal hobby project developed by the author in a personal capacity and in personal time. Unless explicitly stated otherwise, it has no collaboration, employment, commission, sponsorship, endorsement, or institutional affiliation with any employer, client, school, partner organization, or other entity, and it does not represent any such party's views. No funding was received for this project except ordinary personal donations.

许可 / License

除非另有说明,本页原创文字、本站原创图片与本站原创图表采用 CC BY-NC-ND 4.0 发布。
转载时请保留原文标题、署名“JudgeDuck AI”、发布日期与原始链接;禁止商业转载、改写、摘编、翻译或基于原文创作演绎作品。

第三方商标、外部链接内容,以及文中另有标注的材料,不在上述许可范围内。

Unless otherwise noted, the original text, original images, and original figures on this page are licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.