Skip to content

Commit dc704b7

Browse files
committed
llama : fix MTP graph reallocations when switching inputs
1 parent 3c809f4 commit dc704b7

1 file changed

Lines changed: 19 additions & 17 deletions

File tree

‎src/models/qwen35.cpp‎

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -521,27 +521,29 @@ llama_model_qwen35::graph_mtp::graph_mtp(const llama_model & model, const llm_gr
521521
inp->embd = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, hparams.n_embd_inp(), n_tokens);
522522
ggml_set_input(inp->embd);
523523

524-
// TODO: make static using `ggml_build_forward_select()`
525-
// see llm_graph_context::build_inp_embd() for reference
526-
ggml_tensor * tok_embd;
527524
ASSERT_EMBD_OR_TOKEN(ubatch);
528-
if (ubatch.token) {
529-
ggml_tensor * tok_embd_w = layer.nextn.embed_tokens ? layer.nextn.embed_tokens : model.tok_embd;
530-
531-
tok_embd = ggml_get_rows(ctx0, tok_embd_w, inp->tokens);
532-
533-
// a Hadamard-latent table stores rotated rows; restore the primal basis
534-
if (hdmd) {
535-
if (const auto it = hdmd->inv.find(tok_embd_w); it != hdmd->inv.end()) {
536-
tok_embd = llama_mul_mat_hadamard(ctx0, tok_embd, it->second.rot);
537-
if (it->second.signs) {
538-
tok_embd = ggml_mul(ctx0, tok_embd, it->second.signs);
539-
}
525+
ggml_tensor * tok_embd_w = layer.nextn.embed_tokens ? layer.nextn.embed_tokens : model.tok_embd;
526+
527+
ggml_tensor * tok_embd = ggml_get_rows(ctx0, tok_embd_w, inp->tokens);
528+
ggml_build_forward_order(gf, tok_embd);
529+
530+
// a Hadamard-latent table stores rotated rows; restore the primal basis
531+
if (hdmd) {
532+
if (const auto it = hdmd->inv.find(tok_embd_w); it != hdmd->inv.end()) {
533+
tok_embd = llama_mul_mat_hadamard(ctx0, tok_embd, it->second.rot);
534+
if (it->second.signs) {
535+
tok_embd = ggml_mul(ctx0, tok_embd, it->second.signs);
540536
}
541537
}
542-
} else {
543-
tok_embd = inp->embd;
544538
}
539+
540+
ggml_tensor * embd = inp->embd;
541+
if (tok_embd_w->buffer && !ggml_backend_buffer_is_host(tok_embd_w->buffer)) {
542+
embd = ggml_dup(ctx0, embd);
543+
}
544+
545+
ggml_tensor * inps[] = { tok_embd, embd };
546+
tok_embd = ggml_build_forward_select(gf, inps, 2, ubatch.token ? 0 : 1);
545547
cb(tok_embd, "mtp_tok_embd", il);
546548

547549
inp->h = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, hparams.n_embd, n_tokens);

0 commit comments

Comments
 (0)