多FPGA 进行模型推理

1. 多颗 FPGA 实现模型推理:完全可行,而且是主流方案

  • 绝大多数大模型、高吞吐、低延迟推理场景(如云端 AI 加速卡、自动驾驶域控、机器人中央计算单元)都是多 FPGA / 多芯片协同推理。
  • 典型做法:
    • 模型切层 / 切通道 / 切任务分布到多片 FPGA
    • 片间流水并行 + 数据并行
    • 每片 FPGA 负责一部分算子 / 层 / 特征图

只要带宽、时延、同步设计得当,性能几乎可以接近线性扩展


2. 多 FPGA 之间用什么总线 / 接口通信?

速度从高到低、从近到远排序:

(1)芯片内 / 紧耦合:Die-to-Die 互联(D2D)

  • UCIe、BoW、AIB 等
  • 用于 2.5D/3D 封装内多裸片(小芯片)
  • 带宽极高、时延极低

(2)板级高速:SerDes 高速串行接口

  • PCIe 5.0/6.0(最常用,软件生态最好)
  • CXL 2.0/3.0(未来大模型多芯片统一内存)
  • 100G/400G Ethernet(分布式多卡、多机箱)
  • 自定义 Multi-gigabit Transceiver(MGT) 直连(低时延专用)

(3)传统并行总线(基本不用)

  • AXI、APB 等是片内总线不用于多 FPGA 通信

3. 必须要有数据存储单元吗?

必须有,而且非常关键。

你至少需要三类存储:

  1. 片上存储(BRAM/URAM)
    • 存放权重、特征图、指令
    • 决定推理时延与吞吐
  2. 片外高带宽内存(HBM / GDDR6 / DDR5)
    • 大模型权重、特征图缓存
    • 多 FPGA 推理最吃带宽
  3. 片间共享 / 同步存储
    • 用于多 FPGA 之间的数据同步、乒乓缓冲、命令队列
    • 可以是:
      • 共享 DDR
      • CXL 共享内存
      • 片上双端口 RAM + 高速链路

一句话:

没有存储,多 FPGA 就无法流水线、无法缓存中间特征图、无法切模型。


极简总结

  • 多 FPGA 推理:可行,且是高性能 AI 推理的标准方案
  • 片间通信:PCIe/CXL/Ethernet/ 自定义 MGT
  • 数据存储:必须有,片上 + 片外 + 片间缓存缺一不可

多 FPGA 模型推理整体架构(板级 / 多卡)

plaintext

┌─────────────────────────────────────────────────────────────────┐ │ 主机 / 主控 CPU │ └───────────────────────┬─────────────────────────────────────────┘ │ PCIe/CXL 管理通道 ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 板级高速交换区域 │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ │ 高速交换芯片 │◄───────►│ 时钟/同步模块 │ │ │ │ (PCIe Switch / │ │ (同步多片时序) │ │ │ │ 自定义MGT交换) │ └─────────────────┘ │ │ └────────┬────────┘ │ └───────────┼─────────────────────────────────────────────────────┘ │ 高速数据通路 (PCIe 5.0/CXL/100G/MGT直连) ┌──────────┴──────────┐ ┌──────────────────┐ ┌───────────────┐ │ │ │ │ │ │ │ FPGA 0 │ │ FPGA 1 │ │ FPGA N │ │ (模型前层/编码) │◄──┤ (模型中层/计算) │◄──┤ (模型后层/输出)│ │ │ │ │ │ │ └───────────┬──────────┘ └────────┬─────────┘ └───────┬───────┘ │ │ │ ┌──────┴──────┐ ┌──────┴──────┐ ┌─────┴──────┐ │ 片外存储 │ │ 片外存储 │ │ 片外存储 │ │ HBM/DDR5 │ │ HBM/DDR5 │ │ HBM/DDR5 │ └─────────────┘ └─────────────┘ └────────────┘ 

内部结构(单 FPGA 内部)

plaintext

┌─────────────────────────────────────────────────────┐ │ FPGA 芯片 │ │ ┌─────────────────┐ ┌─────────────────────┐ │ │ │ 片间高速接口 │◄───────►│ 片上总线 AXI/Stream │ │ │ │ (PCIe/MGT硬核) │ │ 数据流互联 │ │ │ └────────┬────────┘ └──────────┬──────────┘ │ └───────────┼──────────────────────────────┼───────────┘ │ │ ┌──────────┴──────────┐ ┌──────────┴──────────┐ │ 计算阵列 │ │ 片上存储 │ │ (DSP/ALU/张量引擎) │◄──────►│ BRAM / URAM │ └──────────┬──────────┘ └──────────┬──────────┘ │ │ └────────────────────────────────┘ │ ┌───────────┴───────────┐ │ 片外存储控制器 │ │ (DDR5/HBM 控制器) │ └───────────┬───────────┘ │ ┌───────────┴───────────┐ │ DDR5 / HBM │ └───────────────────────┘ 

关键通信总线(你问的重点)

  1. 片间通信总线
    • 高速串行:PCIe 5.0/6.0、CXL、100G/400G、MGT 直连
    • 用于:多 FPGA 之间传输特征图、权重、控制指令
  2. 片内通信总线
    • AXI4-Stream / AXI4 Full
    • 用于:FPGA 内部模块之间数据流、存储读写
  3. 存储单元(必须有)
    • 片上:BRAM、URAM → 缓存特征图、指令
    • 片外:DDR5、HBM → 存模型权重、大特征图
    • 多片之间:CXL 共享内存 / 乒乓缓冲

一句话总结

  • 多 FPGA 推理:可行,且是大模型加速标配
  • 通信:PCIe/CXL/MGT 高速串行
  • 存储:片上 BRAM + 片外 HBM/DDR5 必须有

你现在需要的是能直接落地的多 FPGA 模型推理切分策略,我会按「易实现→高性能」的优先级,给你 3 类核心策略,每个策略都包含适用场景、切分方法和工程注意事项,你可以直接对应到之前的多 FPGA 架构上。

核心前提

所有切分策略的核心目标:让多 FPGA 间的数据传输量最小、算力利用率最高、延迟最低,且必须匹配你之前架构里的PCIe/CXL/MGT 高速链路带宽


策略 1:按「模型层级」切分(Pipeline 切分,最易实现)

这是新手 / 中小模型首选的切分方式,也是工程上落地最多的方案。

核心思路

把模型的不同层 / 算子组分配到不同 FPGA 上,形成流水线:

  • FPGA 0:负责模型前处理 + 卷积 / Attention 前几层
  • FPGA 1:负责模型中间层(如 Transformer Block 1~N)
  • FPGA N:负责模型后几层 + 后处理 + 输出

适用场景

  • 模型:CNN、Transformer(LLM)、ResNet 等层级化明显的模型
  • 硬件:FPGA 数量≤8 片,片间带宽≥100Gbps(PCIe 5.0 x8 即可满足)
  • 需求:追求高吞吐(如云端推理),对单帧延迟要求不极致

工程实现要点

  1. 切分点选在数据量最小的层间:比如 Transformer 的 QKV 计算后(特征图维度小),而非大尺寸特征图输出后;
  2. 流水线对齐:让每片 FPGA 的单批次计算耗时接近(比如都控制在 100μs),避免某片 FPGA 空闲;
  3. 缓存设计:每片 FPGA 的片外 DDR/HBM 缓存当前层的权重 + 输入特征图,片上 BRAM 缓存中间结果;
  4. 示例(LLM 7B 模型):
    • FPGA 0:Embedding 层 + Transformer Block 1~4
    • FPGA 1:Transformer Block 5~8
    • FPGA 2:Transformer Block 9~12 + Linear 输出层

策略 2:按「数据维度」切分(Parallel 切分,高性能)

也叫 “张量并行 / 通道并行”,适合大模型、高算力需求场景。

核心思路

同一层的计算任务按数据维度拆分,多 FPGA 并行计算后合并结果:

  • 比如 CNN 的卷积层:将输入特征图的通道(Channel)拆分成 N 份,每片 FPGA 计算 1/N 通道的卷积;
  • 比如 Transformer 的 Attention 层:将 Q/K/V 矩阵按头数拆分(8 头 Attention 拆给 2 片 FPGA,每片算 4 头)。

适用场景

  • 模型:大模型(LLM 10B+、大尺寸 CNN)、单层层数多 / 计算量大的模型
  • 硬件:FPGA 数量≥4 片,片间带宽≥400Gbps(建议 CXL 或 MGT 直连)
  • 需求:追求低延迟(如自动驾驶、实时机器人推理)

工程实现要点

  1. 切分维度选计算密集型维度:优先按通道 / 头数 / 矩阵行 / 列切,而非空间维度(H/W);
  2. 同步设计:必须加全局同步模块(对应之前架构里的时钟 / 同步模块),保证多 FPGA 同时开始 / 结束计算;
  3. 结果合并:指定 1 片 FPGA 作为 “主 FPGA”,负责接收其他 FPGA 的计算结果并合并(如拼接通道、求和);
  4. 示例(ResNet50):
    • 卷积层通道数 = 256,4 片 FPGA 各计算 64 通道的卷积;
    • 每片 FPGA 输出 64 通道特征图,主 FPGA 拼接为 256 通道后进入下一层。

策略 3:混合切分(Pipeline+Parallel,最优解)

结合前两种策略的优势,是大模型多 FPGA 推理的 “终极方案”。

核心思路

先按层级切分把模型拆成多个阶段,再对每个阶段内的单一层数据并行切分

  • 示例(LLM 70B 模型):
    1. 阶段 1(FPGA 0/1):Embedding 层 + Block 1~10 → 2 片 FPGA 做数据并行;
    2. 阶段 2(FPGA 2/3):Block 11~20 → 2 片 FPGA 做数据并行;
    3. 阶段 3(FPGA 4/5):Block 21~30 + 输出层 → 2 片 FPGA 做数据并行。

适用场景

  • 模型:超大模型(LLM 50B+)、高吞吐 + 低延迟双需求场景
  • 硬件:FPGA 数量≥6 片,片间带宽≥400Gbps(CXL/400G Ethernet)
  • 需求:云端大模型推理、自动驾驶域控核心计算

工程实现要点

  1. 层级切分控制阶段数≤FPGA 总数量 / 2,避免流水线过长;
  2. 数据并行的 FPGA 组内用 MGT 直连(低延迟),组间用 PCIe/CXL(高带宽);
  3. 权重分配:每个 FPGA 只存自己负责的那部分权重(减少存储压力);
  4. 容错设计:某片 FPGA 故障时,可降级为单组数据并行(比如 2 片→1 片)。

策略选择速查表

表格

切分策略实现难度片间带宽要求适用场景核心目标
层级切分≥100Gbps中小模型、高吞吐易落地、高吞吐
数据维度切分中高≥400Gbps大模型、低延迟低延迟、高算力
混合切分≥400Gbps超大模型、双需求平衡吞吐 + 延迟

总结

  1. 入门首选层级切分:逻辑简单,适配成本低,能快速验证多 FPGA 推理可行性;
  2. 高性能选数据维度切分:需重点优化片间同步和带宽,适合低延迟场景;
  3. 超大模型选混合切分:结合前两者优势,是工程上的最优解,但需做好算力 / 带宽规划。

一、多 FPGA 推理 总线推荐(按优先级)

1. 板内多 FPGA(同一块板卡)

首选:自定义 MGT 直连 + AXI-Stream 封装

  • 速率:10G/25G/100G 每通道
  • 优势:时延最低、无协议开销、最适合推理流水
  • 适用:模型切分、特征图传输、流水同步

次选:PCIe 5.0 x8/x16

  • 带宽:x16 单向~128GB/s
  • 优势:生态成熟、可直接连 CPU、可做控制 + 数据通路

高端:CXL 3.0

  • 支持共享内存,多 FPGA 像在同一片内存里
  • 大模型切分最舒服

2. 多板卡 / 机柜间

  • 100G/400G Ethernet
  • 400G QSFP-DD 自定义 SerDes

二、你最关心的:带宽怎么算?

我给你最简公式,FPGA/AI 推理通用。

关键公式

1. 特征图数据量

Data=H×W×C×DataType_bit

  • H/W:特征图高宽
  • C:通道数
  • DataType_bit:
    • FP32 → 32
    • FP16/BF16 → 16
    • INT8 → 8
    • INT4 → 4

2. 片间需要的最小带宽

冗余

  • Latency:你能接受的传输时延
  • 1.2~1.5:协议开销、拥塞冗余

三、直接给你算 3 个真实场景

场景 1:CNN 中间特征图传输(典型 FPGA 推理)

  • H=32, W=32, C=256
  • INT8
  • 帧率 30fps
  1. 单张特征图点数:32×32×256 = 262,144
  2. 数据量:262,144 × 8bit = 2Mb = 256KB
  3. 每秒数据量:256KB × 30 = 7.5MB/s

加 1.5 倍冗余:→ 需要~11.25MB/s 有效带宽

总线推荐

  • 随便一个 PCIe 3.0 x1 都够
  • 实际用 MGT 10G 通道 毫无压力

场景 2:Transformer 层间切分(大模型常用)

  • 特征:Token=512,Hidden=4096,INT8
  • 每帧一层输出:512×4096 Byte
  1. 单层数据:512×4096 = 2MB
  2. 30fps:60MB/s加冗余 → 90MB/s

总线推荐

  • PCIe 4.0 x4 轻松跑
  • 25G MGT 直连

场景 3:大模型张量并行(多 FPGA 算同一层)

  • Hidden=8192,FP16
  • 切 4 片 FPGA,每片传输 8192/4=2048 维度
  1. 每 Token:8192×2Byte = 16KB
  2. 512Token:8MB
  3. 30fps → 240MB/s加冗余 → 360MB/s

总线推荐

  • PCIe 5.0 x4
  • 50G/100G MGT

四、我直接给你最终选型结论(不用你再算)

1. 模型层级切分(Pipeline)

  • 总线:PCIe 5.0 + 10G/25G MGT 直连
  • 带宽:10~100Gbps 足够

2. 模型张量 / 通道并行(Parallel)

  • 总线:100G MGT / PCIe 5.0 x16 / CXL
  • 带宽:100~400Gbps

3. 板间多卡

  • 总线:400G Ethernet 或 QSFP-DD

五、极简记忆口诀

  • CNN 小特征图:10G~25G 够用
  • Transformer 层间:50G~100G 稳妥
  • 张量并行:100G+ 才够爽

Read more

Comfy-Photoshop-SD插件完整使用指南:在Photoshop中直接运行Stable Diffusion

Comfy-Photoshop-SD插件完整使用指南:在Photoshop中直接运行Stable Diffusion 【免费下载链接】Comfy-Photoshop-SDDownload this extension via the ComfyUI manager to establish a connection between ComfyUI and the Auto-Photoshop-SD plugin in Photoshop. https://github.com/AbdullahAlfaraj/Auto-Photoshop-StableDiffusion-Plugin 项目地址: https://gitcode.com/gh_mirrors/co/Comfy-Photoshop-SD 还在为AI绘画工具和Photoshop之间的频繁切换而烦恼吗?Comfy-Photoshop-SD插件为你带来了完美的解决方案。这个创新工具将ComfyUI的强大AI生成能力无缝集成到Photoshop中,让你在熟悉的创作环境中直接使用Stable Diffusion的各种功能。无论你是

云端微光,AI启航:低代码开发的智造未来

云端微光,AI启航:低代码开发的智造未来

文章目录 * 前言 * 一、引言:技术浪潮中的个人视角 * 初次体验腾讯云开发 Copilot * 1.1 低代码的时代机遇 * 1.1.1 为什么低代码如此重要? * 1.2 AI 的引入:革新的力量 * 1.1.2 Copilot 的亮点 * 1.3 初学者的视角 * 1.3.1 Copilot 带来的改变 * 二、体验记录:云开发 Copilot 的实际操作与感受 * 2.1 初步接触:云开发 Copilot 的界面和功能布局 * 2.2 操作过程详解:从需求输入到初步成果 * 2.2.1

Nature新刊Sensors:清华团队突破机器人触觉难题,多模态感知精度直逼人类指尖

Nature新刊Sensors:清华团队突破机器人触觉难题,多模态感知精度直逼人类指尖

首次让触觉数据从“数值”变成“可理解的信息” ——鸽眼的启发 目录 01  传统触觉传感器的痛点 电子皮肤(e-skin):分辨率和模态难两全 视觉触觉传感器:光谱范围被“卡脖子” 数据解读:多模态信息“各说各话” 02  仿生灵感 导电层:既是“电极”也是“透光开关” 荧光层+反射层:多光谱“信息接收器” 可调节气压,适应不同物体 03  DOVE模型让触觉会“说话” 多模态数据“融合解读” 物体差异“对比推理” 联想判断 04  6大维度刷新触觉传感器纪录 三指灵巧手 平行夹爪 05  待解难题 微型化:目前还无法装在机器人指尖 耐用性:长期使用后性能会下降 动态场景适应:无法处理快速运动的物体

基于陀螺仪航向反馈的轮式机器人PID直线控制

1. PID控制在轮式移动机器人直线运动中的工程实现 轮式移动机器人在实际运行中常面临一个基础但关键的问题:即使对左右轮施加完全相同的PWM驱动信号,车辆仍会持续向某一侧偏转。这种现象并非由控制算法缺陷导致,而是源于机械系统固有的物理偏差——电机特性不一致、轮径微小差异、地面摩擦力分布不均、装配公差等因素共同作用,使得左右轮在相同输入下产生不同的实际输出转速。本方案摒弃传统依赖编码器反馈轮速的闭环方式,转而利用车载陀螺仪(MPU6050)测量的航向角作为系统状态反馈量,构建以航向角为被控量的PID控制器,直接调节右轮PWM输出,使车辆在无外部视觉或激光辅助条件下自主维持直线轨迹。该方法降低了传感器部署复杂度,避免了轮径标定、编码器安装偏心等额外误差源,特别适用于低成本教育平台与快速原型验证场景。 1.1 系统建模与控制架构设计 在经典自动控制理论中,一个完整的闭环控制系统包含被控对象(Plant)、执行器(Actuator)、传感器(Sensor)、控制器(Controller)及设定值(Setpoint)。本系统中: * 被控对象 :小车整体动力学模型,其输入为左右轮PWM