API角度
Python 功能没有 pytorch 完善. 参数收集等都需要手写.
CPP API 同 Python.
设计理念
类名为 Expression
: 表达式 -> 明确定义 未执行.
Graph
@xl nodes
, parameter_nodes
inplace: forward_inplace_state { NOPE }
完全没支持inplace.
immediate_compute
立即执行.
提供backward
方法, 但传入了loss
的index
.
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 信息.
forward
和 backward
放在一个子类里.
所有控制都由 Graph 接管. 包括所有 Variable 和 Nodes (Function)
TreeNN 的实现
Expression 为 Node 级别, 可以被 batch 起来.
(这个对 engine 的合并性能要求较高, 因为 node 可能非常多)
RNN Batching
没有 batch 这个概念, 而是自动 batching. 其实生成了很多张图, 然后再聚合.