var_desc.md.txt 2.6 KB
Newer Older
1
## Background
2
PaddlePaddle divides the description of neural network computation into two stages: compile time and runtime. At compile time, the neural network computation is described as a `ProgramDesc` whereas at runtime an `Executor` interprets the `ProgramDesc` to compute the operations.
3

4
PaddlePaddle uses proto message to describe compile time program because :
5

6
1. The computation program description must be serializable and saved in a file.
7
1. During distributed training, the serialized program will be sent to multiple workers. It should also be possible to break the program into different components, each of which can be executed on a different worker.
8

9
The computation `Program` consists of nested `Blocks`. Each `Block` will consist of data(i.e. `Variable`)  and  `Operations`. The concept to represent them is in the table below.
10 11 12 13 14 15 16

| |compile time|runtime|
|---|---|---|
|Data|VarDesc(proto)|Variable(cpp)|
|Operation|OpDesc(proto)|Operator(cpp)|


17
## Definition of VarType
18

19
A VarDesc should have a name, type and whether or not it is persistable. The are different kinds of variable types supported in PaddlePaddle, apart from the POD_Types like: `LOD_TENSOR`, `SELECTED_ROWS`, `FEED_MINIBATCH`, `FETCH_LIST`, `STEP_SCOPES`, `LOD_RANK_TABLE`, `LOD_TENSOR_ARRAY`, `PLACE_LIST`, `READER` and `CHANNEL`. These are declared inside `VarType`. A `VarDesc` then looks as the following:
20 21 22 23

```proto
message VarDesc {
  required string name = 1;
24
  required VarType type = 2;
25
  optional bool persistable = 3 [ default = false ];
26 27 28
}
```

29
## Definition of TensorDesc
30 31

```proto
32 33 34 35 36 37 38 39 40 41 42 43
message TensorDesc {
  // Should only be PODType. Is enforced in C++
  required Type data_type = 1;
  repeated int64 dims = 2; // [UNK, 640, 480] is saved as [-1, 640, 480]
}
```

The `Type` here comes from the enum defined inside of `VarType` :

```proto
enum Type {
  // Pod Types
44 45 46 47 48 49 50 51
  BOOL = 0;
  INT16 = 1;
  INT32 = 2;
  INT64 = 3;
  FP16 = 4;
  FP32 = 5;
  FP64 = 6;

52 53 54 55 56 57 58 59 60 61 62
  // Other types that may need additional descriptions
  LOD_TENSOR = 7;
  SELECTED_ROWS = 8;
  FEED_MINIBATCH = 9;
  FETCH_LIST = 10;
  STEP_SCOPES = 11;
  LOD_RANK_TABLE = 12;
  LOD_TENSOR_ARRAY = 13;
  PLACE_LIST = 14;
  READER = 15;
  CHANNEL = 16;
63 64 65
}
```

66
A TensorDesc describes `SelectedRows` and `LoDTensor`. For details of `SelectedRows`, please reference [`SelectedRows`](./selected_rows.md).
67

68
## Definition of LodTensorDesc
69

70 71 72
```proto
message LoDTensorDesc {
  required TensorDesc tensor = 1;
73
  optional int32 lod_level = 2 [ default = 0 ];
74
}
75 76
```

77
A LoDTensorDesc contains a tensor and a lod_level.
78

79
## Definition of Variable in Python
80

81
For Variable in Python, please reference [`Python API`](./python_api.md).