端侧 AI 部署先谈资源和权限边界

端侧推理的产品价值很直观:低延迟、离线可用,数据也可以少出设备。工程约束同样直接:内存有硬上限,权限模型比云端零散,崩溃后还不一定有完整现场。

所以第一步不是讨论模型参数,而是列出设备、操作系统和运行时的能力边界,再由业务层与 C/C++ 运行时共同约定资源、权限和失败语义。


1. 端侧 AI 部署的资源约束与风险分析

与云端具备弹性扩容能力的服务环境不同,端侧设备的物理资源受限于硬件物理上限。

模型占用取决于量化方式、上下文长度、批处理、运行时和硬件后端。除权重外,KV Cache、临时张量和图形驱动缓冲也会消耗内存;应在目标设备上实测峰值,而不是用通用数字设定配额。

若未在接口契约中明确限制与防护策略,容易引发以下典型异常:

  • 上层业务并发超载:前端应用在连续触发推理请求时未做限流,导致端侧推理引擎占用超额内存,触发 Linux 内核 oom-killer 机制,进而导致宿主进程挂掉。
  • 系统配额过于刚性:底层系统为防范崩溃而实施过度的 CPU/NPU 配额限制,导致模型响应延时激增,影响产品可用性。

基于上述风险,端侧部署必须依赖一套具备资源保护与降级回退能力的架构设计。


2. 操作系统层的安全边界与防护规范

在推进端侧 AI 推理能力前,可从以下三方面设计安全边界;具体机制要以目标平台支持的能力为准:

  1. 进程隔离与内存配额:可将推理引擎置于低权限进程,并结合 Linux cgroup v2 或 Android 平台机制限制资源。memory.high 是回收节流阈值,memory.max 才是硬限制;应用还要能处理分配失败或被终止的情形。
  2. 硬件访问与 IPC:若平台允许,限制普通业务进程直接访问设备节点,并通过受鉴权保护的服务接口调用推理能力。是否需要独立 Daemon 取决于驱动权限模型和平台架构。
  3. 敏感数据与存储:对需保护的模型和数据采用平台支持的密钥与存储方案,避免把上下文写入不受控临时文件。对短生命周期缓冲可在可控范围内清理,但不能将语言运行时中的“零化”当作唯一的数据防护措施。

3. 分层 API 契约设计

为实现上层业务逻辑与底层算力引擎的解耦,架构设计上应采用三分层模型:

  • 上层 App 业务层:处理业务逻辑与 UI 渲染,发送 JSON/Protobuf 格式的推理请求。
  • 中间层端侧 Service (C++/Rust):负责请求排队、Token 配额管控、内存监控与安全校验。
  • 底层 Runtime 与硬件驱动:执行张量计算并控制 NPU/GPU 调度。

在 C++ 运行时层,可用明确的数据结构表达资源限制和错误码:

// 端侧推理安全契约接口定义 (C++ 风格)
#include <string>
#include <cstdint>

struct InferenceRequest {
    std::string request_id;
    std::string prompt;
    uint32_t max_output_tokens;
    float timeout_seconds;
    bool allow_cloud_fallback; // 端侧资源不足时,是否允许降级到云端
};

enum class SecurityStatusCode {
    SUCCESS = 0,
    ERR_MEMORY_EXCEEDED = 1001,   // 端侧内存超限,拒绝执行
    ERR_NPU_BUSY = 1002,          // 硬件排队超时
    ERR_SANDBOX_VIOLATION = 1003  // 权限越界
};

struct InferenceResponse {
    std::string request_id;
    SecurityStatusCode code;
    std::string generated_text;
    uint32_t tokens_per_second;
};

4. 运行时调度与降级逻辑

针对硬件温度升高、低电量或后台高优先级任务抢占等场景,端侧 Daemon 需具备动态降级能力:

  1. 热度与电量感知的资源降级:温度、电量和前台任务优先级达到产品定义的条件后,可降低并发、缩短输出上限或暂停本地推理。阈值和策略应在目标设备上验证,并向用户说明影响。
  2. 云端回退(Cloud Fallback):若产品提供云端协同,可在获得用户授权、完成数据最小化并满足合规要求后,将可回退的请求发送到云端。端侧错误不应默认触发上传。

5. 跨团队工程推进流程

为确保产品与底层研发高效协作,可采用以下标准化工程推进流程:

  1. 接口契约冻结:产品、前端与底层 C++ 团队共同定义 IPC 协议数据结构及异常状态码。
  2. Mock SDK 并行开发:研发基于协议提供 Mock 动态库,前端团队据此完成界面与交互流开发。
  3. 系统沙盒压力测试:利用 stress-ng 等工具模拟高内存与高 CPU 负载环境,验证 cgroups 保护策略对宿主进程的隔离效果。
  4. 端到端灰度验证:在测试设备集群中开展长时并发验证,监控 OOM 发生率与响应延时,满足基准指标后方可进入发布阶段。

将边界、失败语义和验证方式写进接口契约,有助于团队在目标设备上逐步验证端侧推理功能。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐