vivo VCAP平台(vivo Compute Acceleration Platform)是vivo面向端侧AI提出的一套算法模型管理与硬件加速抽象方案。它的核心目标是解决一个长期困扰端侧AI开发者的问题:不同代际、不同厂商的SoC在AI算力单元上千差万别,有的依赖NPU,有的依赖DSP,有的只能靠GPU甚至CPU兜底,而算法团队希望自己的模型只写一次、只维护一套代码,就能在所有机型上获得接近硬件峰值的性能。为了达成这个目标,VCAP平台把整个端侧AI的运行链路抽象成了几层清晰的结构,从模型格式标准化、算子适配,到运行时调度和硬件能力封装,每一层都有明确的职责边界。

一、VCAP平台要解决的核心问题
端侧AI的碎片化问题比服务端严重得多。服务端做推理,硬件环境相对统一,而一款vivo手机可能在售的同时覆盖高通、联发科等多个芯片平台,每个平台的NPU架构、编译工具链、算子支持范围都不一样。如果算法团队直接对接某一家芯片厂商的SDK,就会出现几个典型的麻烦。
第一是接口割裂。高通的模型编译流程和联发科完全不同,同一个模型要分别适配两套工具链,转换脚本的维护成本会随着机型数量线性增长。第二是算子覆盖不一致。某些新算子在A平台有原生支持,在B平台只能靠拆分或CPU回退,性能差异可能达到一个数量级,导致同一版本的算法在不同机型上体验割裂。第三是模型管理混乱。模型文件如何随APK分发、如何做版本灰度、如何在线更新后保证与新固件兼容,这些工程问题如果没有统一框架支撑,每个业务都要重复造轮子。
VCAP平台正是针对这三类问题设计的:对上提供统一的模型部署与调用接口,对下通过硬件抽象层屏蔽芯片差异,中间用标准化的模型格式和统一的模型管理服务把整条链路串起来。
二、平台整体架构与分层设计
VCAP平台在纵向上可以划分为四个层次。最上层是算法接入层,各类业务算法(如人脸识别、图像分割、语音增强)通过统一的API接入,调用方式类似业界通用的推理框架:加载模型、绑定输入输出张量、发起推理、取回结果。这一层的设计原则是尽量薄,把业务和底层实现解耦。
第二层是模型管理层。它负责模型的注册、版本控制、下载更新和完整性校验。每个模型入库时会分配唯一的版本标识,并记录其依赖的算子集合和目标硬件列表。当线上发现某个模型在某批机型上存在精度问题时,可以按机型维度精准回滚。这种按机型灰度的能力在端侧尤为重要,因为硬件差异导致的模型问题往往只出现在特定芯片上,全局回滚的代价太大。
第三层是硬件抽象层(HAL),这是整个平台的技术核心。它定义了一组与具体硬件无关的接口,包括模型编译、内存分配、推理执行、异步回调等。每个目标硬件平台对应一个HAL实现,内部再调用芯片厂商的驱动和编译器。这样上层框架看到的始终是同一套接口,新增一个芯片平台只需要扩展一个新的HAL实现。
最底层是硬件执行层,包括NPU、DSP、GPU、CPU等实际算力单元。VCAP会根据模型的算子特征和当前系统负载,决定把整个模型或其中某个子图放到哪个硬件上执行,这就是后面要讲的异构调度能力。
三、硬件加速抽象层的实现细节
硬件抽象层的关键在于如何把不同厂商的编译和运行时差异封装掉。以NPU为例,各家芯片的模型编译流程虽然形态不同,但抽象之后都可以归纳为三个阶段:图解析、算子映射、指令生成。VCAP的HAL把这三个阶段定义为标准流水线,每个芯片的适配层只需要实现对应的钩子函数。
// 硬件抽象层的核心接口示意(简化版)
class IAccelerator {
public:
// 编译阶段:把标准图编译为硬件可执行的指令
virtual CompiledGraph compile(const ModelGraph& graph,
const CompileOptions& opts) = 0;
// 运行阶段:分配输入输出内存并执行推理
virtual int execute(const CompiledGraph& graph,
const TensorList& inputs,
TensorList& outputs) = 0;
// 能力查询:该硬件支持哪些算子、性能等级如何
virtual DeviceCapability queryCapability() = 0;
};
上面的接口展示了抽象的基本思路。compile负责把平台内部的标准模型图转换成硬件指令,这一步对上层完全透明;execute负责真正的推理执行,可以是同步也可以是异步;queryCapability则供调度器决策使用,调度器根据能力描述判断某个算子或子图应该放在哪个设备上跑。
算子适配是HAL实现中工作量最大的部分。VCAP维护了一个统一的算子注册表,每个算子定义了标准语义和精度要求。当目标硬件不原生支持某个算子时,适配层有三种处理策略:一是算子拆分,把一个复杂算子拆成多个硬件支持的简单算子组合;二是精度转换,比如把某些量化算子转换为硬件支持的位宽;三是设备回退,把该算子放到CPU上用软件实现执行。三种策略各有代价,拆分会引入额外的数据搬运开销,精度转换可能带来精度损失,回退则受CPU算力限制,适配层会根据实测性能自动选择最优路径。
内存管理也是HAL的重点。NPU和DSP通常有专属的内存区域,输入输出张量需要从普通内存拷贝到设备可见内存,这一拷贝往往是端侧推理的重要耗时来源。VCAP的做法是支持内存池化和零拷贝路径:对于连续帧处理的场景(如相机预览),输入缓冲区直接在设备内存上分配,避免每帧都发生跨域拷贝。
四、异构调度与性能调优实践
有了硬件抽象层之后,跨硬件调度才成为可能。VCAP的调度器维护一张设备能力表,在模型加载阶段就把整个计算图切分为若干子图,每个子图绑定到最合适的设备。切分依据包括算子的设备亲和度、子图间的数据传输代价以及当前设备的功耗状态。
一个典型的例子是人像分割算法。分割网络主体放在NPU上执行,但网络末尾的双线性上采样算子如果NPU不支持,调度器会评估两种方案:一是回退到CPU执行上采样,二是用一个NPU支持的转置卷积等价替换。前者省去了算子替换带来的精度验证工作,后者性能更好但需要离线验证精度。这类权衡在端侧非常常见,VCAP把决策依据沉淀成了自动化的策略引擎,配合精度回归测试一起使用。
在性能调优方面,平台提供的实践主要包括三点。首先是量化策略的选择,端侧模型大多采用INT8量化,但部分对精度敏感的层(如检测头的最后几层)保留浮点或采用混合精度,可以以很小的性能代价换取明显的精度提升。其次是线程与绑核策略,CPU回退部分的算子执行时要避免与主线程抢占大核,平台默认把回退执行绑定到中核,兼顾性能和发热。最后是分级加载,模型文件按子图分块存储,首次推理只加载关键路径,其余部分在空闲时段后台加载,从而缩短冷启动时间。
五、总结与思考
VCAP平台的价值在于把端侧AI工程中重复的、易错的适配工作平台化,让算法团队专注于模型本身。从架构上看,它的分层设计与业界主流的端侧推理框架思路一致,但在硬件抽象的深度上走得更远——不只是封装推理接口,而是把编译流程、算子适配、内存策略都纳入了统一框架,这正是应对多芯片平台并存的现实所需要的。
对端侧AI开发者而言,理解这套抽象思路的意义不限于使用某一个平台。当你自己设计跨硬件的推理方案时,同样需要考虑模型格式标准化、算子能力描述、设备调度策略这三个核心问题。硬件抽象层的本质是建立一套稳定的中间表示和接口契约,只要这两个东西定义得足够合理,新增硬件平台的边际成本就能被控制在很低的水平,这也是所有成功的平台型系统共同的架构规律。