add_tensor(model->output);
add_tensor(model->output_b);
add_tensor(model->output_norm_enc);
+ add_tensor(model->output_s);
+ add_tensor(model->output_in_s);
add_tensor(model->cls);
add_tensor(model->cls_b);
add_tensor(model->cls_out);
layer.ssm_beta_in_s = create_tensor(tn(LLM_TENSOR_SSM_BETA, "input_scale", i), {1}, TENSOR_NOT_REQUIRED);
}
}
+ // output scales
+ if (output && output->type == GGML_TYPE_NVFP4) {
+ // weight scale
+ if (!output_s) {
+ output_s = create_tensor(tn(LLM_TENSOR_OUTPUT, "scale"), {1}, TENSOR_NOT_REQUIRED);
+ }
+ // input scale
+ if (!output_in_s) {
+ output_in_s = create_tensor(tn(LLM_TENSOR_OUTPUT, "input_scale"), {1}, TENSOR_NOT_REQUIRED);
+ }
+ }
}
-
ml.done_getting_tensors();
+ GGML_ASSERT(!(output && tok_embd &&
+ strcmp(output->name, tok_embd->name) == 0 &&
+ output->type == GGML_TYPE_NVFP4));
// populate tensors_by_name
for (auto & [_, ctx_ptr] : ml.ctx_map) {
for (auto * cur = ggml_get_first_tensor(ctx_ptr.get()); cur != NULL; cur = ggml_get_next_tensor(ctx_ptr.get(), cur)) {
struct ggml_tensor * output_b = nullptr;
struct ggml_tensor * output_norm_enc = nullptr;
+
+ // NVFP4 per-tensor scale2, input_scale for LM head
+ struct ggml_tensor * output_s = nullptr;
+ struct ggml_tensor * output_in_s = nullptr;
+
// classifier
struct ggml_tensor * cls = nullptr;
struct ggml_tensor * cls_b = nullptr;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output_with_img_logits", -1);
// TODO: this suppresses the output of image tokens, which is required to enable text-only outputs.
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
ggml_build_forward_expand(gf, cur);
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
if (f_logit_scale) {
cur = ggml_scale(ctx0, cur, f_logit_scale);
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
if (f_logit_scale) {
cur = ggml_scale(ctx0, cur, f_logit_scale);
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
// final logit soft-capping
cur = ggml_scale(ctx0, cur, 1.0f / hparams.f_final_logit_softcapping);
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
if (hparams.f_final_logit_softcapping) {
cur = ggml_scale(ctx0, cur, 1.0f / hparams.f_final_logit_softcapping);
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
{
// final logit soft-capping
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
if (hparams.f_final_logit_softcapping) {
cur = ggml_scale(ctx0, cur, 1.0f / hparams.f_final_logit_softcapping);
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// Output projection
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
// For Granite architectures - scale logits
if (hparams.f_logit_scale) {
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
// For Granite architectures - scale logits
cur = ggml_scale(ctx0, cur, 1.0f / hparams.f_logit_scale);
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cur = ggml_scale(ctx0, cur, hparams.f_logit_scale);
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// Output projection
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
if constexpr (!embed) {
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "lmhead_scaling", -1);
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
if (model.output_b != nullptr) {
cur = ggml_add(ctx0, cur, model.output_b);
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output_no_bias", -1);
cur = ggml_add(ctx0, cur, model.output_b);
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
if (model.output_b != nullptr) {
cb(cur, "result_output_no_bias", -1);
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
// Explicitly mark as output tensor to ensure proper backend assignment
cur = build_norm(cur, model.output_norm, NULL, LLM_NORM_RMS, -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
res->t_logits = cur;
ggml_build_forward_expand(gf, cur);
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
if (model.output_b != nullptr) {
cur = ggml_add(ctx0, cur, model.output_b);
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// LM head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// LM head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// LM head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
cb(cur, "result_norm", -1);
res->t_embd = cur;
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;
LLM_NORM, -1);
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cur = ggml_add(ctx0, cur, model.output_b);
res->t_embd = cur;
// lm_head
- cur = build_lora_mm(model.output, cur);
+ cur = build_lora_mm(model.output, cur, model.output_s);
cb(cur, "result_output", -1);
res->t_logits = cur;