network.h 3.97 KB
Newer Older
1
2
3
4
5
6
7
8
/*!
 *  Copyright (c) 2018 by Contributors
 * \file graph/network.h
 * \brief DGL networking related APIs
 */
#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
26
/*!
 * \brief Create NDArray from raw data
 */
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
32
33
/*!
 * \brief Message type for DGL distributed training
 */
enum MessageType {
Chao Ma's avatar
Chao Ma committed
34
35
36
  /*!
   * \brief Message for send/recv NodeFlow
   */
37
  kNodeFlowMsg = 0,
Chao Ma's avatar
Chao Ma committed
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
  /*!
   * \brief Message for end-signal
   */
  kFinalMsg = 1,
  /*!
   * \brief Initialize KVStore
   */
  kInitMsg = 2,
  /*!
   * \brief Push msg to KVStore
   */
  kPushMsg = 3,
  /*!
   * \brief Pull msg from KVStore
   */
  kPullMsg = 4,
  /*!
   * \brief PullBack msg from KVStore
   */
  kPullBackMsg = 5,
  /*!
   * \brief Barrier msg for KVStore
   */
61
62
63
  kBarrierMsg = 6,
  /*!
   * \brief IP and ID msg for KVStore
64
   */
65
66
67
  kIPIDMsg = 7,
  /*!
   * \brief Get data shape msg for KVStore
68
   */
69
70
71
  kGetShapeMsg = 8,
  /*!
   * \brief Get data shape back msg for KVStore
72
   */
73
  kGetShapeBackMsg = 9
74
75
76
};

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

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

  /*!
   * \return message type
   */
100
  inline int msg_type() const { return msg_type_; }
101
102
103
104

  /*!
   * \return count of ndarray
   */
105
  inline int ndarray_count() const { return ndarray_count_; }
106
107

  /*!
Chao Ma's avatar
Chao Ma committed
108
   * \brief Add NDArray meta data to ArrayMeta
109
110
111
112
113
   * \param array DGL NDArray
   */
  void AddArray(const NDArray& array);

  /*!
Chao Ma's avatar
Chao Ma committed
114
   * \brief Serialize ArrayMeta to data buffer
115
116
117
118
119
120
   * \param size size of serialized message
   * \return pointer of data buffer
   */
  char* Serialize(int64_t* size);

  /*!
Chao Ma's avatar
Chao Ma committed
121
   * \brief Deserialize ArrayMeta from data buffer
122
123
124
125
126
127
128
129
130
   * \param buffer data buffer
   * \param size size of data buffer
   */
  void Deserialize(char* buffer, int64_t size);

  /*!
   * \brief type of message
   */
  int msg_type_;
131

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

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

142
  /*!
143
144
   * \brief We first write the ndim to data_shape_
   * 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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
/*!
 * \brief C structure for holding DGL KVServer message
 */
class KVStoreMsg {
 public:
  /*!
   * \brief KVStoreMsg constructor.
   */
  KVStoreMsg() {}

  /*!
   * \brief Construct KVStoreMsg from binary data buffer.
   * \param buffer data buffer
   * \param size data size
   */
  KVStoreMsg(char* buffer, int64_t size) {
    CHECK_NOTNULL(buffer);
    this->Deserialize(buffer, size);
  }
  /*!
   * \brief Serialize KVStoreMsg to data buffer
170
   *  Note that we don't serialize ID and data here.
Chao Ma's avatar
Chao Ma committed
171
172
173
174
175
176
177
178
179
180
181
182
   * \param size size of serialized message
   * \return pointer of data buffer
   */
  char* Serialize(int64_t* size);

  /*!
   * \brief Deserialize KVStoreMsg from data buffer
   * \param buffer data buffer
   * \param size size of data buffer
   */
  void Deserialize(char* buffer, int64_t size);

183
184
185
  /*!
   * \brief Message type of kvstore
   */
Chao Ma's avatar
Chao Ma committed
186
  int msg_type;
187
188
189
  /*!
   * \brief Sender's ID
   */
Chao Ma's avatar
Chao Ma committed
190
  int rank;
191
192
193
  /*!
   * \brief data name
   */
Chao Ma's avatar
Chao Ma committed
194
  std::string name;
195
196
197
  /*!
   * \brief data ID
   */
Chao Ma's avatar
Chao Ma committed
198
  NDArray id;
199
200
201
  /*!
   * \brief data matrix
   */
Chao Ma's avatar
Chao Ma committed
202
  NDArray data;
203
  /*!
204
205
   * \brief data shape
   */
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_