API角度

Python 功能没有 pytorch 完善. 参数收集等都需要手写.

CPP API 同 Python.

设计理念

类名为 Expression: 表达式 -> 明确定义 未执行.

Graph

@xl nodes, parameter_nodes

inplace: forward_inplace_state { NOPE } 完全没支持inplace.

immediate_compute 立即执行.

提供backward方法, 但传入了lossindex.

Tensor

暴力绑定内存. (直接就是一个裸指针)

Expression (Variable)

value() 方法真正执行expression并获取值. 调用ee(ExecutionEngine).

Autobatching

在执行cg的时候做. 具体代码在 exec.cc 里一个叫 incremental_forward_no_update的函数里.

使用 signiture 机制. 不同功能的function对应不同的signiture. 相同signiture的 合并.

Optimize

没有做. 只有一个找关键路径的简单算法.

Node(Functions)

Spec推断 DimForward 专门维护 shape 信息.

forwardbackward 放在一个子类里.

所有控制都由 Graph 接管. 包括所有 Variable 和 Nodes (Function)

TreeNN 的实现

Expression 为 Node 级别, 可以被 batch 起来.

(这个对 engine 的合并性能要求较高, 因为 node 可能非常多)

RNN Batching

没有 batch 这个概念, 而是自动 batching. 其实生成了很多张图, 然后再聚合.