Files

iAOP-Core · 推理后端抽象层(Inference Backend)

对应 PRD 5.6「⑥ 部署底座」与 EPIC #8: NVIDIA GPU(5090,Triton/ONNX)与华为昇腾 NPU(ACL/CANN)实现同一 InferenceBackend 接口,业务代码仅依赖接口、不感知硬件; 切换后端 = 改适配层配置(backend: gpu|npu),业务代码零改动。

模块结构

core/inference-backend/
├── __init__.py          包入口(导出接口/请求/结果/工厂)
├── base.py              InferenceBackend 统一抽象接口(load_model/infer/health/unload)
├── gpu_backend.py       NVIDIA 5090 后端(Triton/ONNX,OpenAI 兼容)
├── npu_backend.py       华为昇腾 NPU 后端(ACL/CANN,MindIE OpenAI 兼容)
├── factory.py           可插拔工厂(backend: gpu|npu -> 实现类)
├── config/
│   └── backends.template.yaml   模板后端适配层配置资产(ti-cl4 示例)
└── tests/
    ├── _bootstrap.py            测试引导(目录含连字符,挂载包名 inference_backend)
    └── test_inference_backend.py 接口/工厂/行为单元测试

统一接口(PRD 5.6:loadModel / infer / health / unload)

业务代码只依赖 InferenceBackend 接口,不 import 任何具体后端:

from inference_backend.base import InferRequest
from inference_backend.factory import build_backend, load_backend_config

backend = build_backend(load_backend_config("config/backends.template.yaml"))

backend.load_model()
health = backend.health()                 # 健康巡检
result = backend.infer(InferRequest(prompt="请解释炉温报警"))  # result.text
backend.unload()

切换后端(仅改配置)

config/backends.template.yaml 中 backend: gpu 改为 backend: npu 即切换到 昇腾适配层;同一份业务代码、同一调用面,硬件差异被适配层隔离。 新增硬件:在 factory.py 的 BACKEND_REGISTRY 注册实现类即可。

运行测试

cd core/inference-backend/tests
python -m unittest discover -s . -p "test_*.py"