ARTICLE DETAIL

资讯详情

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

AI芯片软硬件协同设计:从NPU部署到SoC启动的实战笔记

AI芯片软硬件协同设计:从NPU部署到SoC启动的实战笔记 AI芯片的软硬件设计做到第四篇我终于想清楚一个道理真正难的不是把TOPS堆高而是让数据在合适的时间出现在合适的位置。这篇笔记不是课程讲义是我在RK3588、Jetson Orin Nano上做部署、调NPU、查SoC启动问题时攒下来的实操记录。适合正在做AI落地、想从应用层往底层看一眼的工程师也适合准备选型AI芯片的产品同学。1. 软硬件协同设计为什么AI芯片不能只看算力1.1 算力不是全部带宽和调度才是瓶颈“AI芯片”这个概念被讨论最多的参数是TOPS可真正做部署的人都知道TOPS只是纸面峰值。给你一颗标称8TOPS的NPU如果内存带宽只有25GB/s运行一个YOLO模型每层推理都要把特征图和权重从DDR搬进搬出数据搬运时间往往超过计算时间。我在RK3588上实测过理论6TOPS的NPU跑一个轻量分割模型实际能用到的算力不到35%原因不是算子不行而是DDR带宽反复被占用计算单元经常空等数据。所以软硬件协同设计的第一步永远是算清“每秒钟要搬多少数据”再决定把计算放在哪一级存储。这里有个很直观的类比算力就像厨房里的大师傅带宽就像传菜的小工。大师傅再快如果每炒一个菜都要亲自去仓库取食材整个厨房就废了。AI芯片设计时要做的最重要取舍就是在片上堆多少SRAM、跑到多大频率、连接多大的DDR位宽。SRAM越大越能留住中间结果但成本和面积都上去了DDR位宽越宽带宽越高但封装和布线也更难。软硬件设计的好坏实际上就是在这几个变量之间找平衡点。按我的经验拿到一颗AI芯片先别急着跑模型。把芯片的DDR带宽、SRAM总容量、内存吞吐参数、片间互联带宽拉一个表再拿你的模型算一下每层特征图尺寸和权重大小估算一下理论搬运量。如果理论搬运时间已经接近甚至超过推理时间那就别指望能跑满TOPS应该优先优化网络结构或改用更激进的量化方案。1.2 异构架构CPU、NPU、GPU、DSP各管一摊现代AI SoC普遍是异构计算常见组合是CPU加NPU加上GPU、DSP、ISP、视频编解码单元。CPU主控调度NPU做矩阵运算GPU做通用并行计算DSP处理音频或基带ISP负责图像信号。设计或者选型的时候最难的不是看懂每个子模块的算力而是决定“哪类计算放进哪个引擎”。我的做法是先把业务拆成数据流图。计算密集的算子比如卷积、矩阵乘、Transformer里的QKV投影尽量落到NPU分支逻辑复杂、访存不规则的任务留在CPU视频编解码交给专用硬件。这样分工的原因很实际NPU是“专用电路”它对规则的矩阵运算执行效率极高但遇到一个if-else或者动态shape就会大幅退化CPU相反什么都能跑但乘法效率低。如果把动态算子扔进NPU经常触发回调CPU性能直接掉一个数量级。另一个容易忽略的是存储层次。CPU访问DDR的路径和NPU访问DDR的路径往往不同共用同一片内存带宽。多核CPU跑业务、NPU跑推理、GPU跑渲染三者同时密集访问DDR时会产生“抢带宽”的问题。软硬件设计里叫内存调度策略实际工程中我会给不同引擎设置优先级比如NPU推理设为高优先级GPU渲染其次CPU后台任务最低保证关键时延不抖动。2. 硬件视角从SoC启动到芯片后端设计2.1 SoC启动流程一颗AI芯片是怎么醒过来的很多人把AI芯片当成一块会算数的黑盒子装上驱动就开始用但真正做软硬件设计时首先要面对的是SoC启动。AI芯片本质上仍然是一颗完整的SoC上电后要经历BootROM、ATF、U-Boot、Kernel、Driver、Runtime这一条完整链路。BootROM是芯片出厂固化的代码芯片上电后CPU从复位向量地址取第一条指令由BootROM完成最基础的时钟和DDR初始化然后去读取启动介质里的引导镜像。这里值得展开的是DDR初始化。BootROM通常只负责最小化初始化复杂的内存时序参数要靠ATF或U-Boot的一部分来设置。如果你在调试一块新板子最经典的故障就是DDR参数不对导致串口完全无输出或者输出一堆不可读字符。遇到这种情况第一反应不要是怀疑CPU坏了而是确认DDR颗粒型号、频率、时序参数和原理图是否匹配。很多问题就是DDR4和LPDDR4的配置寄存器写错或者不同走线长度下CL值没留余量。AI芯片的启动链路里还有一个容易被忽略的角色ATF。ARM Trusted Firmware负责安全启动、异常等级切换、电源状态管理。如果你的方案需要做签名启动ATF环节要提前参与设计否则后面想加签名就得整个引导链推翻重来。我见过不少项目功能开发都做完了客户突然要求启动镜像加签名校验结果BootROM和ATF已经没法改只能做二次校验绕了一大圈。这个点尽量在芯片选型阶段就确认清楚。2.2 以RK3588为参考理解实际启动链路RK3588是我平时用得比较多的一颗国产SoC4个Cortex-A76加4个Cortex-A55NPU算力6TOPS接口丰富。它的启动过程可以分为几个阶段BootROM先从复位向量执行根据boot引脚的电平状态决定从eMMC、SD卡、SPI NOR还是USB下载模式启动读入idbloader包含DDR初始化代码然后加载U-Boot SPLSPL负责建立早期内存环境再跳到ATF和U-Boot proper最后引导Linux内核。实际调试的时候我强烈建议先用SD卡启动。因为SD卡方便替换不像eMMC焊在板子上一旦引导分区写坏恢复手段少很可能要进maskrom模式用烧录工具重新擦写。用SD卡可以不断换idbloader和u-boot版本验证SD卡插拔就能回退。这个习惯帮我省了很多事有几次U-Boot改坏SD卡直接换回之前备份的镜像十分钟解决而同事修改板载eMMC后折腾了一下午。在RK3588上还有一个实用技巧U-Boot串口打印是排查启动问题的最重要信息源。默认情况下U-Boot会打印DDR初始化日志、设备树加载信息、引导介质信息。我会预先在串口工具里保存完整日志然后和正常启动日志逐行对比。启动卡在DDR训练、卡在USB驱动、卡在从mmc读取内核日志上的差异很明显。掌握了这种方法再奇怪的启动故障都能变成“找差异”的体力活。2.3 芯片后端设计为什么也影响软硬件热搜里经常出现“芯片后端”这个词很多做软件的同学可能不太清楚它是什么意思。芯片后端是物理设计阶段的工作简单说就是把逻辑网表变成可以流片的版图。这部分包括布局布线、时钟树综合、时序收敛、电源网络设计和IR-drop分析。AI芯片因为NPU面积大、大规模阵列翻转时电流变化非常剧烈后端设计里的电源完整性非常关键。如果IR-drop问题没处理好NPU高负荷工作时核心电压会被拉低导致逻辑单元翻转变慢最终表现为偶发性的计算错误。这类错误在软件层很难查因为不是每次都错而是频率高、温度高、电流大的时候错。我在做板卡级压测时就遇到过一次单模块测试没问题整机同时跑NPU和GPU时推理结果出现1%左右的错误率。后来用示波器量核心电源纹波发现NPU启动瞬间电压跌落超过80mV已经低于芯片规格书要求。这属于典型的软硬件联调问题靠改软件是治不了的需要从电源设计或降频入手。对于做应用层开发的工程师了解后端设计不是要去画版图而是明白一个道理AI芯片的可用算力受供电和散热约束。厂家标称的峰值TOPS往往需要在特定电压和温度窗口下才能达到实际产品设计必须留出降额。选型时不要只看算力墙上的TOPS还要看芯片的热设计功耗TDP、电源纹波要求和散热方案否则设计出来的产品轻则降频重则计算错误。3. 软件栈与工具链编译器、算子优化、运行时3.1 AI编译器到底在编译什么AI芯片的软件栈核心是AI编译器。很多人第一次接触RKNN、TensorRT的时候以为这只是普通的格式转换工具实际上它承担的是编译器的职责。PyTorch或ONNX模型表达的是一个计算图里面的节点是Conv、MatMul、Add、Reshape这些算子NPU本身不认识这种通用计算图它只认识自己定义的专用指令。AI编译器要做的就是把这个高层计算图一步步映射成NPU能执行的底层程序。这个过程大致分三步前端解析、图优化、代码生成。前端把模型读进来并转换成内部IR这一步要注意模型里是否存在不支持的自定义算子图优化阶段会做算子融合、常量折叠、死代码消除目的是减少执行开销代码生成阶段则把优化后的图切分成适合NPU并行执行的子图规划每块数据的存放位置最终生成二进制执行程序。实际使用中经常出现同一个模型用不同工具链转换后性能差异巨大的现象。原因往往不在前端解析而在图优化阶段。工具链能否识别一个多算子组合并融合直接影响最终执行效率。以RKNN为例它对MobileNet这类结构里的ConvBNReLU融合做得很到位但遇到比较新的Attention算子可能只支持单算子映射性能就下来了。因此做模型部署时我会特意看工具链release notes了解它最近优化了哪些算子组合再决定网络结构调整方向。3.2 算子融合与内存排布的实际意义算子融合是最重要也最立竿见影的优化手段之一。拿ConvBNReLU来说三个算子如果分开执行每一步都要从DDR读出输入、写入输出。BN和ReLU都属于逐元素算子计算量不大但数据搬运量很大分开执行会让DDR带宽白白浪费。融合成一个算子后卷积的输出留在片上寄存器或SRAM中马上完成BN和ReLU再写回DDR数据搬运次数直接减少三分之二。另一个关键点是数据的内存排布layout。常见的图像张量排布有NCHW和NHWC两种不同的NPU对layout有不同偏好。规则是如果NPU的硬件通路设计成按行做向量处理NHWC能直接按通道连续访问如果设计成按通道做矩阵运算NCHW更自然。工具链通常会在前端做layout转换但转换本身也是算子会消耗时间。我在RK3588上就遇到过模型输入已经是NHWC工具链仍然转换成NCHW又转回去的笨拙情况最后靠手动指定输入layout才解决。关于内存对齐这里也有一个经验NPU的buffer地址通常要求64字节或者128字节对齐尺寸没有对齐时会填充空白数据导致带宽浪费。一个小模型可能看不出差别但大模型的Embedding层如果对齐不当可能浪费几十MB的存储和搬运。设计推理引擎时我会对每个tensor做内存池对齐规划而不是简单malloc性能稳定性会明显提升。3.3 驱动与Runtime的协作关系在NPU执行模型软件层级通常是这样的应用调用Runtime APIRuntime解析执行计划把命令写到与驱动的共享内存队列然后触发一个软中断或硬件中断通知驱动驱动把命令转成NPU硬件可执行格式提交到硬件命令队列并维护状态NPU执行完毕后发送中断驱动更新完成标志Runtime再返回给应用。这里面任何一个环节丢数据都会导致推理卡死或错误。我调试时遇到过最诡异的一个问题是同一份RKNN模型每次推理前几十次都是好的后面随机出现返回码错。排查了很久最后发现是命令队列深度设置太小驱动在连续提交多个任务时来不及处理导致一个同步信号被覆盖。这是个典型的软件配置问题不在代码逻辑上而在队列深度、缓冲大小这类参数上。不同工具链版本对这类参数的默认值不同升级工具链后最好重新验证压力场景。这里也建议大家多利用厂商提供的测试模式。比如RKNN有loopback和性能分析模式TensorRT有layerwise信息和dump功能。不要等出了问题才开而是在项目初期就建立性能基线。开着profiling跑一遍模型把每层耗时、耗时占比、算力利用率记录下来。这样后续不管是工具链升级还是硬件批次更换都有一个参照物排查问题会快很多。4. 实际部署案例在Jetson Orin Nano和RK3588上的实践4.1 平台选型为什么在两个平台之间反复横跳最近做边缘AI项目我在Jetson Orin Nano 8GB和RK3588之间反复比较。Orin Nano标称最高40TOPSINT4稀疏支持TensorRT和齐全的CUDA生态但整体价格高、供货周期长RK3588的NPU算力6TOPS纸面数据低很多但胜在价格、国产供应链稳定外设接口丰富无风扇被动散热也能跑。说实话如果只看TOPSOrin Nano碾压RK3588但真实项目里还要看总成本、功耗、供货和散热需要实际部署测试才能拍板。我的测试方法是保持同一个模型和同一份校准数据分别在两端做INT8量化测三组数据单帧推理延迟、连续运行半小时后的平均功耗、Max温度下的性能衰减。测完之后很意外RK3588上某些轻量级模型的表现并没有想象中差原因是它NPU与CPU的数据通路较短小模型搬运开销低而Orin Nano在较大模型上优势明显毕竟CUDA核多、带宽大。选型时不能只看一个benchmark要把你的核心业务模型、典型batch size和功耗预算一起列出来对比。两款平台的开发流程差异也很大。Orin上用的还是CUDA生态那一套基于TensorRT的engine序列化、量化校准、多流推理资料丰富RK3588则依赖RKNN-Toolkit2从ONNX到rknn转换再到板上rknn runtime推理。如果你团队熟悉CUDA选Orin上手快如果需求是成本敏感的边缘盒子RK3588成熟度高社区资料多部署国产化要求也容易满足。4.2 模型部署与量化注意事项量化是边缘部署里最危险的一环。Orin Nano支持INT8和INT4RK3588的RKNN也支持INT8和INT16量化策略不外乎PTQ和QAT。PTQ即训练后量化需要一个校准数据集来统计每层激活值的范围。校准集的选择极其重要覆盖真实场景的数据分布才能让量化尺度合理。我踩过一个很典型的坑RK3588上用开源ImageNet校准集做了一个检测模型直接部署到产线上的缺陷检测场景精度掉了2%换成现场采集的200张真实缺陷图重新校准就恢复到1%以内。所以校准集不是随便找一批图片就行必须贴近实际使用环境。还需要注意量化感知训练的入口。如果PTQ精度损失接受不了就要在训练阶段插入伪量化节点做QAT。QAT能保留更多精度但需要重新训练模型会增加时间成本。模型结构上某些算子对量化很敏感比如高精度的Softmax、LayerNorm部署时可以保留为浮点。RKNN支持混合精度量化我会把敏感算子保留INT16或FP16避免整网量化为INT8后精度崩掉。Orin上也可以对特定层关闭量化TensorRT支持每层精度覆盖只是配置方法不太一样。部署中还有一个实际细节要充分考虑输入输出的预处理放在CPU还是NPU。常见的图像缩放、颜色转换、归一化如果在CPU做会额外增加延迟。RKNN和TensorRT都支持把部分预处理融合进模型或硬件解码通道。我一般会优先把缩放和归一化融入模型输入层减少host和device间的数据拷贝。实测下来整体延迟能下降10%到20%这个收益在低功耗设备上非常可观。4.3 性能分析与优化顺序如果NPU利用率上不去最忌讳一上来就怀疑芯片或者堆算力。我按这个顺序排查第一看内存带宽是否成为瓶颈第二查计算图里有没有NPU不支持的算子掉到CPU第三检查量化精度和per-channel配置第四确认驱动和工具链版本匹配最后才考虑散热降频。前面几步的排查工具都现成Orin上用Nsight Systems看kernel时间线和CPU/GPU/NPU负载RK3588上用RKNN的profiling接口打印每层耗时和带宽占比。一个很常见的情况某些模型在转rknn时部分算子工具链没有NPU实现自动落到CPU执行。CPU算力相比NPU差很多导致整体延迟被拉高。有一次我把一个YOLOv5s模型跑在RK3588上发现Detection Head里几个动态shape算子全部落在CPUNPU利用率只有40%总延迟反而比直接上CPU慢。后来换成固定shape输出、改造后处理部分才真正发挥了NPU性能。这个经验说明模型结构要跟着芯片的算子支持列表走而不是把模型当成不可修改的输入。另外要监控温度。NPU长时间高负载运行后芯片温度上升DVFS会主动降频性能曲线会出现明显的“先高后低”。如果产品需求是长时间连续推理需要按峰值频率的80%来评估稳定算力。用压力脚本跑至少30分钟观察推理耗时有没有逐步上漂。上漂的话先改善散热再考虑降低频率或提高任务分批度。很多时候“芯片性能不够”其实是散热设计不够。5. 多AI协作与AI Agent的芯片新需求5.1 AI Agent给芯片设计带来的新压力最近“AI Agent”和“多AI协作”这些词很火本质上代表工作负载从单模型推理变成多模型组合推理。一个智能体应用里面可能同时要维护意图识别模型、工具调用模型、对话生成模型、记忆检索模型。单看每个模型都不大但并发调度会带来全新的芯片设计需求上下文切换、中间结果缓存、任务优先级管理都要重新考虑。过去的推理框架大多只针对单个模型优化现在必须面对多个模型轮流占用NPU的问题。这种场景下NPU的任务切换开销会被放大。每次切换不仅要保存和恢复上下文还要把前一个模型的中间特征从片上清出或者保留。如果芯片支持多个硬件上下文并发比如RK3588的NPU支持同时运行多个上下文就能有效减少切换损耗。但多上下文又带来资源分配问题每个上下文占用多少执行单元、多少内存带宽需要在运行时动态规划。软硬件协同设计在这里体现得很明显硬件提供并发能力软件要决定怎么分资源。从系统层面看AI Agent还有一个特点推理请求是发散式、碎片化的时延要求却很高。这对芯片的模型加载速度提出要求。模型权重如果很大每次对话都要从DDR甚至Flash加载会产生明显延迟。现在有些方案会把高频模型常驻SRAM低优先级模型放DDR靠内存分层来满足时延。设计推理引擎时这个层级划分要提前规划。5.2 多AI协作场景下的硬件资源分配多模型并发时最稀缺的资源往往不是算力而是内存带宽。假设一个对话模型推理时平均占用25GB/s的DDR带宽另一个检测模型要占15GB/s两个同时跑在40GB/s带宽的平台上必然互相争抢。这时候无论算力多强都会出现排队等待。工程上我会按优先级分流把交互链路上最关键的任务设为高优先级占用独立计算核心和高带宽通道把后台批量任务调度到空闲时间片或者降低batch size和精度。还有一种思路是物理上把任务分担到不同芯片。比如用一颗RK3588做对话主控另一颗做视觉检测中间通过PCIe或以太网通信。多AI协作在硬件形态上往往就是多芯片协同。设计时要注意片间通信延迟不能把频繁交换的数据放到网络链路上否则整个系统时延就毁了。我的一般原则是高频小数据走共享内存或消息队列大数据走DMA或专用通道模型权重尽量本地化降低跨芯片依赖。在软件框架层面多模型并发还需要一个统一的资源管理器。它负责统计每个模型占用的算力、带宽、内存并根据实时负载做动态调度。开源方案里有些Runtime已经提供类似功能但没有统一标准。做实际项目时我倾向于在推理层之上加一个简单任务队列把每个模型封装成worker带独立的优先级和时间片。这样做的好处是即使底层芯片不支持硬件多上下文也能在软件上实现基本的并发保护。6. 芯片测试与软硬件联调6.1 芯片测试的层次从晶圆到板卡说到“芯片测试”很多软件工程师第一反应是跑个benchmark但在真正的芯片生命周期里测试是分层的。芯片出厂前要做晶圆测试CP测试检查每颗die的基本功能和参数封装后要做成品测试FT测试验证引脚连通和功能到了应用端就是板卡级和系统级测试。AI芯片因为集成了大量计算单元更需要系统级压力测试用真实模型长时间跑看输出正确性和性能稳定性。我在板卡测试中有一个习惯先跑一遍厂商自带的demo程序确认链路是通的再用自己的模型。demo除了验证功能更重要的是建立一个标准环境。测试时同步记录核心电压、DDR频率、NPU频率和温度。如果压力测试中推理结果偶发错误首先看温度再看电压和电流的波动。很多时候不是逻辑错误而是电源纹波或者时钟抖动导致的偶发错误。这种问题恰好在软硬件接口上需要电子工程师和软件工程师一起定位。另外芯片测试还要关注多芯片一致性。同一块板子有两颗芯片或者多个批次芯片混合使用性能可能有细微差异。为了量产稳定我会在产线端做一个性能阈值检测跑一套固定模型记录推理耗时误差范围超出阈值就判为异常。这个方法能在早期发现供电、散热或时钟配置不均的问题避免坏板流向客户。6.2 快速定位软硬件问题的方法软硬件联调最有效的办法就是分层隔离。我通常把问题分成四层启动层、驱动层、工具链层、应用层。启动层看BootROM、U-Boot、内核日志排查DDR和引导介质驱动层看设备树和驱动加载日志确认NPU时钟、中断、IOMMU都正常工具链层用厂商示例模型验证编译和运行应用层再看自己模型的算子支持和数据通路。每层都有对应的checklist逐层排除后剩下的才是真正需要深入研究的问题。一个频繁出现的现象是换了内核版本后NPU设备节点还在但驱动加载失败。这大概率是设备树里NPU的电源或时钟依赖变了或者驱动内核版本API不兼容。要查看dmesg看具体报错是资源获取失败还是probe spin。还有一次是IOMMU没有开启导致NPU访问内存权限不足推理时直接页错误。这类问题排查时除了日志还要确认芯片勘误表里是否有已知问题很多厂商勘误表会列出特定型号的软件规避方法这个是普通文档里没有的。排查工具方面JTAG和逻辑分析仪是硬件工程师的武器软件工程师也不要完全回避。遇到非常隐蔽的问题比如启动时序异常、中断丢失简单的逻辑分析仪抓一下signal就能看出端倪。当然条件不足时先用软件手段尽量缩小范围再请硬件同事帮忙抓信号。我在多个项目里的经验是软硬件联调中最差的策略是“乱猜”最好的策略是“记录一切现场数据”包括时间戳、寄存器值、电压值后期才能复现和对比。7. 常见问题与避坑指南7.1 启动卡在U-Boot串口无输出怎么办先别慌按顺序查量一下各路电源的电压是否在规格范围内确认时钟信号有没有起振再用示波器看DDR DQ上的信号活动是否正常。如果这些都没问题换一个已知好的启动介质排除介质本身被写坏的可能。特别提醒eMMC的boot分区如果被写坏现象是“芯片能识别但启动不了”普通擦写工具可能都看不到分区要进maskrom模式或使用专用烧录器恢复。这一步在试产阶段最容易踩所以功能开发阶段尽量用SD卡启动。串口无输出还有一个常见原因串口参数配置错误。RK3588默认调试串口通常是UART2波特率1500000很多新手拿着115200的配置去看自然全是乱码或空白。先确认硬件原理图上调试串口接的是哪个UART再对照官方默认配置。不要一上来就怀疑芯片坏了。7.2 NPU利用率上不去先做profiling看每层实际耗时再看DDR带宽占用。最常见原因有三个一是模型里有动态shape触发NPU频繁重新编译或CPU回退二是layout转换太多数据在NPU和CPU之间反复拷贝三是小算子过多NPU并行度没跑满。对应的手段分别是固定shape、手动指定layout、用工具链做算子融合或者调整网络结构。别盲目换更大的芯片先把自己的模型和工具链“配合好”。另一个容易被忽视的点是并发场景下的利用率。单模型推理利用率可能有80%两个模型同时推就会互相干扰总利用率反而下降。如果业务有并发需求需要去查NPU的上下文切换开销以及驱动是否支持多流。硬件不支持的场景只能靠软件串行化或者调整任务优先级。7.3 驱动版本与内核不匹配RKNN工具链和RK3588内核驱动有版本对应关系Jetson的L4T版本也和CUDA/TensorRT绑定。升级内核或更换L4T镜像后NPU驱动没同步升级就会出现设备节点存在但无法加载或者推理失败。解决方案很机械对照厂商发布说明确认内核、驱动、工具链三个版本是否在同一个兼容矩阵里。这一点建议写进项目CMake配置或CI脚本里防止团队成员各自升级后集体踩坑。设备树层面也要注意。NPU的电源域和时钟节点往往和设备树绑定换了开发板或者改了dts一定要重新检查这些节点。之前有同事把RK3588开发板的dts直接用到自研主板NPU电源树配置不对导致驱动probe成功但推理时死机。最后查出来是少了两个电源域依赖这种问题一旦出现排查成本非常高。最后再说一个非常实用的习惯每个项目建一个软硬件兼容性矩阵文档记录芯片型号、内核版本、驱动版本、工具链版本、demo结果和已知问题。这个矩阵会伴随整个产品生命周期每次变更先查矩阵再动手。我在几个项目里靠这个文档避开了很多重复的坑也方便团队协作时快速对齐环境。自己做这个系列时最大的感触是AI芯片的软硬件设计没有一个固定的“标准答案”更多的是一种在数据流、算力、带宽、工具链、散热之间不断权衡的过程。每次把上层模型的性能问题追到底层寄存器或者驱动参数都会对整颗芯片的理解深一层。这篇第四篇主要记录了我近期在启动、部署、测试上的实操下一篇我打算专门聊聊NPU微架构和算子映射的具体细节。如果大家正在做类似的事情希望这些记录能帮你们少走一些弯路也欢迎在评论区聊聊你们在实际项目中遇到的怪问题。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表