@@ -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