Paddle Refactor Plan - PaddlePaddle/Paddle GitHub Wiki

Paddle 重构计划

目前Paddle的架构

 MultiGradientMachine  <-- protobuf's ModelConfig
          +
          +
    NeuralNetwork
          +
          +
   +---+Layer+---+
   |             |
   +             +
Parameter     Argument
   +             +
   |             |
   +             +
Vector         Matrix
  +               +
  |               |
  |               |
  +--+MemHandle+--+

目前Paddle的架构如上图所示。有如下问题:

  • 最上层与用户的接口是protobuf格式的ModelConfig对象。ModelConfig对象过于复杂冗余,config_parsertrainer_config_helpers调用过深。
  • Layer区分看待参数(Parameter)与输入(Argument),导致输入不能被优化。同样的代码在Paddle中会实现多次(MulProjection, MulOperator)。
  • VectorMatrix不统一。Paddle没有Tensor对象,导致实现数学操作没有统一的输入类型。

解决办法

将整个问题分为三部分解决:

  • protobuf ModelConfig的清理,会使用纯C++完成拓扑格式配置,并使用C API想第三方语言暴露拓扑结构配置方法,直接用第三方语言操纵拓扑结构,抛弃Protobuf中间层。实现方法如PR #1665描述。由: 于洋负责
  • Layer转换成无状态的Function调用。让Paddle从计算处开始,不区分ParameterArgument。由: 何道远负责
  • VectorMatrix统一成Tensor,让Paddle的所有矩阵、向量的数学操作有统一的入口。由: 王益、冯家宜、廖刚、齐俊负责。

重构完毕后,Paddle的结构如下:

      topology
         +
         |
         +
  MultiGradientMachine
        +
        |
        +
     NeuralNetwork
        +
        |
        +
  +--+Layer+-------+ Function
  |           |
  +           +
Parameter  Argument
  +            +
  |            |
  +--+Tensor+--+

最终,所有的Layer都是由Function构成,故一个Layer可以变成多个函数构成的子图。MultiGradientMachineNeuralNetwork会重构成驱动Function在单机多线程,多显卡上计算Engine

           Topology
              +
              +
            Engine
          +        +
          +        +
       Function  Tensor
       
     Layer = vector<Function>.

工作计划

Tensor实现计划

  • 2017-5-8 至 2017-5-15
    • TBD
  • 2017-5-15 至 2017-5-22
    • TBD
  • 2017-5-22 至 2017-5-29
    • TBD
  • ...

Function 实现计划

  • 2017-5-8 至 2017-5-15
    • TBD
  • 2017-5-15 至 2017-5-22
    • TBD
  • 2017-5-22 至 2017-5-29
    • TBD
  • ...

Topology 实现计划

  • 2017-5-8 至 2017-5-15
    • 完成Topology重构设计文档,合入主线
    • paddle::Function为例,重构paddle::Function的配置部分。
      • paddle::Function从类转化为函数。
  • 2017-5-15 至 2017-5-22
    • 完成Topology重构中的Layer部分
  • 2017-5-22 至 2017-5-29
    • 暴露Paddle训练过程的C-API
    • 暴露Tensor的 C-API(期待Tensor API搞定)
  • 2017-5-29 至 2017-6-5
    • 实现在C-API中定义新的拓扑结构,进行训练。
⚠️ **GitHub.com Fallback** ⚠️