☰
华为鲲鹏+昇腾双引擎:智慧交通算力底座架构与实操优化
2026/10/2 15:20:34 网站建设 项目流程

1. 智慧交通的算力底座到底在解决什么问题

第一次看到“携手广西高速,华为用鲲鹏+昇腾双引擎定义智慧交通新速度”这个标题,我脑子里冒出来的第一个念头不是技术有多炫,而是——高速公路到底遇到了什么非解决不可的麻烦,才需要把通用计算和AI加速这两套东西同时搬上路?

我在交通信息化这个圈子里摸爬滚打有些年头了,见过太多“智慧高速”的项目从立项到验收的全过程。说实话,大部分项目卡住的地方根本不是算法不够先进,而是底层算力撑不住真实业务场景的并发压力。你想想,一条几百公里的高速公路,每隔几公里就有摄像头、毫米波雷达、ETC门架、气象传感器,这些设备每秒钟产生的数据量是惊人的。以前的做法是把数据传回省中心统一处理,但传输延迟加上中心机房的计算排队,等结果出来的时候,事故可能已经发生好几分钟了。

广西高速的情况更特殊一些。广西的地形大家都知道,山多、桥隧比例高、雨季长、团雾频发,这些因素叠加在一起,对交通事件的实时感知和响应提出了非常苛刻的要求。华为这次做的事情,本质上是在高速公路的边缘侧和区域中心同时部署鲲鹏通用算力加昇腾AI算力,让数据处理从“事后分析”变成“事中干预”。

鲲鹏在这里的角色是“大管家”,负责数据接入、协议解析、业务逻辑调度、存储管理这些通用计算任务。昇腾则是“专业选手”,专门跑视觉识别、事件检测、轨迹预测这些AI推理任务。两者配合的逻辑很简单:鲲鹏把各路传感器数据清洗、对齐、打包好,喂给昇腾做推理,推理结果再回到鲲鹏这边做业务决策和指令下发。这个分工不是随便定的,后面我会详细拆解为什么通用计算和AI加速必须分开。

这套方案适合谁来参考?如果你是做智慧交通项目规划的技术负责人,或者正在评估边缘计算方案的架构师,又或者是对国产化算力平台落地感兴趣的技术管理者,这篇文章里的思路和踩坑经验应该对你有用。如果你只是好奇高速公路上的摄像头到底是怎么工作的,也能看懂个大概。

2. 为什么是鲲鹏加昇腾而不是别的组合

2.1 通用算力和AI算力为什么要拆开

很多人会问一个问题:既然昇腾也能做一部分通用计算,为什么还要单独配鲲鹏?直接用一套硬件跑所有任务不行吗?

这个问题我在实际项目里被问过不下十次。答案其实不复杂,但需要从芯片架构的层面去理解。通用CPU的设计目标是“什么都能干”,它的指令集灵活、分支预测复杂、缓存层级多,适合处理逻辑判断、数据库操作、网络协议栈这些任务。AI加速器(比如昇腾)的设计目标是“矩阵运算要快”,它的核心是大量的乘加单元,适合做卷积、矩阵乘法这类高度并行的计算。

你让昇腾去跑一个复杂的SQL查询或者处理TCP协议栈,它不是不能做,而是效率极低,就像让一个数学教授去前台接电话——不是干不了,是浪费。反过来,你让鲲鹏去跑ResNet的推理,它也能跑,但功耗和延迟会很难看。

在广西高速这个场景里,业务负载的构成大概是这样的:视频流接入和解码占30%,AI推理占40%,业务逻辑和数据库操作占20%,网络转发和协议处理占10%。这四类任务对硬件的需求完全不同,所以鲲鹏加昇腾的组合本质上是一种“让合适的硬件做合适的事”的架构选择。

注意:在实际部署中,鲲鹏和昇腾之间的数据通路带宽是很容易被忽略的瓶颈。如果PCIe通道数不够或者数据搬运没有做零拷贝优化,AI推理的延迟会莫名其妙地高。这个坑我后面会详细说。

2.2 国产化算力平台在交通行业的现实考量

抛开技术层面,还有一个很现实的因素:交通行业的关键基础设施对供应链安全有明确要求。高速公路的监控系统、收费系统、调度系统都属于关键信息基础设施,底层算力平台的自主可控不是可选项而是必选项。

鲲鹏和昇腾都是华为自研的芯片架构,从指令集到工具链都是自己的东西。这意味着什么?意味着不会因为外部环境变化导致供货中断或者工具链被卡脖子。我在几个省级交通项目里见过因为算力平台供应链问题导致项目延期半年的案例,那种痛苦做项目的人应该都懂。

另外一点是工具链的成熟度。昇腾的CANN(Compute Architecture for Neural Networks)经过这几年的迭代,对主流深度学习框架的支持已经相当完善了。PyTorch和TensorFlow的模型迁移到昇腾上,大部分情况下只需要改几行代码就能跑起来。这个迁移成本在项目初期评估的时候一定要算进去,不然做到一半发现模型跑不通会很被动。

2.3 边缘侧和中心侧的算力分配逻辑

广西高速这个项目的架构不是把所有算力都堆在一个地方,而是做了分层部署。边缘侧(收费站、隧道口、重点路段)部署小规模的鲲鹏加昇腾一体机,负责实时性要求最高的任务,比如车辆检测、异常停车识别、行人闯入预警。这些任务的响应时间要求在200毫秒以内,必须本地处理。

区域中心部署大规模的算力集群,负责跨路段的轨迹追踪、交通流量预测、全局调度优化这些任务。这些任务对实时性要求没那么高,但对算力的总量要求大,放在中心侧做更经济。

这个分层逻辑的关键在于:什么任务放在边缘,什么任务放在中心,划分标准是什么?我的经验是看三个维度——延迟敏感度、数据量大小、任务之间的关联性。延迟敏感度高、单次数据量小、任务之间独立性强的放边缘;延迟要求宽松、需要全局数据、任务之间关联性强的放中心。

3. 核心细节解析与实操要点

3.1 视频接入与解码的算力账怎么算

高速公路视频监控的规模有多大?一条200公里的高速公路,按每2公里一对摄像头算,就是200路视频。每路视频按1080P、25帧、H.264编码算,码率大概4Mbps。200路就是800Mbps的持续数据流。

鲲鹏在这里要做的事情是:接收RTSP流、解码、抽帧、缩放、格式转换,然后把处理好的图像数据送给昇腾做推理。这一套流程下来,单路1080P视频的解码大概需要0.5到1个鲲鹏核心。200路视频就需要100到200个核心,这还没算上业务逻辑和数据库的开销。

所以边缘节点的鲲鹏配置不能太低。我的建议是单节点至少32核起步,如果视频路数超过50路,直接上64核。内存方面,每路视频的解码缓冲区大概需要50到100MB,200路就是10到20GB,加上系统和业务的内存开销,128GB是底线。

昇腾这边,推理的算力需求取决于模型的大小和复杂度。一个典型的车辆检测模型(比如YOLOv5s),在昇腾310上单帧推理大概需要10到15毫秒。如果每路视频每秒抽5帧做推理,200路就是每秒1000帧,需要10到15张昇腾310卡。这个账在项目规划阶段就要算清楚,不然到了部署阶段发现算力不够就很尴尬。

3.2 模型迁移到昇腾的实际操作步骤

把训练好的模型迁移到昇腾上跑推理,这个过程我走过好几遍,坑也踩了不少。标准流程大概是这样的:

第一步是模型转换。昇腾的工具链里有一个叫ATC(Ascend Tensor Compiler)的工具,可以把ONNX或者Caffe模型转成昇腾能跑的om格式。命令大概长这样:

atc --model=yolov5s.onnx \ --framework=5 \ --output=yolov5s_ascend \ --input_format=NCHW \ --input_shape="images:1,3,640,640" \ --log=error \ --soc_version=Ascend310

这个命令看起来简单,但里面的参数每一个都有讲究。--input_shape必须和模型实际输入完全一致,差一个维度都会转换失败。--soc_version要和你实际使用的昇腾型号匹配,310和910的指令集不一样,转错了跑不起来。

第二步是精度校验。模型转换完之后,一定要做精度对比。把同一批测试数据分别用原始模型和转换后的模型跑一遍,对比输出的差异。如果差异超过阈值(一般分类任务看Top-1准确率下降不超过1%,检测任务看mAP下降不超过2%),就要检查是不是某些算子不支持或者精度模式设置有问题。

第三步是性能调优。昇腾的推理性能可以通过调整batch size、使用多线程、开启DVPP硬件加速等手段来优化。DVPP是昇腾自带的图像预处理模块,做缩放、裁剪、格式转换比CPU快很多。如果你的模型输入需要做这些预处理,一定要用DVPP而不是OpenCV。

实操心得:ATC转换的时候,如果遇到不支持的算子,不要急着改模型结构。先查一下昇腾的算子支持列表,很多情况下是算子的属性配置不对,调整一下就能过。实在不支持的算子,可以用昇腾提供的自定义算子开发接口自己实现,但工作量不小,能避开就避开。

3.3 数据管道的零拷贝优化

前面提到鲲鹏和昇腾之间的数据搬运是容易被忽略的瓶颈。默认情况下,数据从鲲鹏的内存搬到昇腾的内存要经过一次拷贝,这个拷贝走的是PCIe总线,延迟大概在微秒级别。单次拷贝看起来不多,但如果每秒要搬运上千次,累积起来就很可观了。

优化的方法是使用昇腾提供的内存映射接口,让鲲鹏和昇腾共享同一块物理内存。这样数据只需要写一次,两边都能直接读,省掉了拷贝的开销。具体实现上,可以用aclrtMallocHost分配host侧的内存,然后用aclrtMapMem把这块内存映射到device侧。

这个优化做不做,对整体延迟的影响大概在20%到30%之间。在实时性要求高的场景里,这20%可能就是能不能及时预警的区别。

3.4 业务逻辑层的容错设计

交通场景对系统可靠性的要求极高,因为系统一挂,整条路的监控就瞎了。所以在业务逻辑层必须做容错设计。

我的做法是在鲲鹏侧跑一个轻量级的消息队列,所有从昇腾出来的推理结果先入队列,再由业务逻辑消费。这样做的好处是:如果业务逻辑处理慢了或者挂了,推理结果不会丢,重启之后还能继续处理。队列的持久化可以用本地SSD,不需要额外的数据库。

另一个容错点是推理服务的降级策略。如果昇腾的某张卡出故障了,系统应该能自动把任务调度到其他卡上,而不是整个节点挂掉。这个需要在鲲鹏侧做一个简单的健康检查和服务发现机制,实现起来不复杂,但关键时刻能救命。

4. 实操过程与核心环节实现

4.1 环境搭建与基础配置

假设我们现在要在广西高速的某个区域中心搭建一套鲲鹏加昇腾的推理环境,从裸机到跑通第一个模型,完整的步骤是这样的。

首先是操作系统安装。鲲鹏服务器推荐用openEuler或者麒麟V10,这两个对鲲鹏的优化最好。安装的时候注意选择ARM64架构的镜像,x86的镜像装不上。装完之后先更新系统补丁,然后安装鲲鹏的加速库和数学库,这些库对性能有直接影响。

# 更新系统 yum update -y # 安装鲲鹏加速库 yum install -y kunpeng-acc-lib # 安装昇腾驱动和固件 ./Ascend-hdk-310-npu-driver_*.run --full ./Ascend-hdk-310-npu-firmware_*.run --full # 重启使驱动生效 reboot

驱动装完之后,用npu-smi info命令检查昇腾卡是否被正确识别。如果能看到卡的型号、温度、功耗等信息,说明驱动装好了。

接下来是CANN工具包的安装。CANN是昇腾的软件开发套件,包含了ATC转换工具、推理运行时、算子库等。安装包大概几个GB,解压之后运行安装脚本就行。安装完成后需要配置环境变量,把CANN的库路径加到LD_LIBRARY_PATH里。

4.2 模型转换与推理服务部署

环境准备好之后,拿一个训练好的车辆检测模型来跑通全流程。假设我们有一个YOLOv5s的ONNX模型,输入是1x3x640x640。

先用ATC做模型转换,命令前面已经给过了。转换成功后会生成一个om文件,这个文件就是昇腾能直接加载的模型。

然后写一个简单的Python推理脚本,用pyACL接口加载模型并执行推理:

import acl import numpy as np # 初始化ACL acl.init() acl.rt.set_device(0) # 加载模型 model_path = "yolov5s_ascend.om" model_id, ret = acl.mdl.load_from_file(model_path) # 准备输入输出 input_data = np.random.randn(1, 3, 640, 640).astype(np.float32) # ... 省略内存分配和数据拷贝的代码 # 执行推理 ret = acl.mdl.execute(model_id, input_dataset, output_dataset) # 处理输出 # ... 省略后处理代码

这个脚本跑通之后,说明基础环境没问题了。接下来要做的就是把它包装成一个服务,支持多路视频的并发推理。

我的做法是用一个进程池,每个进程绑定一张昇腾卡,进程内部用多线程处理不同的视频流。线程之间通过队列传递数据,避免锁竞争。这个架构在200路视频的场景下实测可以跑到每秒800到1000帧的推理速度,满足实时性要求。

4.3 与现有交通管理平台的对接

算力平台搭好之后,最终要跟现有的交通管理平台对接。广西高速用的是什么样的平台我不清楚,但通用的对接方式无非几种:API接口、消息队列、数据库直连。

推荐用消息队列的方式,因为解耦最彻底。算力平台把推理结果(比如“K123+400处发现异常停车”)发到Kafka或者RabbitMQ,交通管理平台从队列里消费。两边不需要知道对方的存在,只要约定好消息格式就行。

消息格式的设计要注意几点:一是要包含时间戳和位置信息,方便平台做时空关联;二是要包含置信度,让平台可以根据置信度做不同的处理策略;三是要有唯一ID,方便追踪和去重。

注意:对接的时候一定要做压力测试。我见过一个项目,算力平台单跑没问题,一对接平台就崩,原因是平台的消息消费能力跟不上算力平台的生产速度。后来加了一个限流层才解决。

4.4 性能实测数据与调优记录

在某个类似规模的项目里,我记录了一些实测数据,可以供参考。

任务类型硬件配置单次耗时吞吐量
1080P视频解码鲲鹏920 2.6GHz8ms125路/核
YOLOv5s推理昇腾31012ms83帧/秒
ResNet50推理昇腾3106ms166帧/秒
数据搬运(无优化)PCIe 3.0 x161.2ms833次/秒
数据搬运(零拷贝)PCIe 3.0 x160.3ms3333次/秒

从这组数据可以看出几个关键点:视频解码是CPU密集型任务,鲲鹏的多核优势在这里体现得很明显;昇腾310的推理性能对于大多数交通场景的模型来说够用,但如果模型特别大(比如参数量超过100M),可能需要上昇腾910;零拷贝优化对数据搬运的提升是数量级的,这个优化一定要做。

调优的过程中还发现一个现象:当昇腾卡的利用率超过80%之后,推理延迟会急剧上升。这是因为卡的调度队列满了,新的任务要排队。所以实际部署的时候,卡的利用率控制在70%左右比较稳妥,留一些余量应对突发流量。

5. 常见问题与排查技巧实录

5.1 模型转换失败的各种原因

ATC转换失败是最常见的问题,报错信息往往很模糊。我整理了几种典型情况和对应的排查方法。

第一种是算子不支持。报错信息里会提到某个op的名字,比如“Resize”或者“NonMaxSuppression”。这时候先查昇腾的算子支持列表,确认这个算子是否在支持范围内。如果在支持范围内但还是报错,大概率是算子的属性配置不对,比如Resize的mode参数设成了昇腾不支持的取值。

第二种是输入shape不匹配。这个错误比较明显,报错信息会直接说维度对不上。检查一下ONNX模型的输入shape和ATC命令里指定的--input_shape是否一致。注意ONNX模型有时候会有动态维度(比如batch维度是-1),ATC需要指定具体的数值。

第三种是精度模式问题。昇腾支持fp16和fp32两种精度模式,默认是fp16。如果模型对精度敏感,转成fp16之后精度掉得厉害,可以在ATC命令里加--precision_mode=force_fp32强制用fp32。但fp32的性能会比fp16差不少,需要权衡。

5.2 推理结果异常的排查思路

模型转换成功、推理也能跑,但结果不对,这种情况最让人头疼。排查的思路是从后往前查。

先看后处理代码有没有问题。昇腾的输出格式可能和原始模型不一样,比如输出的维度顺序变了,或者某些输出被合并了。拿一个简单的输入(比如全零或者全一的图)跑一遍,看输出是否符合预期。

如果后处理没问题,再查输入数据。鲲鹏侧送给昇腾的数据格式、归一化参数、通道顺序都要和模型训练时一致。我遇到过一次问题是OpenCV读进来的图是BGR顺序,但模型训练用的是RGB,导致检测结果完全错乱。这种问题很隐蔽,因为推理本身不报错,只是结果不对。

最后查模型转换过程。用ATC转换的时候加--log=debug参数,看看转换过程中有没有警告信息。有时候某些算子会被替换成近似实现,导致精度损失。

5.3 性能不达标的调优方向

性能不达标的表现通常是推理延迟高或者吞吐量低。调优的方向有几个:

一是检查DVPP是否启用。如果图像预处理还在用CPU做,换成DVPP能省不少时间。DVPP是昇腾自带的硬件加速模块,做缩放和格式转换比CPU快5到10倍。

二是调整batch size。昇腾310对batch size比较敏感,batch size太小(比如1)的时候,算力利用率上不去。可以尝试把多路视频的帧拼成一个batch一起推理,但要注意延迟会增加。这个需要根据业务的实际延迟要求来权衡。

三是检查内存分配。如果每次推理都重新分配内存,开销会很大。正确的做法是预分配好输入输出的内存,推理的时候复用。这个优化做不做,对性能的影响大概在10%到20%。

四是看PCIe带宽是否成为瓶颈。如果数据搬运的时间比推理本身还长,说明PCIe带宽不够用了。可以考虑用昇腾的片内内存做数据缓存,减少搬运次数。

5.4 常见问题速查表

问题现象可能原因排查方法解决方案
ATC转换报算子不支持算子不在支持列表或属性配置错误查昇腾算子支持文档替换算子或自定义实现
推理结果完全错误输入格式或后处理不匹配用已知输入验证对齐训练时的预处理参数
推理延迟高DVPP未启用或batch size太小对比启用DVPP前后的耗时启用DVPP,调整batch size
吞吐量上不去内存分配开销大或PCIe瓶颈用profiling工具分析预分配内存,启用零拷贝
昇腾卡利用率低任务调度不合理查看npu-smi的利用率调整任务分配策略
系统运行一段时间后变慢内存泄漏或散热问题监控内存和温度修复泄漏,改善散热

6. 这套方案还能怎么扩展

鲲鹏加昇腾的这套架构,在广西高速的场景里跑通之后,其实可以复用到很多其他交通场景。比如城市道路的信号灯优化,逻辑是一样的:边缘侧做实时车辆检测,中心侧做区域协调优化。再比如机场的机坪车辆调度,也是类似的实时感知加全局优化的模式。

扩展的时候需要注意一点:不同场景对算力的需求差异很大。城市道路的摄像头密度比高速公路高得多,但单路视频的复杂度可能低一些(车速慢、场景简单)。机场的场景对可靠性要求更高,可能需要做双机热备。这些差异在方案设计阶段就要考虑进去,不能直接照搬。

另外,昇腾的模型生态还在不断完善中。现在主流的检测、分类、分割模型基本都能跑,但一些比较新的或者比较小众的模型可能还需要等工具链更新。选型的时候尽量用成熟的主流模型,避免踩坑。

我在实际项目里最大的体会是:算力平台只是基础,真正决定项目成败的是业务理解和工程细节。同样的硬件配置,不同的数据管道设计、不同的任务调度策略,最终的性能表现可能差一倍。所以不要指望买了好硬件就万事大吉,软件层面的优化才是拉开差距的地方。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询