char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
015deb904
char/aliceai-t5-moe
1#include "backend/shared/apir_cs_rpc.h" 2#include "ggml-backend-impl.h" 3#include "ggml-impl.h" 4#include "ggml-remoting.h" 5 6#include <cinttypes> 7#include <unordered_map> 8#include <unordered_set> 9#include <vector> 10 11apir_rpc_tensor apir_serialize_tensor (const ggml_tensor * tensor ) { 12apir_rpc_tensor result ; 13result .id = reinterpret_cast < uint64_t > (tensor ); 14result .type = tensor -> type ; 15if (tensor -> buffer ) { 16ggml_backend_buffer_t buffer = tensor -> buffer ; 17 18result .buffer = BUFFER_TO_HOST_HANDLE (buffer ); 19 }else { 20result .buffer = 0 ; 21 } 22for (uint32_t i = 0 ;i < GGML_MAX_DIMS ;i ++ ) { 23result .ne [i ]= tensor -> ne [i ]; 24result .nb [i ]= tensor -> nb [i ]; 25 } 26result .op = tensor -> op ; 27for (uint32_t i = 0 ;i < GGML_MAX_OP_PARAMS /sizeof (int32_t );i ++ ) { 28result .op_params [i ]= tensor -> op_params [i ]; 29 } 30result .flags = tensor -> flags ; 31for (uint32_t i = 0 ;i < GGML_MAX_SRC ;i ++ ) { 32result .src [i ]= reinterpret_cast < uint64_t > (tensor -> src [i ]); 33 } 34result .view_src = reinterpret_cast < uint64_t > (tensor -> view_src ); 35result .view_offs = tensor -> view_offs ; 36result .data = reinterpret_cast < uint64_t > (tensor -> data ); 37if (tensor -> data ) { 38if (!tensor -> buffer ) { 39GGML_ABORT ("%s: tensor has data but not buffer" ,__func__ ); 40 } 41// tensor->data is serialized as an offset to the buffer base address 42result .data -= reinterpret_cast < uint64_t > (BUFFER_TO_GGML_CONTEXT (tensor -> buffer )-> base ); 43 } 44snprintf (result .name ,GGML_MAX_NAME ,"%s" ,tensor -> name ); 45return result ; 46} 47 48void apir_add_tensor (ggml_tensor * tensor , 49 std::vector < apir_rpc_tensor > & tensors , 50 std::unordered_set < ggml_tensor *> & visited ) { 51if (tensor == nullptr ) { 52return ; 53 } 54if (visited .find (tensor )!= visited .end ()) { 55return ; 56 } 57visited .insert (tensor ); 58for (int i = 0 ;i < GGML_MAX_SRC ;i ++ ) { 59apir_add_tensor (tensor -> src [i ],tensors ,visited ); 60 } 61apir_add_tensor (tensor -> view_src ,tensors ,visited ); 62tensors .push_back (apir_serialize_tensor (tensor )); 63} 64 65void apir_serialize_graph (const ggml_cgraph * cgraph , std::vector < uint8_t > & output ) { 66uint32_t n_nodes = cgraph -> n_nodes ; 67 std::vector < apir_rpc_tensor > tensors ; 68 std::unordered_set < ggml_tensor *> visited ; 69for (uint32_t i = 0 ;i < n_nodes ;i ++ ) { 70apir_add_tensor (cgraph -> nodes [i ],tensors ,visited ); 71 } 72// serialization format: 73// | n_nodes (4 bytes) | nodes (n_nodes * sizeof(uint64_t) | n_tensors (4 bytes) | tensors (n_tensors * sizeof(apir_rpc_tensor)) | 74uint32_t n_tensors = tensors .size (); 75int output_size = 76sizeof (uint32_t )+ n_nodes * sizeof (uint64_t )+ sizeof (uint32_t )+ n_tensors * sizeof (apir_rpc_tensor ); 77output .resize (output_size ,0 ); 78memcpy (output .data (),& n_nodes ,sizeof (n_nodes )); 79for (uint32_t i = 0 ;i < n_nodes ;i ++ ) { 80memcpy (output .data ()+ sizeof (n_nodes )+ i * sizeof (uint64_t ),& cgraph -> nodes [i ],sizeof (uint64_t )); 81 } 82uint32_t * out_ntensors = (uint32_t * ) (output .data ()+ sizeof (n_nodes )+ n_nodes * sizeof (uint64_t )); 83* out_ntensors = n_tensors ; 84apir_rpc_tensor * out_tensors = 85 (apir_rpc_tensor * ) (output .data ()+ sizeof (n_nodes )+ n_nodes * sizeof (uint64_t )+ sizeof (uint32_t )); 86memcpy (out_tensors ,tensors .data (),n_tensors * sizeof (apir_rpc_tensor )); 87}