1#include "ggml.h"
2#include "ggml-backend-impl.h"
3
4#include <unordered_map>
5#include <unordered_set>
6#include <vector>
7#include <cstdint>
8
9// ggml_tensor is serialized into apir_rpc_tensor
10struct apir_rpc_tensor {
11 uint64_t id;
12 uint32_t type;
13 uint64_t buffer;
14 uint32_t ne[GGML_MAX_DIMS];
15 uint32_t nb[GGML_MAX_DIMS];
16 uint32_t op;
17 int32_t op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)];
18 int32_t flags;
19 uint64_t src[GGML_MAX_SRC];
20 uint64_t view_src;
21 uint64_t view_offs;
22 uint64_t data;
23 char name[GGML_MAX_NAME];
24
25 char padding[4];
26};
27
28/* frontend */
29
30apir_rpc_tensor apir_serialize_tensor(const ggml_tensor * tensor);
31
32void apir_serialize_graph(const ggml_cgraph * cgraph, std::vector<uint8_t> & output);
33
34/* backend */
35
36void apir_track_backend_buffer(ggml_backend_buffer_t buffer);
37bool apir_untrack_backend_buffer(ggml_backend_buffer_t buffer);
38std::unordered_set<ggml_backend_buffer_t> apir_get_track_backend_buffers();
39
40void apir_add_tensor(ggml_tensor * tensor,
41 std::vector<apir_rpc_tensor> & tensors,
42 std::unordered_set<ggml_tensor *> & visited);
43
44ggml_tensor * apir_deserialize_tensor(ggml_context * ctx, const apir_rpc_tensor * tensor);
45
46ggml_tensor * apir_create_node(uint64_t id,
47 ggml_context * ctx,
48 const std::unordered_map<uint64_t, const apir_rpc_tensor *> & tensor_ptrs,
49 std::unordered_map<uint64_t, ggml_tensor *> & tensor_map);
50
51ggml_cgraph * apir_deserialize_graph(uint32_t n_nodes,
52 uint32_t n_tensors,
53 const apir_rpc_tensor * tensors,
54 const uint64_t * nodes);