ARTICLE DETAIL

资讯详情

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

云边端协同算力体系:从训练到推理的架构设计与部署实践

云边端协同算力体系:从训练到推理的架构设计与部署实践 做了几年AI算力相关的基础设施工作我越来越确定一件事这个行业的算力焦虑正在从“能不能把模型训出来”转向“一堆模型部署出去之后到底怎么喂饱它们”。AI算力、训练、推理、云边端协同这几个词前两年聊起来还像概念框架现在已经是每个做落地的人每天都要面对的现实问题。端脑科技做的云边端协同算力体系本质就是回答一个问题当算力需求从集中的模型训练扩散到广泛的推理服务时基础设施该怎么搭才能算得过来、跑得动、还花得少。这篇文章我会从算力结构变化的原因讲起拆解云边端协同架构的设计逻辑再落到推理引擎选型、量化格式、硬件适配这些具体技术点上最后给一份可以直接参考的部署实操记录和问题排查实录。不管你是在公司里负责AI平台还是自己折腾大模型本地部署又或者是刚入门想搞清楚推理和训练到底差在哪这篇内容应该都能给你一些实际用得上的东西。1. 算力需求的结构性变化从“训练为王”到“推理爆发”1.1 训练和推理的算力消耗逻辑完全不同很多人觉得训练算力和推理算力都是“跑模型”不过是前一次多跑一会儿、后一次少跑一会儿。这个理解会直接导致架构设计上的偏差。训练的本质是把知识写进参数它的特点是批量大、单次时间长、数据吞吐要求高而且要反复迭代。一次大模型的预训练可能要在上千张GPU上跑几十天中间还要频繁做checkpoint、梯度同步、学习率调度。推理的本质是把参数变成服务它面对的是完全不同的约束。推理请求是用户随时发起的来了就要尽快响应延迟高了用户立刻能感知到请求量有高峰有低谷可能是白天上班时段的办公场景密集也可能是晚上内容消费场景的流量高峰。而且推理任务通常是一次性的、短时间的计算你不可能把几千张卡同时压在一个聊天请求上。用个生活化的类比训练像建一座图书馆把书一本一本写出来、摆好推理像图书馆每天的借阅服务读者什么时候来、借什么书、门口排多长的队都是不确定的。建图书馆要考虑的是藏书总量做借阅服务要考虑的是排队时间和柜台够不够用。所以当行业还在为训练集群的规模较劲时真正在做落地的人已经开始为推理服务的资源碎片化和流量波动头疼了。这也是端脑科技这类平台型算力服务商把重心转向云边端协同的原因——你没法用一套集中式训练集群的思路去服务千千万万个分散的推理请求必须让算力靠近任务发生的地方。1.2 推理负载的三个特征长尾、实时、碎片化我观察到的推理负载和训练负载最明显的区别有三个。第一个是长尾。训练任务通常是少数几个大任务跑几十天不中断推理任务是海量小任务每个任务可能只消耗几百毫秒的GPU时间。这就导致一个结果训练调度只需要管几十个任务推理调度可能要管几百万个任务。任务规模差了好几个数量级。第二个是实时。训练可以等推理不能等。用户发出一条消息你让人家等十秒才回复这个产品基本就废了。实时性要求推理算力必须分布在离用户足够近的地方而集中式云端无论网络再快物理距离都摆在那里。第三个是碎片化。推理请求的类型极其分散有几十毫秒的文本分类有几十秒的图片生成有持续几分钟的长对话还有端侧设备上毫秒级的检测任务。不同类型任务的算力需求完全不同有的吃算力不吃带宽有的吃带宽不吃算力有的两个都吃。碎片化负载如果全部丢到集中式云端资源的浪费率会高得离谱。这三个特征叠加在一起就是“算力约束下提升大模型能力的资源配置建模”这个方向要解决的核心问题在总算力有限的前提下怎么把算力按照任务特征切成合适的形状让每一份算力都花在刀刃上。单纯堆GPU已经解决不了这个问题了必须从架构层面做调度。1.3 为什么推理算力正在迎来爆发推理算力的增长速度超过训练这不是偶然而是产品化进程的必然结果。大模型的能力被训练出来之后需要被千行百业使用才能产生价值。每一个使用场景都是一个推理请求而使用场景的数量远远超过训练场景的数量。一个行业可能只需要训一个基座模型但会有几十上百个业务部门在调用推理接口。模型是资产推理是服务资产的复制成本已经付过了剩下的全是服务成本。另一个推动因素是端侧模型和小模型的普及。像YOLOv8这类视觉模型、LoRA微调的小模型、7B到27B参数规模的开源模型越来越多人把它们部署到自己的设备或者私有环境里。单卡推理、本地推理这些需求逐渐成为常态。比如有人在一张RTX 3090上跑27B的量化模型显存24GB勉强装得下但推理速度就要看量化精度和推理引擎的优化程度了。这类场景和集中式训练集群完全是两个世界。我自己做基础设施的一个体感是训练算力的规划可以按年做因为训练任务的时间跨度很长推理算力的规划必须按周甚至按天做因为业务流量说变就变。如果一个算力体系是围绕“怎么把训练集群做大”来设计的它应对推理爆发的能力一定会变形。这也是云边端协同在当下显得特别重要的根本原因。2. 云边端协同算力体系的架构思路2.1 云、边、端三层各自该承担什么角色端脑科技的云边端协同算力体系从架构上看是标准的三层结构但每一层的定位需要根据真实场景来定义。云端是中枢负责三件事大规模训练任务、复杂的模型迭代、全局资源调度。云端算力强适合处理需要大量计算的任务比如模型预训练、大规模微调、数据清洗、复杂推理任务中的“重计算”部分。云端同时也是模型的“母港”所有模型版本在这里统一管理、分发到边缘和端侧。边缘层是中间地带覆盖的是“比云端更近、比端侧更强”的算力。它的典型任务是汇聚某个区域内多个端侧设备的数据和请求做第一级推理处理或者对模型进行区域性微调后提供低延迟服务。边缘节点的价值在于两点一是减少数据回传的带宽压力二是降低终端到算力之间的网络延迟。比如一个厂区部署了上百个摄像头做质检如果每帧画面都传到云端处理带宽和延迟都会爆炸边缘节点吃下这个负载就非常合适。端侧是离用户最近的一层包括手机、车载设备、智能摄像头、机器人这些终端硬件。端侧算力有限但它的优势是极致的低延迟和隐私保护。某些对延迟极其敏感的场景比如自动驾驶的感知模块决策必须在毫秒级完成不可能依赖网络往返必须端侧计算。隐私敏感的场景也是一样医疗影像、个人语音等数据不出设备是硬性要求。2.2 任务调度怎么决定一个请求该去哪一层三层架构搭起来了最核心的问题就是调度一个推理请求进来放到云端、边缘还是端侧判断依据总结下来就是三个维度延迟要求、计算密度、数据敏感性。延迟要求最高的任务比如实时交互、自动驾驶决策优先走端侧因为任何网络跳转都不可接受。延迟要求中等、计算量比较大的任务比如图像识别、长文本处理可以走边缘层边缘既能提供比端侧强得多的算力又能比云端快一个量级。延迟要求相对宽松的任务比如批量数据分析、离线内容生成直接走云端最合适功耗和成本控制最好。数据敏感性这个维度比较容易被忽略。很多业务场景里数据根本不应该离开本地合规要求不允许把用户数据传到云端。这种情况下哪怕云端算力再便宜也不能用必须在端侧或本地边缘处理。实际工程里调度不是简单给每个请求打个标签这样静态的而是要动态判断。同样一个模型推理任务在凌晨低峰期可以全部调度到云端用大batch把吞吐拉满白天高峰期就要把一部分请求分流到边缘减轻云端压力。这种动态调度策略核心是在延迟、成本和资源利用率之间做平衡。端脑科技这类做算力协同的平台真正有价值积累的地方就在于调度策略的精细程度。2.3 模型分发的版本管理和算力匹配云边端协同还有一个经常被低估的工程环节模型怎么从云端分发到边缘和端侧。一个模型在云端训练迭代之后会衍生出多个版本原始全精度版、量化版、剪枝版、蒸馏版。不同版本对应不同算力水平的设备。你得有一套机制确保边缘节点和端侧设备拿到的模型版本是匹配的、兼容的并且能按需远程更新。这里面最容易踩坑的是版本一致性。我见过不止一次云端更新了模型边缘节点还是旧版本两边推理结果不一致导致业务方开始找茬。要解决这个问题模型仓库的管理要严格每个分发出去的模型版本都要有明确的标识、生效时间、回滚方案。模型传输要做完整性校验不然边缘节点网络不稳定模型文件传了一半加载的时候直接崩溃你还得半夜起来排查。另一个容易被忽略的点是算力匹配。不是所有模型都能塞进所有设备。一个7B的量化模型能在手机上跑但如果你的目标设备是一颗算力很弱的MCU芯片那必须用专门的微型模型。云边端协同体系里模型链路和算力链路要一一对应什么样算力水平的设备跑什么样规模的模型要在设计阶段就明确下来而不是部署的时候才去试。3. 关键技术选型推理引擎、精度格式与硬件适配3.1 推理引擎的取舍从vLLM到轻量级引擎在云端和边缘层讨论推理服务绕不开推理引擎的选型。当前生态里vLLM是最主流的方案之一它通过PagedAttention优化显存管理用continuous batching把多个推理请求动态拼成一个batch大幅提升GPU利用率。如果你的场景是并发高、多用户、请求长短不一vLLM这类引擎几乎是最佳选择。但vLLM不是万能的。它比较重依赖CUDA生态对GPU型号有要求在一些边缘设备或者国产芯片上不一定跑得起来。这时候就需要nano-vLLM这类轻量级推理引擎来补位。nano-vLLM的思路是裁掉vLLM里那些在大规模集群上才需要的功能只保留核心的请求调度、KV Cache管理、推理执行逻辑让引擎能在有限的算力资源上跑起来。在做模型部署选型时我的经验是不要默认所有场景都上完整版vLLM先在目标硬件上测一下如果标准vLLM跑不了或者跑不顺就用轻量替代方案效果往往比硬适配要好。推理引擎的优化水平差距体现在同样算力下能跑多少并发、首token延迟有多低。这是直接决定用户体验和硬件成本的关键。举一个简单例子同一个7B模型用没有批处理优化的引擎单张卡只能同时服务两三个请求一有并发就排队换用vLLM之后动态批处理可以同时服务十几个请求显存利用率翻好几倍。算力没变服务能力大变这就是引擎优化的价值。3.2 FP32、FP16、INT8精度格式选型不是拍脑袋算力需求讨论里FP64、FP32、FP16、INT8这些精度格式是绕不开的。很多人只知道“FP16比FP32快INT8比FP16更快”但不知道它们对应的算力消耗比例和适用场景。FP64主要用于科学计算深度学习基本用不上单卡算力低但精度极高。FP32是CPU和很多传统计算任务的默认格式通用性强但用在深度学习训练和推理上有点过于奢侈。FP16是当前大模型训练的主流格式直接用FP32在GPU上训练显存会爆炸速度也受不了FP16在保持足够精度的前提下把显存占用砍了一半计算速度还快。INT8则是推理阶段的性价比之王。大量推理场景对精度的容忍度比训练高得多量化到INT8之后显存占用进一步减半计算吞吐大幅提升对用户感知的影响通常很小。我做部署的时候绝大多数情况下会直接测试INT8方案只有在量化后精度明显掉点或者业务方对输出质量极其敏感的时候才退回FP16。以下是我常用的精度格式选型参考表精度格式相对计算开销显存占用主要使用场景典型算力需求FP64极高最大科学计算、数值模拟专用HPC卡训练中基本不用FP32高大通用计算、部分传统模型CPU推理、兼容性兜底FP16中中大模型训练、高质量推理A100/H100训练集群主力INT8低小高并发推理、端侧边缘部署消费级GPU、边缘推理卡实践里还有一个细节量化不是把模型里的数字直接砍一刀那么简单。不同量化方法的效果差异非常大。简单的PTQ训练后量化速度快但精度损失相对大AWQ和GPTQ这类方法会通过权重分析和校准集来减少量化误差损失就更小。如果业务对精度要求苛刻可以考虑量化感知训练在训练阶段就模拟量化误差让模型自己去适应低精度表示。这个方法成本高但效果最好。3.3 单卡推理和边缘设备算力天花板与适配策略推理算力需求爆发之后大量场景其实是“单卡推理”和“端侧推理”而不是大规模集群。单卡推理最典型的场景就是个人开发者或中小企业用消费级GPU跑开源大模型。比如RTX 309024GB显存跑27B参数的量化模型是可行的但速度不会太快。这类场景的优化方向很明确模型量化精度、推理引擎选型、KV Cache大小。换个引擎可能比换块更贵的显卡提升还大这是个很划算的优化路径。边缘侧设备就更讲究了。像大疆这类有算力开发需求的硬件厂商他们的设备可能用的是嵌入式GPU或者专用NPU。在这种算力天花板很低的环境里要跑哪怕是很小的模型都需要做很多适配工作。算子要优化、裁剪到只保留设备支持的集合数据格式要和NPU对齐内存布局要按硬件要求调整。这些工作非常琐碎但恰恰是云边端协同体系落地时最花时间的部分。个人建议在做边缘设备适配前先列一个硬件能力清单可用的内存大小、支持的数据格式、算子的支持范围、可用的推理加速库。对照这个清单选模型和引擎能省掉大量“部署到一半发现硬件不支持”的返工时间。4. 实操记录把一个模型从云端部署到边端4.1 模型准备与格式转换流程我以一个实际项目为例一个智慧园区场景云端训练好的视觉检测模型要部署到端侧摄像头和边缘计算盒子上。这个流程基本覆盖了云边端协同项目的常见步骤。第一步是训练与导出。模型在有GPU的云端训练完成我这里用YOLOv8系列的检测模型举例。训练结束之后不能直接把PyTorch的权重文件拿去部署不同推理引擎对模型格式有各自的要求。先要导出为通用的中间格式再针对目标推理引擎做转换。比如要部署到NVIDIA的TensorRT就要先把PyTorch权重转成ONNX然后用TensorRT的转换工具转成engine文件。转换过程有非常多的细节坑。ONNX导出时有些算子可能是动态shape如果推理引擎不支持转换就会失败有些算子在目标平台上没有对应实现需要手动替换。我强烈建议每次转换完都做一次完整的精度对拍拿一批测试数据分别跑原始模型和转换后的模型对比输出的差异。不对比就直接上线很可能出现边缘端和云端检测结果对不上的尴尬局面。然后是根据部署位置选择模型变体云端用FP16版本保证最大精度边缘盒子用INT8量化版端侧摄像头用更小的蒸馏版本或剪枝版本。这步在模型训练阶段就要提前规划不要说训了一个大模型然后指望它能压缩到摄像头里面还能跑得动。4.2 云端推理服务的搭建与压测云端推理服务我的习惯是部署成标准容器方式模型引擎跑在GPU容器里外面通过HTTP接口暴露前面加负载均衡。用一个基础配置看操作逻辑# 云端推理服务基础配置示例 docker run -d \ --gpus all \ --shm-size8g \ -v /models:/models \ -p 8000:8000 \ vllm/vllm \ --model /models/yolov8-fp16 \ --max-num-seqs 64 \ --gpu-memory-utilization 0.9 \ --max-model-len 8192这里几个参数的逻辑我要特别说明。gpu-memory-utilization 0.9意思是允许引擎最多占用90%的显存做缓存留出10%给驱动和加载模型等其他开销不要写1.0否则很容易OOM。max-num-seqs 64控制并发请求的批处理上限数值不是越大越好显存不够时会排队或者溢出要根据实际压测结果来调。部署完不能直接给业务方用必须要做压测。压测关注三个指标吞吐量每秒处理多少请求、首token延迟用户发出请求到第一个字返回的时间、端到端延迟完整请求的响应时间。我会用一个简单脚本做并发测试从1并发开始逐步加观察延迟和吞吐的变化拐点。压测最大的价值是让你知道当前这套配置的服务上限在哪避免上线第二天被流量打爆。4.3 边缘节点部署与监控边缘节点通常是几台带GPU的计算盒子分布在不同区域算力比云端小但又比端侧摄像头强很多。部署边缘节点时网络和环境一致性是小规模测试不出来的问题。边缘节点一般没有条件像云端那样搞复杂的集群管理所以我建议尽量做成轻量自治的方式docker容器装推理服务配合一套轻量日志收集具备远程更新模型的能力即可。边缘节点之间的网络可能不太稳定模型更新时要采用“先下临时文件、校验后再切换”的方式防止更新过程中服务断掉。监控边缘节点和监控云端完全不一样不能只盯GPU利用率还要盯设备温度、功耗、网络连接质量。边缘盒子经常是部署在机房角落或者工业现场的环境条件比较恶劣死机、断网是常态。没有良好的远程监控和自动重启机制运维人员会把大量时间花在跑现场上了。4.4 端侧场景的极致优化端侧摄像头是算力最弱的一层要让模型在上面稳定跑必须做几个层面的优化。硬件层面优先启用设备自带的NPU或者专用推理单元。很多嵌入式设备的CPU跑模型又慢又热但NPU跑同样的模型可能快十倍以上。这部分优化经常要读设备SDK文档算子支持有限需要反复试。缓存层面要仔细控制模型的加载和卸载时机。端侧设备内存小模型常驻内存会挤压其他业务的空间。我一般建议端侧模型用进程常驻但模型懒加载的方式配合请求频率动态决定是否从闪存重新加载。极致的场景下框架本身也值得裁剪。比如在嵌入式Linux上部署视觉检测模型如果业务只需要检测框坐标就可以把后处理中的画框逻辑全部去掉省掉这部分CPU占用。又比如多路视频流同时推理的场景可以复用预处理结果避免每路视频重复做图像缩放和归一化。这些优化单独看起来都很小但端侧算力天花板摆在那里积少成多效果非常明显。实测下来同样的模型在优化前后推理帧率可以从不到10帧提升到25帧以上。5. 踩坑实录与问题排查5.1 推理延迟高先从调度看再查引擎推理延迟高是最高频的问题。很多人一上来就怀疑模型太大、显存不够其实延迟高最常见的根源是调度层面的问题。首先是批处理策略。如果推理引擎的批处理参数设置得太保守并发请求只能排队延迟自然高。检查max-num-seqs这类参数适当调大让更多的请求在同一个批次里并行计算。其次是冷启动。模型推理服务刚启动或者长时间空闲后首次请求需要加载模型、初始化CUDA上下文延迟会惊人地高。业务上要做keepalive机制让服务保持活跃状态或者提前预热。再次要排查网络链路。我自己排过一个问题推理服务本身只要200毫秒但用户测出来是2秒一查发现请求经过了多层代理还有DNS解析慢的问题。链路里的每一个跳转都会增加延迟很多时候问题不在模型而在网络路径。用跟踪工具全链路看一遍比盯着GPU利用率更有用。5.2 GPU显存OOM控制并发更要想清楚模型长度OOM是最容易判断但也最容易反复踩的问题。解决思路不是单纯减少并发而是控制KV Cache的峰值消耗。KV Cache是Transformer模型推理时的关键显存开销它跟并发请求数量和每个请求的序列长度强相关。两个并发长对话比二十个并发短请求更耗显存。很多OOM问题表面看是并发太高实际是某个长序列请求把显存顶爆了。推理引擎一般都有max-model-len参数这是模型允许的最大输入输出长度。这个值设得越大KV Cache能容纳的请求越少。我的经验是先按业务的实际需求设一个合理上限比如大多数对话场景8192就够用不要盲目追求长文本。设成32K意味着显存里最多只能缓存几个请求并发能力断崖式下降。如果做完这些还是OOM除了加显存之外可以考虑换更激进的量化方案或者把模型重计算全部关掉、能省多少显存是多少。5.3 量化后模型精度掉点校准集是关键INT8量化后模型精度下降不一定是量化本身的问题很多时候是量化过程的校准数据选得不对。量化过程需要一组校准数据来统计每层激活值的分布范围校准数据的选择直接影响量化参数的质量。如果你拿了一堆和业务场景不相关的图片去做校准量化后模型在真实业务数据上可能表现得非常差看起来就是“模型智力下降”。解决方法是回退到训练数据的代表性子集做校准或者直接用业务真实数据抽样。业务数据分布和训练数据分布通常有一些偏移用真实部署环境的数据做校准量化后的精度会好很多。另外一个方法是用AWQ这类更聪明的量化算法。它会对模型中贡献大的权重做更高精度的保留跑起来比简单PTQ更稳。项目对精度敏感优先选算法更好的方案不要为了省时间贪简便方法。5.4 模型版本和算子兼容性从根上建立规范边缘端和端侧出现推理结果异常除了模型本身的问题最常见的还有两个一个是模型版本不一致一个是算子兼容性差异。版本不一致的问题前面提到过必须靠模型仓库的管理规范来根治。每次分发模型都要带上版本号或者hash边缘节点加载时校验异常就报错而不是静默运行。算子兼容性更隐蔽。同一套模型代码在云端GPU上跑得正常放到边缘端NPU上可能某个算子实现有差异输出结果微小的不一致累积起来就导致最终结果偏差。排查这类问题很痛苦我的经验是在部署前用一批固定测试数据把模型在云端和边缘端的结果做逐层对比快速定位是哪个算子产生了偏差。这个过程看起来耗时但能省掉未来上线后无穷无尽的排查沟通成本。6. 写到最后一个部署老兵的几条实在话如果让我总结做云边端协同算力体系这类项目最深的一点体会那就是不要把它当成一个纯技术架构问题它本质上是一个成本工程。训练算力你咬牙上一批卡就能解决推理算力是每天都得面对的成本算多了浪费算少了投诉算力平台的价值就在于把这个平衡做到极致。从实际操作经验来看有几个人人都会踩的坑值得提前提醒。第一个坑是过度设计。很多团队一开始就追求完整的云边端三层架构把所有功能都规划完毕结果做了半年发现业务量根本撑不起来全是资源浪费。我的建议是从最小可行闭环开始先只做云端推理跑通一个业务验证推理引擎和压测方法再根据延迟和成本的实际瓶颈决定是否需要引入边缘层。边缘层只有在“云端的延迟或带宽成本不可接受”时才值得加。第二个坑是低估模型优化的重要性。同样是跑27B模型一个充分量化和引擎调优的方案可能比裸跑快三倍还省一半显存。很多团队的问题是只顾着买算力不愿意花时间做模型侧的优化最后的成本差距会非常惊人。第三个坑是忽视模型生命周期管理。训练、部署、量化、分发、迭代、回滚是一个完整闭环。模型不是训完就结束而是持续迭代的。如果没有一套流程支撑这个闭环每一次模型更新都会变成一次稳定性赌博。第四个坑是把端侧想得太简单。端侧设备种类多、算力参差不齐、环境恶劣适配工作量和踩坑密度远超预期。如果你要覆盖多种端侧设备请做好长期投入的心理准备并且最好在项目一开始就让端侧团队参与模型选型不要让云端的同事替端侧做决定。云边端协同不是一个能用一套标准答案套用的架构它的核心价值在于让每一份任务都能找到最划算的算力落点。可能你的业务用不到三层两层就够了也可能你的场景需要四层在容器编排之上还要加一层函数级别的计算节点。架构是活的判断的唯一标准是延迟是否达标、成本是否可控、系统是否稳定。把这三点想清楚方向就不会跑偏。最后分享一个小技巧无论你的体系未来做到多复杂一定要在最开始就建立全链路可观测性。云端、边缘、端侧每一层的请求都要能追踪到日志和监控指标。云边端协同最怕的就是链路太长、出问题不知道在哪一层可观测性做得好排查效率和系统稳定性都会上一个台阶。这是我做过这么多部署项目之后最笃定的一条经验。
返回列表