char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
aee56b3ab
char/aliceai-t5-moe
1#include "../node_context.h" 2#include "../op_table.h" 3#include "../utils.h" 4 5#include <openvino/op/constant.hpp> 6#include <openvino/op/group_conv.hpp> 7#include <openvino/op/reshape.hpp> 8#include <openvino/op/squeeze.hpp> 9#include <openvino/op/transpose.hpp> 10#include <openvino/op/unsqueeze.hpp> 11 12namespace ov { 13namespace frontend { 14namespace ggml { 15namespace op { 16 17OutputVector translate_ssm_conv (const NodeContext & context ) { 18num_inputs_check (context ,2 ,2 ); 19 20auto sx = context .get_input (0 );// conv state + input: OV shape [1, n_s, d_inner, ncs] 21auto c = context .get_input (1 );// conv1d weight: OV shape [1, 1, d_inner, d_conv] 22 23auto sx_shape = context .get_input_shape (0 ).to_shape ();// [1, n_s, d_inner, ncs] 24auto c_shape = context .get_input_shape (1 ).to_shape ();// [1, 1, d_inner, d_conv] 25 26// int64_t n_s = sx_shape[1]; 27int64_t d_inner = sx_shape [2 ]; 28// int64_t ncs = sx_shape[3]; // d_conv - 1 + n_t 29int64_t d_conv = c_shape [3 ]; 30// int64_t n_t = ncs - d_conv + 1; 31 32// Reshape sx from [1, n_s, d_inner, ncs] to [n_s, d_inner, ncs] for 1D GroupConvolution 33auto sx_reshaped = 34 std::make_shared < ov::op::v0::Squeeze > (sx , ov::op::v0::Constant ::create (ov::element::i64 , {1 }, {0 })); 35 36// Reshape c from [1, 1, d_inner, d_conv] to [d_inner, 1, 1, d_conv] 37// GroupConvolution filter: [groups, out_channels/groups, in_channels/groups, kernel_size] 38auto c_new_shape = ov::op::v0::Constant ::create (ov::element::i64 , {4 }, std::vector < int64_t > {d_inner ,1 ,1 ,d_conv }); 39auto c_reshaped = std::make_shared < ov::op::v1::Reshape > (c ,c_new_shape , false); 40 41// Depthwise 1D convolution: groups=d_inner, stride=1, no padding, no dilation 42// Input: [n_s, d_inner, ncs], Filter: [d_inner, 1, 1, d_conv] 43// Output: [n_s, d_inner, n_t] 44auto conv = std::make_shared < ov::op::v1::GroupConvolution > ( 45sx_reshaped ,c_reshaped , ov::Strides {1 }, ov::CoordinateDiff {0 }, ov::CoordinateDiff {0 }, ov::Strides {1 }); 46 47// Transpose from [n_s, d_inner, n_t] to [n_s, n_t, d_inner] 48auto perm = ov::op::v0::Constant ::create (ov::element::i64 , {3 }, std::vector < int64_t > {0 ,2 ,1 }); 49auto transposed = std::make_shared < ov::op::v1::Transpose > (conv ,perm ); 50 51// Reshape to output shape [1, n_s, n_t, d_inner] 52auto res = 53 std::make_shared < ov::op::v0::Unsqueeze > (transposed , ov::op::v0::Constant ::create (ov::element::i64 , {1 }, {0 })); 54 55return rename_outputs_with_suffix ({res },context .get_name ()); 56} 57 58}// namespace op 59}// namespace ggml 60}// namespace frontend 61}// namespace ov