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"