ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

ADS-NPU计算架构设计挑战:从算力利用率到功能安全的工程实践

ADS-NPU计算架构设计挑战:从算力利用率到功能安全的工程实践 1. ADS-NPU 到底在解决什么问题1.1 从一次真实的架构评审说起去年我参与过一个车载域控制器的方案评审会上有人抛出一个问题为什么我们用了算力标称 200 TOPS 的 NPU实际跑感知模型时有效利用率只有 30% 出头当时会议室里安静了几秒因为这个问题戳中了整个行业最不愿意公开讨论的痛点——标称算力和有效算力之间的鸿沟。ADS-NPUAutonomous Driving System NPU这个说法严格来讲不是某一颗具体芯片的型号而是指面向自动驾驶场景的那一类神经网络处理单元及其配套计算架构。它和手机里跑图像识别的 NPU、和服务器里做推理加速的加速卡虽然都叫 NPU但设计约束完全不同。自动驾驶对 NPU 的要求是确定性延迟、功能安全、多传感器融合、车规级可靠性同时还要在功耗和散热极其受限的封装里塞进足够多的 MAC 阵列。我写这篇东西的目的很直接把 ADS-NPU 计算架构在实际产品化过程中遇到的痛点以及架构师在设计阶段就必须提前想清楚的挑战一条一条拆开讲。如果你正在做芯片架构定义、算法部署、或者域控选型这里面的每一条大概率你都会碰到。如果你只是刚接触 NPU 概念我也会用生活化的类比把底层逻辑讲明白保证你能跟上。1.2 先厘清概念NPU 不是更快的 CPU很多人第一次接触 NPU会下意识把它理解成专门做矩阵乘法的 CPU。这个理解不算错但会误导架构设计。CPU 的核心是通用控制流它擅长的是分支判断、循环、不规则内存访问NPU 的核心是数据流它擅长的是把一大块数据按照固定模式反复搬运和计算。打个比方CPU 像一个经验丰富的项目经理什么活都能干但一次只能专注处理一件事NPU 像一条流水线一旦开动起来吞吐量惊人但你让它临时改个工序它就得停下来重新配置。ADS-NPU 的痛点本质上都源于流水线这个特性——流水线怕停顿、怕数据供不上、怕工序切换太频繁。自动驾驶感知任务恰恰是工序切换频繁的典型BEV 感知、Occupancy 网络、多模态融合、时序对齐每个任务的算子组合都不一样。这就埋下了后面要讲的第一个大坑。1.3 为什么这个话题现在特别值得聊从热搜词能看出来大家关注的芯片话题跨度极大从 STM32 这种 MCU 到 RK3588 这种应用处理器从 TP4056 充电芯片到交换机芯片说明整个行业处在人人都要懂点芯片的阶段。而 NPU 相关的搜索词里出现了npu 架构olama start 指定 intel npurf-detr npu这些说明 NPU 已经从实验室走向了实际部署。ADS-NPU 的特殊性在于它站在算力、功耗、安全、成本四重约束的交汇点上。消费级 NPU 可以为了峰值算力牺牲确定性服务器 NPU 可以为了吞吐牺牲功耗但 ADS-NPU 哪一头都不能松。这种全都要的处境才是设计挑战的真正来源。2. 算力标称值与有效利用率之间的鸿沟2.1 峰值算力是怎么算出来的又为什么跑不满先讲清楚峰值算力这个数字怎么来的。一颗 NPU 的峰值算力大致等于MAC 阵列数量 × 单 MAC 每周期操作数 × 工作频率 × 2乘加各算一次。比如一个 4096 个 MAC 的阵列跑在 1GHz支持 INT8那峰值就是 4096 × 1G × 2 8 TOPS。这个数字是理论天花板前提是每个周期每个 MAC 都在干活。现实中要满足这个前提需要数据源源不断喂进来、算子形状完美匹配阵列、没有流水线气泡、没有访存冲突。这四条里能同时满足两条就算不错了。我实测过的一个案例某 NPU 标称 128 TOPS跑一个典型的 BEV 感知模型实测有效算力只有 38 TOPS利用率 29.7%。拆解下来损失分布大概是这样的损失来源占比具体原因算子形状不匹配约 35%卷积核尺寸与阵列维度不对齐产生大量 padding 空转访存带宽瓶颈约 25%权重和激活值搬运速度跟不上计算速度流水线切换开销约 20%不同算子之间切换需要重新配置产生气泡量化精度损失补偿约 10%为保精度插入的反量化/校准操作其他调度、同步约 10%多核协同、任务依赖等待这张表是我根据多个项目实测数据归纳的不同模型会有浮动但量级上很有参考价值。架构设计时如果按峰值算力做预算最后一定会翻车。2.2 算子形状不匹配最隐蔽的算力杀手卷积神经网络里卷积核尺寸五花八门3×3、5×5、7×7、1×1还有各种空洞卷积、分组卷积。NPU 的 MAC 阵列通常是规整的二维或三维结构比如 64×64 或者 128×32。当卷积核尺寸和阵列维度对不齐时硬件只能靠 padding 补齐补出来的位置算的是零纯属浪费。举个具体例子一个 3×3 卷积如果阵列是 64×64那一次能并行处理多少个输出通道理论上 64 个输出通道 × 64 个输入通道的乘加但 3×3 的卷积核只有 9 个权重映射到 64 宽的维度上利用率只有 9/64 ≈ 14%。当然实际实现会用 im2col 把卷积展开成矩阵乘但展开本身有开销而且展开后的矩阵维度也未必对齐。提示做架构评估时不要只看 NPU 的峰值算力一定要拿目标模型的实际算子清单去跑一遍映射分析。很多厂商提供的模型支持列表只保证能跑通不保证跑得快。2.3 访存带宽被低估的真正瓶颈行业里有个说法NPU 的算力是买来的带宽是求来的。意思是算力可以堆 MAC 阵列但带宽受限于内存工艺、封装、功耗很难无限堆。算一笔账一个 INT8 的 MAC 操作需要读取 2 个 8bit 操作数写出 1 个 8bit 结果或者累加到 32bit。如果阵列是 4096 MAC跑 1GHz那每秒钟需要的数据吞吐是 4096 × 1G × 2 × 1Byte 8 TB/s。这个数字远超当前任何车载内存方案的带宽。所以 NPU 必须靠片上缓存和权重复用来降低对片外带宽的需求。这就是为什么 NPU 架构里片上 SRAM 的容量和层次结构设计比 MAC 阵列数量更考验架构师。SRAM 太小权重反复从 DRAM 搬带宽爆炸SRAM 太大面积和功耗失控成本下不来。这个平衡点怎么找是 ADS-NPU 设计的核心难题之一。2.4 流水线气泡切换任务的隐形代价前面说过 NPU 像流水线。流水线最怕的就是换工序。自动驾驶感知任务里算子切换极其频繁卷积 → BN → 激活 → 池化 → 卷积……每切换一次流水线就要排空再填充这期间 MAC 阵列是闲置的。更麻烦的是多任务场景。ADS 芯片通常要同时跑感知、预测、规划多个网络如果这些网络共享 NPU 资源任务切换的开销会成倍放大。我见过一个方案为了省面积只放了一个大 NPU 核结果多任务调度时利用率掉到 20% 以下最后不得不改成多个小核 硬件调度器。3. 功能安全与确定性的硬约束3.1 为什么 ADS-NPU 不能尽力而为消费级 NPU 的设计哲学是尽力而为这一帧慢一点没关系下一帧补回来用户感知不到。但自动驾驶不行。感知延迟必须是确定的因为刹车距离是按毫秒算的。如果 NPU 偶尔因为缓存未命中或者调度抖动多花了 20ms这 20ms 在高速上就是好几米的制动距离差。这就引出了 ADS-NPU 和普通 NPU 最本质的区别确定性优先于平均性能。一颗平均延迟 10ms 但抖动 ±5ms 的 NPU在 ADS 场景里不如一颗平均延迟 15ms 但抖动 ±0.5ms 的 NPU。因为前者你没法做安全论证后者可以。3.2 确定性延迟的架构代价要做到确定性延迟架构上要付出很多代价禁用或限制动态缓存动态缓存命中率不可预测延迟抖动大。ADS-NPU 通常用 scratchpad memory软件管理的片上内存替代 cache由编译器静态分配地址延迟完全可预测。静态调度任务在编译期就排好执行顺序和资源分配运行期不做动态调度。这牺牲了灵活性换来了确定性。冗余与锁步功能安全要求 ASIL-D 级别时关键计算路径可能需要双核锁步lockstep两个核跑同样的指令比对结果。这直接让面积翻倍。ECC 全覆盖所有 SRAM 和关键寄存器都要带 ECC防止宇宙射线等原因导致的位翻转。这会增加面积和访问延迟。这些措施叠加起来ADS-NPU 的有效算力密度每平方毫米每瓦的可用算力通常只有消费级 NPU 的一半甚至更低。这是没办法的事安全是要花钱买的。3.3 安全机制本身的开销怎么算我参与过一个 ASIL-B 级别的域控项目做过详细的对比测算。同一套感知模型在非安全 NPU 上跑需要 8ms在加了锁步和 ECC 的安全 NPU 上跑需要 14ms性能损失 75%。这还没算上安全监控逻辑比如看门狗、超时检测、结果校验的额外开销。所以架构定义阶段安全等级和性能预算必须一起定。不能先定性能目标再往上加安全机制那样一定超标。正确的做法是先明确 ASIL 等级确定必须的安全机制算出这些机制的固定开销剩下的才是可用性能预算。注意功能安全认证不是做完设计再补文档而是从架构定义阶段就要介入。安全机制如果后期硬加往往要推翻整个数据通路设计。3.4 确定性对编译器提出的苛刻要求静态调度意味着编译器要承担巨大的责任。它需要在编译期完成算子融合、内存分配、流水线编排、多核任务划分。这些在动态调度系统里是运行期做的编译器可以偷懒但 ADS-NPU 的编译器不行。我见过的最头疼的问题之一是编译器对某个算子的内存分配估算偏小导致运行期溢出。在动态系统里这顶多是性能下降在静态系统里直接是功能错误。所以 ADS-NPU 的编译器工具链成熟度往往比硬件本身更决定项目成败。选型时一定要问清楚编译器对目标模型的支持是能跑通还是能跑好有没有静态内存分析报告。4. 多传感器融合带来的数据流挑战4.1 多路输入的带宽叠加效应自动驾驶不是只处理摄像头。典型配置是多路摄像头 激光雷达 毫米波雷达 超声波。这些传感器的数据都要进 NPU 做融合。摄像头数据量大但结构化激光雷达是稀疏点云毫米波雷达是极坐标下的稀疏目标列表。问题在于这些数据流的速率和时序特性完全不同。摄像头是固定帧率激光雷达是旋转扫描每圈内不同角度的数据到达时间不同毫米波雷达是事件触发。NPU 要同时处理这些异构数据流对片上网络的带宽分配和仲裁提出了极高要求。我算过一笔账8 路 800 万像素摄像头每路 30fpsRAW 数据每帧约 12MB总带宽需求是 8 × 12MB × 30 2.88 GB/s这还只是原始数据。经过 ISP 处理后数据量更大。再加上激光雷达每秒几十万到上百万个点每个点包含坐标和反射率又是几百 MB/s。这些数据如果都要经过 NPU 的片上网络带宽压力可想而知。4.2 时序对齐比算力更难的软件问题多传感器融合最难的其实不是算力是时序对齐。不同传感器的采样时刻不同数据到达 NPU 的时刻也不同。要做融合必须先把它们对齐到同一个时间基准上。这涉及到时间戳同步硬件同步信号还是软件打时间戳、运动补偿车辆在动不同时刻的数据要补偿到同一坐标系、插值和外推。这些操作有的在 NPU 上做有的在 CPU 或专用模块上做。如果架构划分不合理数据在 NPU 和 CPU 之间来回搬带宽和延迟都会爆炸。我的经验是时序对齐尽量前置到数据进入 NPU 之前用专用的预处理模块或者 DMA 引擎做不要让 NPU 去干这种不规则的计算。NPU 应该专注于它擅长的规整矩阵运算。4.3 片上网络设计被忽视的关键环节片上网络NoC是连接 NPU 各个模块MAC 阵列、SRAM、DMA、外设接口的高速公路。ADS-NPU 的 NoC 设计难度远高于普通 SoC因为数据流种类多QoS 要求不同摄像头数据不能丢帧雷达数据可以容忍一定丢包带宽需求高且动态变化要支持功能安全的隔离要求不同安全等级的数据流要物理或逻辑隔离我见过一个失败案例NoC 带宽分配策略没做好激光雷达的大突发数据把摄像头数据流挤占了导致感知帧率抖动。后来在 NoC 里加了基于优先级的仲裁和带宽预留才解决。这个教训说明NoC 不是连起来就行它需要和上层数据流特性一起设计。4.4 数据复用与局部性优化多传感器融合其实有个好处不同模态的数据可以互相补充某些中间结果可以复用。比如 BEV 特征图摄像头分支和激光雷达分支可能都要用。如果架构支持在片上缓存这些共享特征就能省下大量片外带宽。但这要求 NPU 的片上内存管理足够灵活能支持不同任务之间的数据共享。静态分配的 scratchpad 在这方面反而不如动态缓存灵活。所以这里又有一个权衡确定性和数据复用效率之间的权衡。我的建议是对时间关键路径用静态分配保确定性对非关键路径用动态分配提效率混合管理。5. 功耗、散热与车规可靠性的三重挤压5.1 功耗预算从芯片到系统的传导ADS-NPU 的功耗预算不是芯片自己说了算的是从整车倒推下来的。一辆电动车的热管理预算有限域控制器通常分到几十瓦。这几十瓦要分给 SoC、内存、电源、接口留给 NPU 的可能就十几瓦。十几瓦能跑多少算力这取决于能效比。当前先进工艺下INT8 的能效比大概在 2-5 TOPS/W。也就是说15W 的 NPU 大概能提供 30-75 TOPS 的峰值算力。注意这是峰值实际有效算力按前面说的 30% 利用率算只有 10-22 TOPS 的有效算力。这个数字够不够跑 BEV Occupancy坦白说很紧张。所以 ADS-NPU 的架构设计能效比是比峰值算力更重要的指标。堆 MAC 阵列谁都会难的是在给定功耗下把有效算力做上去。5.2 散热封装和工艺的约束功耗最终要变成热。车规芯片的结温上限通常是 125°C 或 150°C环境温度可能高达 85°C 甚至更高发动机舱附近。这意味着芯片的散热余量很小。散热约束反过来限制架构选择高频设计散热难所以 ADS-NPU 通常走大面积、低频率路线用更多并行单元换低频率。但大面积又带来成本问题而且大芯片的良率低。这是一个连环约束。我参与过一个项目最初架构定义时按 1.5GHz 频率做预算后来散热仿真发现结温超标被迫降到 1.0GHz算力直接砍掉三分之一整个性能预算重做。教训是架构定义阶段就要做热仿真不能等流片后才发现。5.3 车规可靠性AEC-Q100 与寿命要求车规芯片要过 AEC-Q100 认证工作温度范围、寿命、失效率都有严格要求。ADS-NPU 作为高复杂度芯片过认证的难度更大因为晶体管数量多任何一个薄弱环节都可能导致失效。可靠性设计包括老化补偿芯片用久了性能会漂移要有补偿机制、电压频率裕量不能工作在临界点、ESD 防护、闩锁防护等。这些都会占用面积和功耗预算。5.4 能效优化的架构手段在功耗约束下提升有效算力架构上有几个方向稀疏化支持神经网络剪枝后有很多零权重硬件如果能跳过零就能省算力和功耗。但稀疏化的硬件支持很复杂需要专门的索引和调度逻辑。低位宽量化INT8 比 FP16 省一半以上功耗INT4 更省。但低位宽对精度影响大需要量化感知训练配合。近存计算把计算单元放到内存旁边减少数据搬运功耗。数据搬运的功耗往往比计算本身还高。动态电压频率调节DVFS根据负载调整电压频率但 ADS 场景下 DVFS 会影响确定性要谨慎使用。这些手段各有代价架构师要根据目标场景选择组合。没有银弹。6. 软硬件协同设计中的现实困境6.1 算法迭代速度 vs 芯片开发周期这是行业最根本的矛盾之一。AI 算法半年一代芯片开发周期两到三年。芯片定义时瞄准的算法流片时可能已经过时了。应对这个矛盾架构上要留可编程性。纯硬化的加速器性能好但灵活性差纯可编程的处理器灵活但效率低。ADS-NPU 通常走中间路线核心算子硬化边缘算子可编程。但哪些硬化、哪些可编程这个划分本身就是赌博。我的经验是硬化那些数学上稳定、短期内不会变的算子比如标准卷积、矩阵乘可编程留给那些快速演化的部分比如各种注意力机制变体、新的激活函数。同时可编程部分的效率不能太低否则会成为瓶颈。6.2 编译器成熟度决定实际可用性前面提过编译器的重要性这里再展开。一个 NPU 的纸面算力再高如果编译器不能高效地把模型映射上去实际性能就是废的。评估编译器成熟度我通常看几个指标支持算子的覆盖率、算子融合的激进程度、内存分配的合理性、生成代码的质量、调试工具的完善度。最直接的办法是拿自己的模型去跑看实测性能和理论峰值的差距。提示选型时不要只看厂商的 benchmark那些都是精心调优过的。一定要拿自己的模型、自己的数据去实测而且要在目标硬件上测不能只看仿真结果。6.3 工具链碎片化与迁移成本不同 NPU 厂商的工具链互不兼容模型从一个平台迁移到另一个平台往往要重写大量代码。这导致车企被单一供应商绑定议价能力弱。行业在推一些中间表示标准比如 ONNX但实际落地效果有限因为各家 NPU 的专有优化太多标准表示无法覆盖。这个问题的解决需要整个生态的努力短期内难以根治。对架构师来说能做的是尽量把模型开发和硬件部署解耦用统一的训练框架部署时再转换。同时在架构里预留一定的通用性不要过度依赖某个专有特性。6.4 从原型到量产的工程化落差实验室里跑通的方案到量产还有巨大落差。量产要考虑一致性每颗芯片性能有差异、可测试性产线怎么测、可维护性出问题怎么诊断、供应链关键 IP 的供应稳定性。我见过太多实验室性能惊艳、量产一塌糊涂的案例。根源往往是原型阶段只关注峰值性能忽略了工程化约束。架构定义时就要把量产因素考虑进去比如预留测试接口、设计诊断寄存器、保证性能的一致性范围。7. 一些实操层面的经验与建议7.1 架构评估阶段必须问的问题如果你正在做 ADS-NPU 的选型或架构定义下面这些问题建议逐条确认目标模型的实际算子清单是什么NPU 对每个算子的支持效率如何有效算力利用率在目标模型上实测是多少不是峰值是实测。延迟的确定性如何抖动范围多大有没有静态调度支持功能安全等级是什么安全机制的开销有多大编译器成熟度如何支持算子覆盖率多少内存分配是否可预测功耗和散热预算是否经过仿真验证多传感器数据流的带宽和 QoS 如何保证量产的一致性、可测试性、可维护性如何这些问题问下来基本能筛掉一批纸面参数好看、实际不能用的方案。7.2 常见的认知误区误区一算力越大越好。前面反复说了有效算力才是关键。100 TOPS 用不起来不如 50 TOPS 用满。误区二功能安全就是加冗余。冗余只是手段之一更重要的是整个设计流程的安全文化从需求到验证的全链条。误区三软件可以弥补硬件缺陷。软件能优化但弥补不了架构级的缺陷。如果数据通路设计不合理软件再怎么调也救不回来。误区四先做硬件再想软件。软硬件必须协同设计硬件定义阶段软件团队就要介入否则做出来的硬件软件用不好。7.3 给不同角色的建议给架构师多和算法团队、软件团队泡在一起理解他们的真实需求不要闭门造车。架构决策的影响是长期的一个错误决策可能让后面几年都在填坑。给算法工程师了解硬件特性设计模型时考虑硬件友好性。同样的精度硬件友好的模型能快好几倍。给选型决策者不要被参数表迷惑一定要实测。多问几个为什么多要几个真实案例。给刚入行的朋友这个领域知识密度高但不要怕。从理解一个具体算子怎么在硬件上执行开始慢慢建立全局观。芯片架构没有那么神秘本质是在各种约束下做权衡。7.4 后续可以深入的方向这个话题往下还有很多可以展开的比如具体某类 NPU 架构脉动阵列、存内计算的细节对比比如量化技术对精度和性能的影响比如多核 NPU 的任务调度算法。每一个都值得单独写一篇。我自己在实际项目里踩过的坑很多都源于对某个环节理解不够深。比如曾经低估了 NoC 仲裁对延迟抖动的影响比如曾经以为编译器能自动搞定内存分配。这些教训让我明白ADS-NPU 的架构设计没有捷径每一个环节都要扎扎实实搞清楚。如果你也在做类似的事情欢迎交流。这个领域变化快但底层逻辑是相通的在约束下做权衡在权衡中找最优解。想清楚约束是什么权衡的代价是什么很多问题就迎刃而解了。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表