ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

GPU集成AI核心:从Tensor Core到端侧推理的架构演进与工程实践

GPU集成AI核心:从Tensor Core到端侧推理的架构演进与工程实践 半夜我又在折腾一个端侧大模型的推理延迟问题。GPU占用率看着到了90%以上可生成速度就是上不去功耗和发热倒是很诚实地飙了起来。正当我在性能和能效之间来回拉扯的时候看到高通给GPU加入专用AI核心的消息——这个动作与其说是一条产品新闻不如说是一条技术路线宣言GPU里如果只堆通用算力已经跑不动AI推理的效率要求了必须像英伟达的Tensor Core、苹果的Neural Engine那样把专门的AI加速单元放进数据最密集的计算路径里。标题里那句“向苹果英伟达看齐”本质上就是在说这件事。这篇文章我不想只停留在新闻复述。我会从硬件架构演进的逻辑、三条主流AI加速路线的取舍、软件栈适配现状以及运维和推理优化工程师真正需要关注的观测手段这几个角度把这个“GPU加AI核心”的事件拆开聊透。无论你是在本地用llama.cpp跑模型还是在云上租GPU做微调和推理这篇文章都值得看完。1. 一条蛰伏很久的技术主线AI加速能力从“板卡级”走向“内核级”很多人看到“GPU装AI核心”的第一反应是GPU本来不就是跑AI的吗再加个专用核心有什么意义这是我反复被问到的问题也是理解这件事最大的认知门槛。1.1 通用计算单元跑矩阵乘法的浪费率高到远超想象GPU的通用着色器和CUDA核心确实能执行AI推理所需的矩阵乘法但代价极大。矩阵乘法本质上是一长串乘加运算理想情况下硬件应该把大量数据一口气塞给计算阵列以最少的指令开销完成。可通用核心的设计目标是兼容各种图形和计算负载控制逻辑复杂取指、解码、调度、寄存器堆占用大量面积和功耗。我举个直观的例子。你在GPU上跑一个FP16精度的矩阵乘如果用通用SIMD单元每做一次乘加要么靠编译器努力做指令级并行要么靠库函数优化循环展开但再怎么优化通用核心依旧要花大量周期在搬运数据到寄存器、维护循环计数、处理分支上。而Tensor Core这类专用单元一条指令可以直接完成4x4矩阵的乘加数据排布好之后几乎不用额外控制能耗比完全不在一个量级。这也是为什么英伟达从Volta架构开始就把Tensor Core集成进SM内部而不是作为独立芯片放在GPU旁边。数据从显存到计算单元的搬运每多一次跨越延迟和功耗就翻一截。AI加速要发挥真正价值必须尽可能贴近数据通路的核心位置。1.2 通用计算单元跑AI推理面积、功耗、延迟的三重浪费如果只看峰值算力很多GPU的FP16算力已经非常可观。但峰值算力和实际推理吞吐之间隔着三道鸿沟。第一是面积鸿沟。通用核心需要大量晶体管做调度和无序执行真正干乘加活的晶体管比例反而不高。第二是功耗鸿沟。移动平台尤其是这样电池和散热就那么点余量用通用核心硬算大模型很容易把功耗拉满性能却很平庸。第三是延迟鸿沟。推理任务往往对单token延迟敏感通用核心的调度延迟会让每次矩阵计算都慢半拍。高通这次的动作本质上就是在自己的GPU内部增加一条专门为AI矩阵运算设计的快速通道。这种设计思路其实不新鲜PC和数据中心市场已经被英伟达验证过了之前迟迟没落实到移动和高通产品线上倒不是技术做不到更多是生态和需求还没到位。1.3 端侧大模型让“片上推理”重新成为焦点为什么偏偏是现在做这件事因为端侧大模型推理开始有真实需求了。几B参数的量化模型跑在手机、PC、边缘设备上用户对功耗和发热极其敏感。用通用GPU核心去跑大模型推理性能差强人意但功耗和延迟都不符合产品级体验要求。端侧内存带宽本来就紧LPDDR5/5X的带宽也就几十GB/s到一百多GB/s远不及数据中心HBM动辄几TB/s的水平。要在这种带宽约束下把实时交互做出来必须把每个字节的利用率都榨干。专用的AI核心配合低精度量化INT8/INT4再加上硬件级的稀疏化支持是唯一现实可行的路线。高通的调整正是为了在硬件层把这条路铺好。当AI推理任务到来时不必再占用庞大的通用着色器阵列而是交给专用核心去处理功耗和速度都能受益。2. 苹果和英伟达各自的路数到底有什么值得对齐的要说清楚高通这次“看齐”的对象得先厘清两家公司的技术路线本质上是不同的。标题把苹果和英伟达并列但两者解决AI加速问题的方式差别很大。2.1 英伟达用Tensor Core证明了一件事AI核心必须和显存、缓存长在一起英伟达的思路可以概括为“融合派”。Tensor Core直接内嵌在GPU的SMStreaming Multiprocessor内部和普通CUDA核心共享寄存器文件、共享内存和L1缓存通过CUDA统一编程模型暴露给开发者。这个设计的最大优势是数据通路极短。AI计算所需要的权重和激活值已经在GPU自己的显存和缓存体系里Tensor Core直接读取即可不需要跨总线搬运。另一个优势是对开发者极度友好你用PyTorch写代码CUDA和cuDNN会自动把算子在数据流里找合适的硬件执行。Tensor Core在很长一段时间里几乎是透明的写代码的人甚至不知道它在工作但推理和训练速度确实比纯CUDA核心时代快了好几倍。价格劣势也很明显融合进GPU的AI核心必须继承CUDA生态的软件栈封闭、绑定紧想脱离英伟达的软件体系非常难。这也是很多人调侃“用Tensor Core不是用硬件是用CUDA不可替代性”的原因。2.2 苹果Neural Engine给异构计算立了一个相反的样本苹果的路线是“独立派”。Neural Engine是一颗相对独立的NPU和GPU、CPU并列放在SoC内通过统一内存架构共享内存。每个核心用16个神经网络加速引擎组成张量处理阵列专门执行矩阵乘法和卷积运算。这种路线的优点在于功耗控制极度优秀。因为NPU不需要继承GPU那套庞大的调度和图形管线纯粹为张量运算优化能效比极高。在M系列芯片上跑stable diffusion和端侧大模型NPU都是被优先调用的那个单元。缺点也明显如果某个算子NPU原生不支持数据就要在NPU、GPU、CPU之间穿行性能损失极大。Core ML的算子覆盖率直接决定了实际AI性能的上限。苹果靠封闭生态强行把这个协同做到可用但这种模式很难被安卓和Windows生态复制。2.3 放在一起看三条路线没有谁绝对正确只有适配场景不同我给这三条路线做了一个直观对比方便你理解高通这次的定位。对比维度英伟达Tensor Core苹果Neural Engine高通GPU内AI核心趋势物理位置内嵌于GPU SM内部独立于GPU的NPU集成在GPU体系内部或紧邻编程方式CUDA统一生态Core ML / Metal Performance Shaders预计走OpenCL/Vulkan扩展自家SDK数据通路和GPU共享显存、缓存通过统一内存与CPU/GPU交互与GPU共享内存可承接绘图管线后的推理核心特长训练和推理双能干生态完整低功耗端侧推理与系统集成移动端能效比优先意图吃下端侧大模型主要瓶颈生态绑定深封闭算子覆盖有限系统封闭软件生态和技术工具链尚待补齐高通这次的方向更靠近英伟达的技术形态但目标场景又是苹果式的低功耗端侧AI。换句话说它想走的是“英伟达式的融合路线苹果式的能效目标”这条路的挑战不在硬件设计而在软件栈能不能接得住。3. 新硬件落地之后最先受影响的是我们跑模型的日常每次芯片架构调整网友最高兴的环节是看跑分但真正决定这些硬件有没有用的是技术工具链能不能跟上。落到日常使用场景最直观的冲击点在本地推理框架和开发框架的适配进度上。3.1 llamacpp这类推理框架会如何适配专用AI核心先明确一个基本事实llama.cpp这类框架之所以能在各种设备上跑大模型靠的不是暴力算力而是对底层硬件指令的精准利用。它在英伟达GPU上是CUDA核心在苹果设备上是Metal和ANE在英特尔上是oneAPI在AMD上是ROCm/HIP。如果高通GPU的AI核心要发挥价值llama.cpp就必须为其新增一条后端路径把GGML的量化矩阵乘算子映射到AI加速器的指令上。这是个不轻松的工作需要芯片厂商公开底层算子库和驱动接口。高通为此准备了很久自家SDK一直面向Adreno和Hexagon优化所以我对落地进度持相对乐观态度。对普通用户的直接好处是同样的7B量化模型以前在集成GPU上跑可能又慢又烫以后如果能正确调度到专用AI核心速度预计会有明显提升同时整机功耗还能降下来。不过这有个前提——工具链优先级够高驱动默认开启适配模型格式覆盖足够全。有一个环节掉链子体验就会打折扣。3.2 PyTorch/Ollama的现状能识别但未必用得上不少人在Windows上装PyTorch跑nvidia-smi看GPU利用率发现显卡在工作就以为万事大吉。其实这里藏着一个很深的误区能用GPU跑和用对了GPU里的硬件单元是两回事。Ollama在Windows上“未使用GPU”这个经典问题很多人都遇到过。最典型的原因是Ollama默认找不到CUDA运行库或者Windows图形驱动版本太老导致推理回退到了CPU。有经验的做法是把ollama的日志打开看它到底加载的是哪个计算后端是cuda还是cuda_v11还是cpu版本不匹配就要手动装驱动。在高通的新架构上这个问题会更明显。因为专用AI核心不会像普通GPU那样被常见的框架默认识别很可能需要新驱动、新算子库甚至新的API才能触发。框架能识别硬件品牌和能利用硬件特性之间还有很长一段距离。3.3 驱动的角色没有“翻译官”核心再强也是摆设在Linux上折腾过NVIDIA驱动的人都知道nouveau和官方驱动性能差距能到几倍原因就在于底层指令翻译和电源管理策略不同。专用AI核心这类加速单元对驱动层的依赖只会更深。正常驱动栈要处理的不只是把指令翻译成硬件动作还包括内存分配、缓存一致性、电源状态切换等一大堆事情。如果驱动对AI核心的支持不成熟即便PyTorch识别到了设备实际推理时也会绕回通用核心或者直接报错。这也是我为什么一直建议身边做端侧推理的朋友别急着追新硬件先把驱动和运行时版本钉死在工作版本上。新驱动未必是更好的驱动但一定更可能出现问题。我踩过的坑里相当一部分来自“什么都升到最新”的操作。4. 从运维和优化视角教你判断AI核心到底干没干活GPU驱动开发、GPU服务器的日常运维都要干一件事弄清楚计算任务到底把压力卸到了哪个硬件单元上。GPU加了AI核心之后这个问题变得更关键了。你用着GPU的显存占了功耗看着正常但只要AI核心利用率是0那这块新硬件就和没有一样。4.1 这些数据比GPU占用率更能反映真实情况GPU利用率这个指标骗过很多人。Windows任务管理器显示GPU 100%你以为是满负荷工作实际上可能是某个图形渲染管线在吃资源而计算单元大量闲置。推理任务也一样通道利用率和工作负载的真实情况必须通过更细粒度的计数器去看。真正能说明问题的是这几类数据张量核心/矩阵计算单元的利用率如果特殊单元支持独立监控的话这个指标能直接告诉你AI加速器是否参与工作功耗和频率的分布模式。负载跑到专用AI核心上时GPU整体功耗曲线和跑通用计算时的形状往往不一样指令队列或者总线吞吐。矩阵单元忙碌时数据搬运的模式会更加规整指令流水线延迟也会不同内存带宽消耗。AI推理是带宽密集型任务专用核心参与后通常能看到更稳定的带宽占用坦白讲AI核心的利用率监控在桌面级工具里都还做得不算成熟。移动端GPU更不透明很多时候要靠经验和侧面数据推断。但方向是明确的别只看占用率去看核心内部单元的活动情况。4.2 一个典型的“GPU跑满但没加速”的排查过程我先讲一个我在实际部署中遇到过的情况。某个模型在NVIDIA GPU上用vLLM跑离线推理GPU利用率显示96%但每秒生成的token数只有预期的一半。显卡确实在干活功耗也高可生成任务迟迟不见提速。排查思路是这样的先确认推理进程是否真的在用GPU执行核心运算而不是靠CPU搬运数据。nvidia-smi里进程列表、CPU占用率加上内核态时间占比都能辅助判断。再做一次后端对比测试。同一个模型分别跑CUDA版本和CPU版本如果GPU版本只快了一倍出头说明GPU并没有发挥出应有算力。最后锁定问题出在算子调度上模型里部分算子没有走CUDA优化内核而是回落到了通用实现。改用vLLM的图模式重新编译后吞吐立刻上了一个台阶。这类问题在专用AI核心出现后只会更多因为软件栈的适配粒度被切得更细。你若只盯着GPU总利用率就会漏掉真正的瓶颈在哪个单元。4.3 好用且免费的性能观测手段说到具体工具我平时最常组合使用这些大家碰到类似场景可以照搬nvidia-smi加dmon参数做周期快照观察GPU利用率之外的核心温度、功耗和显存读写NVIDIA Nsight Compute做算子级别的Kernel分析看清每一步到底使用的是什么计算单元rocprof和rocm-smiAMD平台上一套能对上号perf等Linux性能计数器结合IPC每周期指令数分析IPC过低通常意味着访存或同步等待限制了计算单元Windows上开PIX或者旧版NVIDIA Control Panel里隐藏的调试指标当成辅助观测有人说GPU服务器运维就是看盘和重启这话只对了一半。深层的问题如果不会用工具去拆你就永远只能停留在表面的“跑满了”“没跑满”上离问题的真实位置还很远。5. 站在模型部署和算力运营角度这类架构会带来什么连锁反应如果说前几节讲的是开发者视角和运维视角那这节我们看远一步GPU内部出现专用AI核心后对算力租用、显存规划和集群调度会带来什么变化。5.1 显存焦虑会不会真的被缓解先回答一个热搜里最受关注的问题GPU显存容量到底是测算推理还是训练用的答案是推理和训练都要优先看显存但原因不同。训练时显存装的是梯度、优化器状态和中间激活值量非常大推理时显存主要装模型权重加KV Cache计算量相对小但KV Cache长度会随并发快速膨胀。专用AI核心的加入不会直接减少模型占用的显存字节数但它能改变计算的效率结构。以INT4/INT8量化推理为例专用矩阵单元处理低精度数据的能力更强同样的显存带宽下能算出更多的token。换个说法显存仍然是容量瓶颈但因为单位算力效率上去了很多以前需要在更大显存卡上跑的模型现在性能可能够用了。“GPU实例化到底减少的是什么”这个问题也在这个背景下变得更有意思。实例化减少的其实是每个请求的中间计算冗余通过图优化、并行调度、算子融合把重复分配和等待的环节压掉。专用AI核心配合得好的话实例化之后的理论时延可以做到更低。5.2 多卡调度和“GPU虚拟内存”概念将会演进多卡调度现在的主流做法是数据并行也就是每张卡存一份完整的模型各自跑一批数据然后同步梯度。显存不够时再用张量并行或流水线并行把模型切块放多卡上。专用AI核心普及后单卡推理能力进一步增强很多场景也许不再需要盲目堆卡数而是用更少的卡做更多并发成本优势很明显。热点词里提到的“GPU虚拟内存”也是一个关键变量。现代GPU驱动会把部分显存数据换出到系统内存缓解显存爆掉的问题。以前这个机制一触发性能常断崖式下跌因为通用核心要从内存搬数据回来再算。但专用AI核心配合更精细的数据流调度至少可以把换入换出的冲击控制得更平稳。从运维角度看这要求你在分配容器资源时不仅看显存大小还得考虑算力类型。一张卡上的AI核心数量、驱动版本、算子库版本都会成为调度器需要感知的属性。服务器运维工作不再是单纯的“插卡开环境”而是要维护一张软硬件能力的矩阵。5.3 给工程师的三条现实建议第一别只看纸面算力。硬件有了新单元不等于你的模型能用到。任何新硬件落地到生产环境都需要软件栈成熟判断的指标是官方算子库覆盖率和社区工具链的适配记录而不是发布会上的理论数字。第二把监控粒度做细。传统的GPU利用率监控在新架构下不会完全失效但不够用。尽早把性能计数器手段用起来弄清楚你环境里的关键算子到底跑在哪个硬件单元上。第三保持生态敏感度但别追新。如果框架和驱动还停留在“只支持识别、不支持利用”的阶段新核心对你就是摆设。稳妥的做法是先跑通现有工作负载再做小规模验证性测试确认收益可观后再全量切换。6. 在“GPUAI核心”这个趋势里我最想提醒你的一件事聊了这么多架构背景和工程细节我想用自己的一次实际经历收个尾。之前我在调优一个端侧模型的推理性能时试过调整各种线程数、批处理大小和量化参数始终卡在延迟不达标的瓶颈上。后来才发现问题根本不在软件调优参数而在硬件单元根本没有被调度到正确的后端。我换了工具链的推理路径之后照样那些参数延迟直接掉了近一半。这个经历给我的最大教训是新硬件带来的性能红利从来不是装上驱动启动系统就能自动到手的它需要你理解数据是怎么流动的计算指令是怎么被调度的然后在工具链里做出准确的选择。高通给GPU装AI核心这件事就算发布时宣传再漂亮消费者和工程师最终真正拿到的好处还是取决于生态打磨得够不够久。我能做的就是把我验证过、踩过坑的经验写出来帮你少走弯路。硬件往哪里走的趋势大家都能看见但能不能让硬件为你所用终究要靠实操和判断力。
返回列表