network.h 3.97 KB
Newer Older
1
/**
2
 *  Copyright (c) 2018 by Contributors
3
4
 * @file graph/network.h
 * @brief DGL networking related APIs
5
6
7
8
 */
#ifndef DGL_GRAPH_NETWORK_H_
#define DGL_GRAPH_NETWORK_H_

9
#include <dgl/runtime/ndarray.h>
10
#include <dmlc/logging.h>
11
#include <string.h>
12

Chao Ma's avatar
Chao Ma committed
13
#include <string>
14
#include <vector>
15
16

#include "../c_api_common.h"
17
#include "../rpc/network/msg_queue.h"
18
19

using dgl::runtime::NDArray;
20
21
22
23

namespace dgl {
namespace network {

24
/**
25
 * @brief Create NDArray from raw data
Chao Ma's avatar
Chao Ma committed
26
 */
27
28
NDArray CreateNDArrayFromRaw(
    std::vector<int64_t> shape, DGLDataType dtype, DGLContext ctx, void* raw);
Chao Ma's avatar
Chao Ma committed
29

30
/**
31
 * @brief Message type for DGL distributed training
32
33
 */
enum MessageType {
34
  /**
35
   * @brief Message for send/recv NodeFlow
Chao Ma's avatar
Chao Ma committed
36
   */
37
  kNodeFlowMsg = 0,
38
  /**
39
   * @brief Message for end-signal
Chao Ma's avatar
Chao Ma committed
40
41
   */
  kFinalMsg = 1,
42
  /**
43
   * @brief Initialize KVStore
Chao Ma's avatar
Chao Ma committed
44
45
   */
  kInitMsg = 2,
46
  /**
47
   * @brief Push msg to KVStore
Chao Ma's avatar
Chao Ma committed
48
49
   */
  kPushMsg = 3,
50
  /**
51
   * @brief Pull msg from KVStore
Chao Ma's avatar
Chao Ma committed
52
53
   */
  kPullMsg = 4,
54
  /**
55
   * @brief PullBack msg from KVStore
Chao Ma's avatar
Chao Ma committed
56
57
   */
  kPullBackMsg = 5,
58
  /**
59
   * @brief Barrier msg for KVStore
Chao Ma's avatar
Chao Ma committed
60
   */
61
  kBarrierMsg = 6,
62
  /**
63
   * @brief IP and ID msg for KVStore
64
   */
65
  kIPIDMsg = 7,
66
  /**
67
   * @brief Get data shape msg for KVStore
68
   */
69
  kGetShapeMsg = 8,
70
  /**
71
   * @brief Get data shape back msg for KVStore
72
   */
73
  kGetShapeBackMsg = 9
74
75
};

76
/**
77
 * @brief Meta data for NDArray message
78
 */
Chao Ma's avatar
Chao Ma committed
79
class ArrayMeta {
80
 public:
81
  /**
82
83
   * @brief ArrayMeta constructor.
   * @param msg_type type of message
84
   */
85
  explicit ArrayMeta(int msg_type) : msg_type_(msg_type), ndarray_count_(0) {}
86

87
  /**
88
89
90
   * @brief Construct ArrayMeta from binary data buffer.
   * @param buffer data buffer
   * @param size data size
91
   */
Chao Ma's avatar
Chao Ma committed
92
  ArrayMeta(char* buffer, int64_t size) {
93
94
95
96
    CHECK_NOTNULL(buffer);
    this->Deserialize(buffer, size);
  }

97
  /**
98
   * @return message type
99
   */
100
  inline int msg_type() const { return msg_type_; }
101

102
  /**
103
   * @return count of ndarray
104
   */
105
  inline int ndarray_count() const { return ndarray_count_; }
106

107
  /**
108
109
   * @brief Add NDArray meta data to ArrayMeta
   * @param array DGL NDArray
110
111
112
   */
  void AddArray(const NDArray& array);

113
  /**
114
115
116
   * @brief Serialize ArrayMeta to data buffer
   * @param size size of serialized message
   * @return pointer of data buffer
117
118
119
   */
  char* Serialize(int64_t* size);

120
  /**
121
122
123
   * @brief Deserialize ArrayMeta from data buffer
   * @param buffer data buffer
   * @param size size of data buffer
124
125
126
   */
  void Deserialize(char* buffer, int64_t size);

127
  /**
128
   * @brief type of message
129
130
   */
  int msg_type_;
131

132
  /**
133
   * @brief count of ndarray in MetaMsg
134
135
   */
  int ndarray_count_;
136

137
  /**
138
   * @brief DataType for each NDArray
Chao Ma's avatar
Chao Ma committed
139
   */
140
  std::vector<DGLDataType> data_type_;
Chao Ma's avatar
Chao Ma committed
141

142
  /**
143
   * @brief We first write the ndim to data_shape_
144
   * and then write the data shape.
145
146
147
   */
  std::vector<int64_t> data_shape_;
};
148

149
/**
150
 * @brief C structure for holding DGL KVServer message
Chao Ma's avatar
Chao Ma committed
151
152
153
 */
class KVStoreMsg {
 public:
154
  /**
155
   * @brief KVStoreMsg constructor.
Chao Ma's avatar
Chao Ma committed
156
157
158
   */
  KVStoreMsg() {}

159
  /**
160
161
162
   * @brief Construct KVStoreMsg from binary data buffer.
   * @param buffer data buffer
   * @param size data size
Chao Ma's avatar
Chao Ma committed
163
164
165
166
167
   */
  KVStoreMsg(char* buffer, int64_t size) {
    CHECK_NOTNULL(buffer);
    this->Deserialize(buffer, size);
  }
168
  /**
169
   * @brief Serialize KVStoreMsg to data buffer
170
   *  Note that we don't serialize ID and data here.
171
172
   * @param size size of serialized message
   * @return pointer of data buffer
Chao Ma's avatar
Chao Ma committed
173
174
175
   */
  char* Serialize(int64_t* size);

176
  /**
177
178
179
   * @brief Deserialize KVStoreMsg from data buffer
   * @param buffer data buffer
   * @param size size of data buffer
Chao Ma's avatar
Chao Ma committed
180
181
182
   */
  void Deserialize(char* buffer, int64_t size);

183
  /**
184
   * @brief Message type of kvstore
185
   */
Chao Ma's avatar
Chao Ma committed
186
  int msg_type;
187
  /**
188
   * @brief Sender's ID
189
   */
Chao Ma's avatar
Chao Ma committed
190
  int rank;
191
  /**
192
   * @brief data name
193
   */
Chao Ma's avatar
Chao Ma committed
194
  std::string name;
195
  /**
196
   * @brief data ID
197
   */
Chao Ma's avatar
Chao Ma committed
198
  NDArray id;
199
  /**
200
   * @brief data matrix
201
   */
Chao Ma's avatar
Chao Ma committed
202
  NDArray data;
203
  /**
204
   * @brief data shape
205
   */
206
  NDArray shape;
Chao Ma's avatar
Chao Ma committed
207
};
208

209
210
211
212
}  // namespace network
}  // namespace dgl

#endif  // DGL_GRAPH_NETWORK_H_