一、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–908NPU命令提交无超时控制,内核死锁永久阻塞进程新增命令超时控制,超时自动重置队列,不永久阻塞
命令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–760VPU/GPU/CPU适配硬编码嵌入调度,无独立硬件抽象层,新增硬件需全量修改新增硬件抽象基类,上层调度无硬件分支判断
某处结构78–112无参数预处理环节,张量维度、内存阈值无校验,非法参数直接入底层新增参数标准化预处理层,全维度校验入参合法性
某处结构782–860多线程算子调度无独立队列,无超时熔断,死锁永久阻塞新增多线程调度队列,统一超时控制
函数170–278 Execute()同时包含算子融合、内存分配、硬件调度、结果校验四类逻辑,多职责混杂拆分为4个独立原子函数,单一职责
函数522–618 RecycleMemory()仅回收CPU内存,未主动释放VPU显存,内存泄漏持续累积回收时同步释放VPU显存,强制清理硬件资源
命令802–818VPU命令提交无超时,内核死锁永久阻塞新增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%根治。

更多推荐