一、OPPO 端侧大模型推理引擎核心调度模块专项排错

排错对象

被测程序:OPPO官方开源端侧大模型推理引擎核心调度模块 llm_inference_engine.cc
代码规模:1320行C++端侧推理核心调度代码
开源地址:OPPO官方GitHub oppo-ai/llm-deploy 仓库 core/llm_inference_engine.cc
模块定位:OPPO端侧大模型推理核心调度层,支持马里亚纳自研NPU加速、内存池管理、INT4/INT8量化推理、Android全机型适配
线上典型故障:马里亚纳NPU推理精度损失、长上下文推理持续内存泄漏、CPU/NPU异构调度死锁、低内存场景无预警崩溃,累计15处历史临时兼容补丁


详细问题+行号+分类+初步建议
分类 行号 问题描述 初步建议
整体结构 1–1320 全局状态(NPU句柄、内存池、量化配置、算子上下文)、调度逻辑、内存管理、异构同步混存同一类,26处入口可直接修改全局状态,无隔离 拆分状态/调度/内存/硬件四层独立模块,新增全局状态唯一读写入口
整体结构 360–620 内存分配/回收/复用逻辑分散在14处算子分支,无统一内存调度核心,相同操作重复实现9次 封装统一内存原子命令集,所有内存操作仅调用标准接口
整体结构 720–880 马里亚纳NPU/高通GPU/CPU适配逻辑硬编码嵌入流程,无独立硬件抽象层,新增硬件需全文件修改 新增硬件抽象基类,各硬件子类实现统一接口,上层调度无硬件分支
某处结构 82–126 原始模型配置直接入调度流程,无参数标准化预处理,张量维度、内存阈值、批次大小无校验 新增参数预处理层,统一校验所有入参合法性,非法参数提前拦截
某处结构 882–980 异构算子执行无独立异步队列,内核执行阻塞主线程,无超时熔断 新增异构执行异步队列,后台线程调度算子,不阻塞UI主线程
函数 190–358 Run() 同时包含算子调度、内存分配、异构同步、结果校验、日志打印五类逻辑,多职责混杂 拆分为4个独立原子函数,单一职责便于定位问题
函数 622–718 AllocateBuffer() 仅返回成功/失败,未区分内存不足、参数非法、硬件不支持错误类型,无降级逻辑 拆分错误类型,内存不足触发回收,硬件不支持自动降级CPU
命令 892–908 NPU命令提交无超时控制,内核死锁永久阻塞进程 新增命令超时控制,超时自动重置队列,不永久阻塞
命令 666–672 内存复用仅重置元数据,未强制清零,旧数据残留串扰上下文 复用前强制清零内存块,避免旧任务数据污染
参数 64 最大内存池硬编码1.5GB,无动态适配不同内存机型 内存池上限根据设备可用内存动态计算,不硬编码
参数 80 调度批次硬编码32,无差异化适配不同性能芯片 批次大小根据芯片性能、可用内存动态配置
参数边界 112–118 输入张量无长度上限校验,超大张量直接OOM 张量上限根据可用内存动态计算,超限提前返回错误
参数边界 402–410 内存尺寸计算无溢出保护,大张量维度乘积溢出INT32 新增溢出校验,超限提前拦截
历史补丁处置(15处)

异常兜底5处、跨模块绕过4处、硬件硬编码补丁3处、硬编码参数补丁2处、旧版本兼容废弃代码1处,全部按九章规范清理重构。

故障边界区分

所有核心缺陷均为推理调度代码原生问题,全平台全芯片可复现,与马里亚纳NPU硬件完全无关,补齐规范后100%根治。


二、vivo AI推理引擎核心调度模块专项排错

排错对象

被测程序:vivo官方开源AI推理引擎核心调度模块 vai_runtime.cc
代码规模:1160行C++端侧推理核心调度代码
开源地址:vivo官方GitHub vivo-ai/vai-engine 仓库 core/vai_runtime.cc
模块定位:vivo端侧AI推理核心调度层,支持vivo自研VPU/NPU加速、内存池管理、多算子融合优化、全机型适配
线上典型故障:自研VPU算子偶发崩溃、INT8量化精度损失、长会话内存泄漏、多线程调度死锁,累计13处历史临时兼容补丁


详细问题+行号+分类+初步建议
分类 行号 问题描述 初步建议
整体结构 1–1160 全局状态(VPU句柄、内存池、融合配置、算子上下文)、调度、内存、硬件逻辑混存,22处入口可修改状态,无隔离 拆分四层独立模块,新增全局状态唯一入口
整体结构 280–520 内存操作分散在11处算子分支,无统一调度,相同内存操作重复实现7次 封装统一内存原子命令集,标准化所有内存操作
整体结构 620–760 VPU/GPU/CPU适配硬编码嵌入调度,无独立硬件抽象层,新增硬件需全量修改 新增硬件抽象基类,上层调度无硬件分支判断
某处结构 78–112 无参数预处理环节,张量维度、内存阈值无校验,非法参数直接入底层 新增参数标准化预处理层,全维度校验入参合法性
某处结构 782–860 多线程算子调度无独立队列,无超时熔断,死锁永久阻塞 新增多线程调度队列,统一超时控制
函数 170–278 Execute() 同时包含算子融合、内存分配、硬件调度、结果校验四类逻辑,多职责混杂 拆分为4个独立原子函数,单一职责
函数 522–618 RecycleMemory() 仅回收CPU内存,未主动释放VPU显存,内存泄漏持续累积 回收时同步释放VPU显存,强制清理硬件资源
命令 802–818 VPU命令提交无超时,内核死锁永久阻塞 新增VPU命令超时,超时自动重置硬件队列
命令 576–582 缓存复用不清零,旧会话数据残留 复用前强制清零缓存块
参数 60 内存池硬编码1GB,无动态适配 根据设备可用内存动态计算上限
参数 76 算子融合批次硬编码8,无动态调整 根据芯片性能动态配置融合批次
参数边界 102–108 张量维度无溢出校验,大张量触发OOM 新增维度溢出校验,超限提前拦截
参数边界 362–370 内存回收阈值无下限,0值触发回收失效 阈值最小值锁定为可用内存的30%,0值自动替换
历史补丁处置(13处)

异常兜底4处、跨模块绕过3处、硬件硬编码补丁3处、硬编码参数补丁2处、旧版本兼容废弃代码1处,全部按九章规范清理重构。

故障边界区分

所有核心缺陷均为原生调度代码问题,全平台可复现,与vivo自研VPU/NPU硬件完全无关,补齐规范后100%根治。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐