多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

主流大模型介绍(GPT、Llama、ChatGLM、Qwen、deepseek)

主流大模型介绍(GPT、Llama、ChatGLM、Qwen、deepseek)

GPT系列模型 一、ChatGPT 的本质 * 发布者:OpenAI(2022年11月30日) * 类型:聊天机器人模型,基于自然语言处理技术 * 核心能力:理解语言、生成对话、撰写邮件/文案/代码、翻译等 * 增长数据:2个月用户破1亿,日活约1300万 二、GPT 系列模型演进对比 模型发布时间参数量核心创新主要局限GPT-12018.061.17亿引入生成式预训练 + Transformer Decoder语言模型单向;需微调才能泛化GPT-22019.0215亿多任务学习 + Zero-shot 能力无监督能力仍有限GPT-32020.051750亿Few-shot 学习 + Sparse Attention成本高、长文本不稳定、内容不可控ChatGPT2022.11基于GPT-3引入 RLHF(人类反馈强化学习)服务不稳定、可能生成错误信息 三、核心技术点回顾 1. GPT-1 * 使用单向 Transformer Decoder(

VSCode GitHub Copilot登录卡顿问题解决

🚀 终极解决方案:极致清洁安装 第一步:完全卸载 VSCode 并清理所有痕迹 这是为了消除任何潜在的全局配置或缓存冲突。 1. 打开 Windows 设置 > 应用 > 已安装的应用,找到 Visual Studio Code,点击卸载。在卸载过程中,如果询问是否删除用户数据,务必选择“是”。 2. 手动删除所有残留文件夹(请在执行前关闭VSCode): * %APPDATA%\Code\ (用户数据) * %USERPROFILE%\.vscode\ (全局扩展和缓存) * %LOCALAPPDATA%\Programs\Microsoft VS Code\ (安装目录,如果卸载程序未清理干净) 3. 重启电脑。这一步非常重要,可以确保所有与VSCode相关的进程和文件锁被完全释放。 第二步:重新安装 VSCode 1. 从 VSCode

理解 IDE 调用大模型(Cursor / Claude Code / Copilot / OpenClaw / Agent IDE) 的 session

理解 IDE 调用大模型(Cursor / Claude Code / Copilot / OpenClaw / Agent IDE) 的 session

一、Session 在 IDE 里的真实含义 在普通 ChatGPT 对话中: Session ≈ 一段聊天 但在 IDE 中: Session ≈ 当前开发工作空间的认知状态 它通常包含: ① 对话历史(Conversation Memory) 你之前说过什么: * 修改哪个模块 * 当前目标 * 已做决策 * 技术约束 模型通过这些推断你下一步意图。 ② 工程上下文(Code Context) IDE 会持续注入: * 当前打开文件 * 最近编辑文件 * git diff * 报错日志 * terminal 输出 * workspace 结构 所以 session 实际上是: 语言上下文 + 代码上下文 + 操作历史 ③ Agent 状态(关键) 在 Agent

Copilot 的agent、ask、edit、plan模式有什么区别

Copilot 的 ask、edit、agent、plan 四种模式,核心区别在于权限范围、操作主动性、代码修改权限、适用场景,以下从定义、工作机制、核心特点、典型场景与操作流程展开,帮你快速区分并选对模式。 一、核心区别速览(表格版) 二、分模式详细解析 1. Ask 模式:纯问答与代码理解 * 工作机制:基于当前文件 / 选中代码的上下文,回答自然语言问题,不修改任何代码,仅输出文字解释、建议或思路。 * 典型用法: * 解释某段代码逻辑(如 “这段 Python 函数做了什么”); * 咨询技术方案(如 “如何在 Go 中实现重试机制”); * 调试思路(如 “这个死循环可能的原因”)。 * 关键特点:安全无风险,适合学习、快速澄清和非修改类咨询。