整体项目架构

InfiniTensor_v2.0 是一个多硬件后端可扩展的张量计算框架,核心设计模式是“计算图抽象 + 符号表达式推导 + 算子/内核分离”.

层级 核心组件 主要职责
1. 基础数据层 Tensor, DType, Shape 定义张量的基本属性、数据类型、存储布局和符号化形状描述。
2. 符号表达式层 Expr, ShapeExpr, StrideExpr 支持动态形状推导。通过符号化表示维度,实现在计算前确定张量步长与偏移。
3. 算子抽象层 Operator, OpType 定义算子基类及具体算子(如 ElementWise, Gemm)。负责形状推导和前驱后继关系维护。
4. 计算图管理层 Graph, GraphBuilder 维护张量和算子的拓扑结构,提供拓扑排序、图验证及用户友好的图构建接口。
5. 运行时层 Runtime, Kernel, KernelRegistry 负责不同设备(CPU/CUDA/Ascend 等)的内存管理、内核分发与执行。
6. 适配与绑定层 pyinfinitensor 使用 Pybind11 将 C++ 接口导出至 Python,提供 Torch FX 转换器(可选)。

前后端的联动与解耦

接下来,我们从 Python tests 文件 (python/tests/test_torch_fx_translator.py) 里,看看整个前后端的联动。


Runtime 设计

在 AI 相关的框架项目里,一般都会将运行环境抽象为 Runtime Interface,这样可以通过为不同平台实现相同的 interface,达到统一管理运行环境的目的.

举例来说,用 CPU 进行张量运算和在 NVIDIA 显卡上进行张量运算有很大的差别:在 CPU 上,我们需要用 memcpy() 复制张量即可;而在 NVIDIA 显卡上,我们首先需要 cudaMalloc() 分配空间,再 cudaMemcpy() 复制数据.而通过一个统一的 Runtime API,我们就可以用一个统一的 copy_tensor() 自动在 CPU 调用 memcpy() 而在 NVIDIA 显卡上调用 cudaMalloc() + cudaMemcpy().这是 Runtime 抽象类的设计初衷.

Graph

Operator

Tensor