Skip to content

Commit 1ec2a7b

Browse files
authored
Merge pull request #76 from tsisw/sakanaAI-issue-tsavorite
@FIR-1063 - llama.cpp/ggml/tsavorite support for sakanaAI Model
2 parents a44ca49 + 0841f09 commit 1ec2a7b

File tree

3 files changed

+46
-10
lines changed

3 files changed

+46
-10
lines changed

ggml/include/ggml-tsavorite.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ extern "C" {
5757

5858
enum ggml_tsavorite_input_tensors_count {
5959
TSAVORITE_UNARY_INPUT_TENSORS = 1,
60-
TSAVORITE_TWO_INPUT_TENSORS = 2
60+
TSAVORITE_TWO_INPUT_TENSORS = 2,
61+
TSAVORITE_IGNORE_TENSORS
6162
};
6263

6364
enum ggml_tsavorite_log_type {
@@ -141,6 +142,10 @@ enum ggml_tsavorite_kernel_type {
141142
GGML_TSAVORITE_KERNEL_TYPE_GEGLU_QUICK,
142143

143144
GGML_TSAVORITE_KERNEL_TYPE_SOFT_MAX,
145+
GGML_TSAVORITE_KERNEL_TYPE_RESHAPE,
146+
GGML_TSAVORITE_KERNEL_TYPE_VIEW,
147+
GGML_TSAVORITE_KERNEL_TYPE_PERMUTE,
148+
GGML_TSAVORITE_KERNEL_TYPE_TRANSPOSE,
144149

145150
GGML_TSAVORITE_KERNEL_TYPE_COUNT
146151
};

ggml/src/ggml-backend.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -979,10 +979,15 @@ void ggml_backend_sched_split_graph(ggml_backend_sched_t sched, struct ggml_cgra
979979
int cur_backend_id = -1;
980980
for (int i = 0; i < graph->n_nodes; i++) {
981981
struct ggml_tensor * node = graph->nodes[i];
982+
int * node_backend_id = &tensor_backend_id(node);
982983
if (ggml_is_view_op(node->op)) {
984+
if(node->src[0] && (sched->n_backends >= 1)) {
985+
*node_backend_id = sched->n_backends -1;
986+
node_backend_id = &tensor_backend_id(node->src[0]);
987+
*node_backend_id = sched->n_backends -1;
988+
}
983989
continue;
984990
}
985-
int * node_backend_id = &tensor_backend_id(node);
986991
if (*node_backend_id != -1) {
987992
if (*node_backend_id == sched->n_backends - 1) {
988993
// skip cpu (lowest prio backend)

ggml/src/ggml-tsavorite/ggml-tsavorite.cpp

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -820,10 +820,16 @@ static bool ggml_tsavorite_supports_op(const struct ggml_backend_tsavorite_devic
820820
case GGML_OP_SQRT:
821821
case GGML_OP_SQR:
822822
case GGML_OP_SIN:
823+
case GGML_OP_RESHAPE:
824+
case GGML_OP_VIEW:
825+
case GGML_OP_PERMUTE:
826+
case GGML_OP_TRANSPOSE:
827+
823828
case GGML_OP_RMS_NORM:
824-
#ifdef GGML_TARGET_POSIX
825-
case GGML_OP_SOFT_MAX:
826-
#endif /* GGML_TARGET_POSIX */
829+
830+
#ifdef GGML_TARGET_POSIX_DEBUG
831+
case GGML_OP_SOFT_MAX:
832+
#endif /* GGML_TARGET_POSIX_DEBUG */
827833
break;
828834
case GGML_OP_GLU:
829835
{
@@ -1064,6 +1070,20 @@ static enum ggml_status ggml_tsavorite_graph_compute(ggml_backend_t backend,
10641070
}
10651071
num_of_input_tensors = TSAVORITE_TWO_INPUT_TENSORS;
10661072
break;
1073+
case GGML_OP_RESHAPE:
1074+
kernel_type = GGML_TSAVORITE_KERNEL_TYPE_RESHAPE;
1075+
num_of_input_tensors = TSAVORITE_IGNORE_TENSORS;
1076+
break;
1077+
case GGML_OP_VIEW:
1078+
kernel_type = GGML_TSAVORITE_KERNEL_TYPE_VIEW;
1079+
num_of_input_tensors = TSAVORITE_IGNORE_TENSORS;
1080+
break;
1081+
case GGML_OP_PERMUTE:
1082+
num_of_input_tensors = TSAVORITE_IGNORE_TENSORS;
1083+
break;
1084+
case GGML_OP_TRANSPOSE:
1085+
num_of_input_tensors = TSAVORITE_IGNORE_TENSORS;
1086+
break;
10671087
case GGML_OP_UNARY:
10681088
switch (ggml_get_unary_op(node)) {
10691089
case GGML_UNARY_OP_NEG:
@@ -1094,10 +1114,10 @@ static enum ggml_status ggml_tsavorite_graph_compute(ggml_backend_t backend,
10941114
return GGML_STATUS_ABORTED;
10951115
}
10961116

1097-
if (!ctx->kernels[kernel_type].pipeline ||
1117+
if ((num_of_input_tensors != TSAVORITE_IGNORE_TENSORS) && (!ctx->kernels[kernel_type].pipeline ||
10981118
(!ctx->kernels[kernel_type].pipeline->_mlir_fptr_3_input[kernel_sub_type] &&
10991119
!ctx->kernels[kernel_type].pipeline->_mlir_fptr_2_input[kernel_sub_type] &&
1100-
!ctx->kernels[kernel_type].pipeline->_mlir_fptr_1_input[kernel_sub_type])) {
1120+
!ctx->kernels[kernel_type].pipeline->_mlir_fptr_1_input[kernel_sub_type]))) {
11011121
GGML_TSAVORITE_LOG_ERROR("Kernel Type %d, not supported \n", kernel_type);
11021122
return GGML_STATUS_ABORTED;
11031123
}
@@ -2129,10 +2149,16 @@ static bool ggml_backend_tsavorite_device_offload_op(ggml_backend_dev_t dev,
21292149
case GGML_OP_SQRT:
21302150
case GGML_OP_SQR:
21312151
case GGML_OP_SIN:
2152+
case GGML_OP_RESHAPE:
2153+
case GGML_OP_VIEW:
2154+
case GGML_OP_PERMUTE:
2155+
case GGML_OP_TRANSPOSE:
21322156
case GGML_OP_RMS_NORM:
2133-
#ifdef GGML_TARGET_POSIX
2134-
case GGML_OP_SOFT_MAX:
2135-
#endif /* GGML_TARGET_POSIX */
2157+
2158+
#ifdef GGML_TARGET_POSIX_DEBUG
2159+
case GGML_OP_SOFT_MAX:
2160+
#endif /* GGML_TARGET_POSIX_DEBUG */
2161+
21362162
break;
21372163
case GGML_OP_GLU:
21382164
{

0 commit comments

Comments
 (0)