ggml_cuda_kernel_launch(topk_moe_cuda<256, has_bias>, launch_params,
logits, weights, ids, bias, n_rows, n_expert_used, clamp_val, scale_val, config);
break;
+ case 288: // StepFun 3.7
+ ggml_cuda_kernel_launch(topk_moe_cuda<288, has_bias>, launch_params,
+ logits, weights, ids, bias, n_rows, n_expert_used, clamp_val, scale_val, config);
+ break;
case 512:
ggml_cuda_kernel_launch(topk_moe_cuda<512, has_bias>, launch_params,
logits, weights, ids, bias, n_rows, n_expert_used, clamp_val, scale_val, config);
const ggml_tensor * weights,
const ggml_tensor * logits,
const ggml_tensor * ids) {
+ // must match an instantiation of launch_topk_moe_cuda: a power of 2 up to 512,
+ // or one of the non-power-of-2 expert counts of supported models
const int n_expert = ids->nb[1] / ids->nb[0];
- if (((n_expert & (n_expert - 1)) != 0 || n_expert > 512) && n_expert != 576) {
+ if (((n_expert & (n_expert - 1)) != 0 || n_expert > 512) && n_expert != 288 && n_expert != 576) {
return false;
}
test_cases.emplace_back(new test_topk_moe({128, 1, 1, 1}, 128, with_norm, bias_probs, gate, scale_w));
test_cases.emplace_back(new test_topk_moe({129, 1, 1, 1}, 128, with_norm, bias_probs, gate, scale_w));
test_cases.emplace_back(new test_topk_moe({160, 4, 1, 1}, 160, with_norm, bias_probs, gate, scale_w));
+ test_cases.emplace_back(new test_topk_moe({288, 22, 1, 1}, 8, with_norm, bias_probs, gate, scale_w)); // Used by StepFun 3.7
}
}
}