@@ -1263,10 +1263,6 @@ static void do_init(size_t node_index, ggml_tensor * tensor, ggml_tensor_paralle
12631263
12641264 switch (tensor->op ) {
12651265 case GGML_OP_ROPE: {
1266- if (tensor->view_src ) {
1267- GGML_ABORT (" Tensor %s has view source tensors, which are not supported for tensor parallelism.\n " , tensor->name );
1268- }
1269-
12701266 auto src0_split_tensors = src0_extra->has_rejoin ? GGML_TP_SPLIT_NONE : src0_extra->split_tensors ;
12711267
12721268 if (src0_extra->split_tensors == GGML_TP_SPLIT_VIEW) {
@@ -1790,7 +1786,32 @@ static void do_init(size_t node_index, ggml_tensor * tensor, ggml_tensor_paralle
17901786 break ;
17911787 }
17921788
1793- case GGML_OP_VIEW:
1789+ case GGML_OP_VIEW: {
1790+ auto src0_split_tensors = src0_extra->has_rejoin ? GGML_TP_SPLIT_NONE : src0_extra->split_tensors ;
1791+ if (!src0_split_tensors) {
1792+ create_default_tensors ();
1793+ set_src_tensor (0 , GGML_TP_SPLIT_NONE);
1794+ }
1795+ else {
1796+ if (src0_split_tensors == GGML_TP_SPLIT_COLUMNS && src0->ne [0 ] == tensor->ne [0 ]) {
1797+ GGML_LOG_WARN (" UNUSED CODE PATH VIEW SPLIT COL\n " );
1798+ // column split tensor with no change to columns
1799+ create_column_split_tensors ();
1800+ set_src_tensor (0 , GGML_TP_SPLIT_COLUMNS);
1801+ }
1802+ else if (src0_split_tensors == GGML_TP_SPLIT_ROWS && src0->ne [1 ] == tensor->ne [1 ]) {
1803+ GGML_LOG_WARN (" UNUSED CODE PATH VIEW SPLIT ROW\n " );
1804+ // row split tensor with no change to rows
1805+ create_row_split_tensors ();
1806+ set_src_tensor (0 , GGML_TP_SPLIT_ROWS);
1807+ }
1808+ else {
1809+ has_init = true ;
1810+ extra->split_tensors = GGML_TP_SPLIT_VIEW;
1811+ }
1812+ }
1813+ break ;
1814+ }
17941815 case GGML_OP_PERMUTE:
17951816 case GGML_OP_RESHAPE: {
17961817 auto src0_split_tensors = src0_extra->has_rejoin ? GGML_TP_SPLIT_NONE : src0_extra->split_tensors ;
0 commit comments