Files

52 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 任何具体后端:
```python
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` 注册实现类即可。
## 运行测试
```bash
cd core/inference-backend/tests
python -m unittest discover -s . -p "test_*.py"
```