RK1828 Multi-Card Cascade: Deploying a 27B LLM at the Edge
RK1828 多卡级联:端侧 27B 大模型部署方案解析
多卡级联的技术动因
端侧推理的两项约束
| 约束类型 | 表现形式 | 直接后果 |
|---|---|---|
| 显存容量 | 单卡无法容纳大模型全部权重 | 大参数量模型无法在单卡部署 |
| 算力吞吐 | 单卡吞吐不足以支撑持续解码 | 模型即便可加载,吞吐也无法满足交互要求 |
多卡级联的技术路径较为直接:将多张卡的显存与算力聚合,作为单一逻辑加速器统一调度。
模型的可切分性
Transformer 由结构相同的 Decoder 层堆叠而成,层与层首尾相接,各层参数相互独立。由此可得:
- 前若干层的计算完成后,其输出可直接交由持有后续层权重的另一块芯片继续计算
- 无需对原始权重做任何结构性裁剪,切分后重新组合仍为完整的原模型
整体架构与硬件形态
Host 侧承担编排职责:负责分词与词向量映射、设备发现、分段调度以及末段的 Logits 采样;各卡仅执行自身分段的 Decoder 层计算,并以中间特征(Hidden States)形式向下一段传递。
硬件形态与接入方式
RK1828 为 SO-DIMM 形态的 NPU 算力卡,官方提供三种接入方式:
| 接入方式 | 结构 | 特点 |
|---|---|---|
| PCIe 独立直连 | 每张卡各占一条独立 PCIe 2.0 x1 | 链路独立,无共享争抢 |
| PCIe Switch 扩展 | 上行 PCIe 2.0 x1 或 PCIe 3.0 x4,经 Switch 分发至 2/4 卡 | 节省 Host 接口资源 |
| USB3.0 HUB 扩展 | 4 张卡共享一个 USB3.0 HUB | 集成速度快,适合快速验证 |
三种方式对性能的影响有限:据瑞芯微官方测试,4K / 8K 输入下 PCIe 相较 USB3.0 在 TTFT 与 Prefill 上约有 2%~3% 的优势,Decode 阶段两者基本持平。
除了 SO-DIMM 形态,RK1828 还有 M.2 Key B-M 版本。
Host 平台支持
- ARM64 平台:RK3588、RK3576 等,支持 Linux 与 Android
- Windows x86 平台
- 复用 RKNN3 Runtime 与应用接口,无需为上层的应用重新适配
配置与模型规模对照
| 配置 | 已适配模型 | 典型应用方向 |
|---|---|---|
| 2 卡 | Qwen3.5-9B(2 个 segment) | 轻量对话、多模态理解、本地语音处理 |
| 4 卡 | Qwen3.8-27B(4 个 segment) | 大参数中文模型、代码 Agent、本地知识问答 |
核心原理:层间流水线并行
模型分段方式
分段以 Decoder Layer 为单位连续切分。以 Qwen3.5-9B(32 层)双卡方案为例:
| Segment | 加载位置 | 负责内容 |
|---|---|---|
| 分段 0 | 卡 0 | Layer 0–18,共 19 个 Decoder Layer |
| 分段 1 | 卡 1 | Layer 19–31,共 13 个 Decoder Layer + Final Norm + LM Head |
可以看出分段并非均分(19 / 13),而是由 RKNN3-Toolkit 按量化权重与内存占用均衡后确定;末段额外承担 Final Norm 与 LM Head。完整推理链路为:
Host 分词 / 词向量 → 卡 0 前段计算 → 中间特征传递 → 卡 1 后段 + 输出头 → Logits → Host 采样四卡方案的原理相同,仅增加中间分段数量。
串行执行:数据依赖决定执行顺序
理解该方案的关键在于卡间数据传递机制。分段之间传递的是中间特征(Hidden States)与本段 KV Cache,而第 N+1 段的输入恰为第 N 段的输出——缺少输入即无法计算,因此后一段必须等待前一段完成。
就单个 token 而言,任一时刻仅有一个分段参与计算。 这并非调度策略的选择,而是数据依赖导致的必然结果。该过程可类比为数据流经多级级联滤波链:每一级仅完成自身对应的运算段,输出作为下一级输入,不存在多级同时处理同一样本的情形。
另有两点实现细节需要说明:
- 中间特征当前经 Host 侧传递,卡间直连仍在开发中
- 方案要求
stage_count = 分段数,且可用设备数 ≥ 分段数,否则无法完成一次完整推理
Prefill 流水线:Bucket 拆分与队列化并行
这是该方案在长输入场景下的关键优化,也修正了“prefill 只能纯串行”的直观印象。
实践中,长输入并不会作为一个整体串行流过所有分段,而是按 Bucket 拆分,各分段的执行队列化并行:
| 阶段 | Bucket 0 | Bucket 1 | Bucket 2 |
|---|---|---|---|
| 时间片 1 | S0 | — | — |
| 时间片 2 | S1 | S0 | — |
| 时间片 3 | SN | S1 | S0 |
即当 Bucket 0 进入分段 1 时,Bucket 1 已可在分段 0 上开始计算。通过这种方式,各分段在长 prompt 场景下得以保持忙碌,Prefill 吞吐显著提升——Qwen3.8-27B 四卡方案的 Prefill 吞吐达 592.1 tokens/s,远高于其 Decode 吞吐的 13 tokens/s。
Decode 阶段则不同:由于每轮仅有一个 token,无法拆分成 bucket,各分段处于“逐个传递、轮流工作”的状态,流水线利用率天然偏低。这也是两阶段吞吐差异达数十倍的根本原因。
与张量并行的对比
| 对比项 | 层间流水线并行(本方案) | 张量并行(Tensor Parallel) |
|---|---|---|
| 切分对象 | 按 Decoder 层切分 | 按 矩阵分片切分 |
| 卡间协作方式 | 串行传递中间特征 | 并行计算 + 归约 |
| 卡间通信量 | 每段边界传递一次 | 每层内部多次高频同步 |
| 互联带宽要求 | 可接受 PCIe 2.0 x1 / USB3.0 | 极高(需 NVLink 级别) |
| 端侧可行性 | 可行 | 受限于 PCIe / M.2 带宽 |
端侧选择层间流水线并行,本质上是在卡间带宽受限条件下的工程取舍。
TTFT 与 TPOT:性能指标的成因分析
首 token 延迟(TTFT)的成因
由两个因素叠加导致。
因素一:模型必须先完成全部输入的编码。 Transformer 采用自回归生成方式,首个输出 token 需对全部输入 token 完成 attention 计算后方可预测。而 attention 的每一层都依赖上一层的完整输出,层间构成串行依赖链。
可类比为:查阅一份数千行的文档并作答,须先完整读取文档内容。这段“读取”耗时即对应 prefill 阶段。
因素二:输入编码过程被切分为多站流水,且随输入长度线性增长。 总 prefill 时间 ≈ 各段计算耗时 + 卡间传输耗时之和。因此 TTFT 与输入长度近似成正比(下表为官方测试数据):
| 配置 | 4K 输入 | 8K 输入 | 比值 |
|---|---|---|---|
| Qwen3.5-9B · 2 卡 · PCIe | 4.80s | 9.73s | ≈ 2.03 |
| Qwen3.8-27B · 4 卡 · PCIe | 6.92s | 13.67s | ≈ 1.98 |
输入长度翻倍,TTFT 亦接近翻倍——说明 Prefill 阶段的时间主要消耗在输入 token 的处理上,而非固定开销。
后续 token 耗时(TPOT)的成因
关键在于 KV Cache。prefill 阶段各卡计算得到的键值缓存均保留在本地显存中,此后每一轮 decode:
- 仅需将单个新 token(上一轮输出)送入流水线,无需重新计算全部输入 token
- 各卡以新 token 与已缓存 KV 进行增量计算
- 仍需经过全部分段,但每段仅处理单个 token 的计算量
单位成本对比
| 阶段 | 单位成本(Qwen3.8-27B · 4 卡 · 4K 输入,官方数据) | 瓶颈性质 |
|---|---|---|
| Prefill | 592.1 tokens/s ≈ 1.69ms/token | 算力受限——Bucket 队列化并行,NPU 利用率高 |
| Decode | 13.02 tokens/s ≈ 76.8ms/token | 访存受限——每步均需重新读取各卡权重 |
就单个 token 的处理成本而言,prefill 较 decode 低 40 余倍。 这也解释了工程中一项常见优化:相同的长系统提示词在第二次提问时响应明显加快,原因在于 KV Cache 可直接复用,prefill 无需重跑(前缀缓存 / Prompt Cache)。
结论可归纳为:
TTFT 偏高源于“完整输入编码”与“分段串行传递”两项因素的叠加,且随输入长度线性增长;Decode 阶段的单 token 延迟则主要受访存带宽限制。
软件栈:从应用入口到 NPU 的完整链路
第 1 层 · 应用层 浏览器 / OpenAI SDK / OpenCode
↓
第 2 层 · API 层 本地 Web UI / OpenAI-compatible API
↓
第 3 层 · Server 层 RKLLM3 Server / Agent 编排
↓
第 4 层 · Runtime 层 RKNN3 Runtime
↓
第 5 层 · 硬件层 RK1828 NPU 算力卡 × N
请求自上而下传递,生成结果沿相反方向以流式 token 返回| 层级 | 职责 | 典型入口 |
|---|---|---|
| 应用层 | 用户 / 业务系统交互 | 浏览器 / OpenAI SDK / OpenCode |
| API 层 | 提供标准化推理接口 | 本地 Web UI / OpenAI-compatible API |
| Server 层 | 模型服务与 Agent 编排 | RKLLM3 Server / Agent 应用 |
| Runtime 层 | 模型推理运行时 | RKNN3 Runtime |
| 硬件层 | 端侧 NPU 加速 | RK1828 NPU 算力卡 |
性能数据
测试条件:RK3588 Host · RK1828 SO-DIMM · 量化 W4A16 · Output 固定 128 tokens(瑞芯微官方测试)
| 模型 | 加速芯片 | Input | 接口 | TTFT (s) | Prefill TPS | Decode TPS |
|---|---|---|---|---|---|---|
| Qwen3.5-9B | 2× RK1828 | 4K | PCIe | 4.80 | 853.7 | 33.19 |
| Qwen3.5-9B | 2× RK1828 | 4K | USB3.0 | 4.90 | 836.0 | 33.52 |
| Qwen3.5-9B | 2× RK1828 | 8K | PCIe | 9.73 | 841.7 | 32.33 |
| Qwen3.5-9B | 2× RK1828 | 8K | USB3.0 | 9.94 | 824.0 | 32.65 |
| Qwen3.8-27B | 4× RK1828 | 4K | PCIe | 6.92 | 592.1 | 13.02 |
| Qwen3.8-27B | 4× RK1828 | 4K | USB3.0 | 7.15 | 573.2 | 13.02 |
| Qwen3.8-27B | 4× RK1828 | 8K | PCIe | 13.67 | 599.4 | 12.74 |
| Qwen3.8-27B | 4× RK1828 | 8K | USB3.0 | 14.08 | 581.7 | 12.83 |
注:官方测试中,PCIe 接口在 TTFT 与 Prefill 上相较 USB3.0 约有 2%~3% 的优势。
指标定义
| 指标 | 含义 | 对应阶段 |
|---|---|---|
| TTFT | Time To First Token,自提交输入至输出首个 token 的延迟 | 覆盖 prefill |
| Prefill TPS | 输入阶段的 token 处理吞吐 | prefill |
| Decode TPS | 输出阶段每秒生成 token 数 = 1000 ÷ TPOT | decode |
数据解读
1. 参数规模翻倍带来吞吐显著下降。 Qwen3.5-9B 双卡 Decode 达 33.19 tokens/s,Qwen3.8-27B 四卡降至 13.02 tokens/s。模型参数量与分段数同时增加,单 token 需经历更多段的串行计算与传递。级联解决的是容量问题,而非吞吐问题。
2. 输入长度是 TTFT 的主导因素。 同为 4 卡配置,输入由 4K 增至 8K,TTFT 从 6.92s 升至 13.67s;而 Decode 吞吐几乎不变(13.02 → 12.74)。这印证了 Prefill 与 Decode 两阶段的瓶颈性质完全不同。
3. 接口差异在 Prefill 可见,在 Decode 不可见。 PCIe 与 USB3.0 的 TTFT 差距稳定在 2%~3%,而 Decode TPS 两者相同(均为 13.02)。原因是 Decode 阶段每轮传输的数据量极小,瓶颈落在权重读取而非链路带宽。
4. Prefill 吞吐随卡数下降,但降幅远小于 Decode。 9B 双卡 853.7 → 27B 四卡 592.1(降约 31%),而 Decode 从 33.19 降至 13.02(降约 61%)。这与 3.3 节的 Bucket 流水机制一致——Prefill 阶段的流水线可以被多个 bucket 填满,而 Decode 阶段无法。
资源占用与系统功耗
除性能指标外,Host 侧资源占用与整机功耗同样是端侧部署的关键约束。
Host 系统开销
测试条件:RK3588 Host · RK1828 SO-DIMM,以 4 核 A76 满载为 100% 基准(瑞芯微官方数据)
| 配置 | 接口 | CPU 平均占用 | 内存平均 | 内存峰值 |
|---|---|---|---|---|
| Qwen3.5-9B · 2 卡 | PCIe | 2.4% | 179 MB | 310 MB |
| Qwen3.5-9B · 2 卡 | USB3.0 | 2.0% | 181 MB | 312 MB |
| Qwen3.8-27B · 4 卡 | PCIe | 2.6% | 191 MB | 524 MB |
| Qwen3.8-27B · 4 卡 | USB3.0 | 2.2% | 187 MB | 523 MB |
Host 侧 CPU 占用率均在 3% 以内,内存占用为百 MB 量级——说明主机几乎不参与实际推理计算,主要承担编排与调度,计算负载已全部下沉至算力卡。
系统功耗
测试条件:RK3588 Host · 4× RK1828 SO-DIMM,整机(含散热风扇)验证(瑞芯微官方数据)
| 配置 | 接口 | Input | 系统平均功耗 | 系统峰值功耗 |
|---|---|---|---|---|
| Qwen3.5-9B · 2 卡 | PCIe | 8K | 30.5 W | 67 W |
| Qwen3.8-27B · 4 卡 | PCIe | 8K | 57.8 W | 119 W |
按卡数折算,单卡功耗量级约 15W(平均),与常规端侧算力卡相当。对功耗敏感的设备(电池供电、车载、机器人本体),这一量级需纳入整机功耗预算评估:27B 四卡方案的峰值功耗接近 120W,已超出多数小型移动平台的供电能力。

