char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
264f1b518
char/aliceai-t5-moe
1#include "ggml.h" 2#include "utils.hpp" 3 4zdnn_data_types ggml_zdnn_type_mapping (ggml_type type ) { 5switch (type ) { 6case GGML_TYPE_F32 : 7return FP32 ; 8case GGML_TYPE_F16 : 9return FP16 ; 10case GGML_TYPE_BF16 : 11return BFLOAT ; 12case GGML_TYPE_Q8_0 : 13return INT8 ; 14case GGML_TYPE_I8 : 15return INT8 ; 16case GGML_TYPE_I32 : 17return INT32 ; 18default : 19GGML_ABORT ("%s: fatal: unable to determine zTensor data type" , 20__func__ ); 21break ; 22 } 23} 24 25void ggml_zdnn_create_tensor (zdnn_tensor_desc & pre_tfm_desc , 26zdnn_tensor_desc & tfm_desc , 27zdnn_ztensor & ztensor , 28const ggml_tensor * src , 29const int64_t * ne , 30const zdnn_data_layouts layout ) { 31zdnn_init_pre_transformed_desc ( 32layout , 33ggml_zdnn_type_mapping (src -> type ), 34& pre_tfm_desc , 35ne [3 ],ne [2 ],ne [1 ],ne [0 ] 36 ); 37 38ZDNN_CHECK (zdnn_generate_transformed_desc (& pre_tfm_desc ,& tfm_desc )); 39ZDNN_CHECK (zdnn_init_ztensor_with_malloc (& pre_tfm_desc ,& tfm_desc ,& ztensor )); 40} 41 42void ggml_zdnn_load_tensor (zdnn_ztensor & ztensor ,void * buffer ) { 43ZDNN_CHECK (zdnn_transform_ztensor (& ztensor ,buffer )); 44} 45 46void ggml_zdnn_init_tensor (ggml_backend_zdnn_buffer * buffer ,const ggml_tensor * tensor ) { 47switch (tensor -> op ) { 48case GGML_OP_MUL_MAT : 49 { 50zdnn_init_pre_transformed_desc ( 51ZDNN_2D , 52ggml_zdnn_type_mapping (tensor -> type ), 53& buffer -> pre_tfm_desc , 54tensor -> ne [1 ],tensor -> ne [0 ] 55 ); 56 }break ; 57 58default : 59 { 60// For 4D tensors, GGML uses NCHW layout. However, because zDNN 61// automatically transforms everything to NHWC, we will use it 62// directly to avoid the performance penalty changing the 63// layout and reshaping the tensor. 64zdnn_init_pre_transformed_desc ( 65ZDNN_NHWC , 66ggml_zdnn_type_mapping (tensor -> type ), 67& buffer -> pre_tfm_desc , 68tensor -> ne [3 ],tensor -> ne [2 ],tensor -> ne [1 ],tensor -> ne [0 ] 69 ); 70 71// TODO: Consider adding a ggml check. 72// TODO: If tensor = 4D, use ZDNN_NCHW by default. 73// TODO: If tensor = 2D, use ZDNN_NHWC by default. 74 }break ; 75 } 76 77ZDNN_CHECK (zdnn_generate_transformed_desc (& buffer -> pre_tfm_desc ,& buffer -> tfm_desc )); 78ZDNN_CHECK (zdnn_init_ztensor_with_malloc (& buffer -> pre_tfm_desc ,& buffer -> tfm_desc ,& buffer -> ztensor )); 79}