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 {

Chao Ma's avatar
Chao Ma committed
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 {
Chao Ma's avatar
Chao Ma committed
34
  /*!
35
   * @brief Message for send/recv NodeFlow
Chao Ma's avatar
Chao Ma committed
36
   */
37
  kNodeFlowMsg = 0,
Chao Ma's avatar
Chao Ma committed
38
  /*!
39
   * @brief Message for end-signal
Chao Ma's avatar
Chao Ma committed
40
41
42
   */
  kFinalMsg = 1,
  /*!
43
   * @brief Initialize KVStore
Chao Ma's avatar
Chao Ma committed
44
45
46
   */
  kInitMsg = 2,
  /*!
47
   * @brief Push msg to KVStore
Chao Ma's avatar
Chao Ma committed
48
49
50
   */
  kPushMsg = 3,
  /*!
51
   * @brief Pull msg from KVStore
Chao Ma's avatar
Chao Ma committed
52
53
54
   */
  kPullMsg = 4,
  /*!
55
   * @brief PullBack msg from KVStore
Chao Ma's avatar
Chao Ma committed
56
57
58
   */
  kPullBackMsg = 5,
  /*!
59
   * @brief Barrier msg for KVStore
Chao Ma's avatar
Chao Ma committed
60
   */
61
62
  kBarrierMsg = 6,
  /*!
63
   * @brief IP and ID msg for KVStore
64
   */
65
66
  kIPIDMsg = 7,
  /*!
67
   * @brief Get data shape msg for KVStore
68
   */
69
70
  kGetShapeMsg = 8,
  /*!
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
81
 public:
  /*!
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
97
    CHECK_NOTNULL(buffer);
    this->Deserialize(buffer, size);
  }

  /*!
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
113
   */
  void AddArray(const NDArray& array);

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

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

  /*!
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

Chao Ma's avatar
Chao Ma committed
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

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

  /*!
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
168
   */
  KVStoreMsg(char* buffer, int64_t size) {
    CHECK_NOTNULL(buffer);
    this->Deserialize(buffer, size);
  }
  /*!
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
176
   */
  char* Serialize(int64_t* size);

  /*!
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_