1#include "models.h"
2
3llm_build_wavtokenizer_dec::llm_build_wavtokenizer_dec(const llama_model & model, const llm_graph_params & params) : llm_graph_context(params) {
4 ggml_tensor * cur;
5 ggml_tensor * inpL;
6
7 inpL = build_inp_embd(tok_embd: model.tok_embd);
8
9 cur = ggml_cont(ctx: ctx0, a: ggml_transpose(ctx: ctx0, a: inpL));
10
11 cur = ggml_conv_1d_ph(ctx: ctx0, a: model.conv1d, b: cur, s: 1, d: 1);
12 cur = ggml_add(ctx: ctx0, a: cur, b: model.conv1d_b);
13
14 // posnet
15 for (uint32_t il = 0; il < hparams.posnet.n_layer; ++il) {
16 const auto & layer = model.layers[il].posnet;
17
18 inpL = cur;
19
20 switch (il) {
21 case 0:
22 case 1:
23 case 3:
24 case 4:
25 {
26 cur = build_norm(cur,
27 mw: layer.norm1,
28 mb: layer.norm1_b,
29 type: LLM_NORM_GROUP, il: 0);
30
31 cur = ggml_mul(ctx: ctx0, a: ggml_sigmoid(ctx: ctx0, a: cur), b: cur);
32
33 cur = ggml_conv_1d_ph(ctx: ctx0, a: layer.conv1, b: cur, s: 1, d: 1);
34 cur = ggml_add(ctx: ctx0, a: cur, b: layer.conv1_b);
35
36 cur = build_norm(cur,
37 mw: layer.norm2,
38 mb: layer.norm2_b,
39 type: LLM_NORM_GROUP, il: 0);
40
41 cur = ggml_mul(ctx: ctx0, a: ggml_sigmoid(ctx: ctx0, a: cur), b: cur);
42
43 cur = ggml_conv_1d_ph(ctx: ctx0, a: layer.conv2, b: cur, s: 1, d: 1);
44 cur = ggml_add(ctx: ctx0, a: cur, b: layer.conv2_b);
45
46 cur = ggml_add(ctx: ctx0, a: cur, b: inpL);
47 } break;
48 case 2:
49 {
50 cur = build_norm(cur,
51 mw: layer.attn_norm,
52 mb: layer.attn_norm_b,
53 type: LLM_NORM_GROUP, il: 0);
54
55 ggml_tensor * q;
56 ggml_tensor * k;
57 ggml_tensor * v;
58
59 q = ggml_conv_1d_ph(ctx: ctx0, a: layer.attn_q, b: cur, s: 1, d: 1);
60 k = ggml_conv_1d_ph(ctx: ctx0, a: layer.attn_k, b: cur, s: 1, d: 1);
61 v = ggml_conv_1d_ph(ctx: ctx0, a: layer.attn_v, b: cur, s: 1, d: 1);
62
63 q = ggml_add(ctx: ctx0, a: q, b: layer.attn_q_b);
64 k = ggml_add(ctx: ctx0, a: k, b: layer.attn_k_b);
65 v = ggml_add(ctx: ctx0, a: v, b: layer.attn_v_b);
66
67 q = ggml_cont(ctx: ctx0, a: ggml_transpose(ctx: ctx0, a: q));
68 k = ggml_cont(ctx: ctx0, a: ggml_transpose(ctx: ctx0, a: k));
69
70 ggml_tensor * kq = ggml_mul_mat(ctx: ctx0, a: k, b: q);
71
72 kq = ggml_soft_max_ext(ctx: ctx0, a: kq, mask: nullptr, scale: 1.0f/sqrtf(x: float(hparams.posnet.n_embd)), max_bias: 0.0f);
73
74 cur = ggml_mul_mat(ctx: ctx0, a: kq, b: v);
75
76 cur = ggml_conv_1d_ph(ctx: ctx0, a: layer.attn_o, b: cur, s: 1, d: 1);
77 cur = ggml_add(ctx: ctx0, a: cur, b: layer.attn_o_b);
78
79 cur = ggml_add(ctx: ctx0, a: cur, b: inpL);
80 } break;
81 case 5:
82 {
83 cur = build_norm(cur,
84 mw: layer.norm,
85 mb: layer.norm_b,
86 type: LLM_NORM_GROUP, il: 0);
87 } break;
88 default: GGML_ABORT("unknown posnet layer");
89 };
90 }
91 cur = ggml_cont(ctx: ctx0, a: ggml_transpose(ctx: ctx0, a: cur));
92
93 cur = build_norm(cur,
94 mw: model.tok_norm,
95 mb: model.tok_norm_b,
96 type: LLM_NORM, il: -1);
97
98 cur = ggml_cont(ctx: ctx0, a: ggml_transpose(ctx: ctx0, a: cur));
99
100 inpL = cur;
101
102 // convnext
103 for (uint32_t il = 0; il < hparams.convnext.n_layer; ++il) {
104 const auto & layer = model.layers[il].convnext;
105
106 cur = inpL;
107
108 cur = ggml_conv_1d_dw_ph(ctx: ctx0, a: layer.dw, b: cur, s0: 1, d0: 1);
109 cur = ggml_add(ctx: ctx0, a: cur, b: layer.dw_b);
110
111 cur = ggml_cont(ctx: ctx0, a: ggml_transpose(ctx: ctx0, a: cur));
112
113 cur = build_norm(cur,
114 mw: layer.norm,
115 mb: layer.norm_b,
116 type: LLM_NORM, il: -1);
117
118 cur = build_ffn(cur,
119 up: layer.pw1, up_b: layer.pw1_b, NULL,
120 NULL, NULL, NULL,
121 down: layer.pw2, down_b: layer.pw2_b, NULL,
122 NULL,
123 type_op: LLM_FFN_GELU, type_gate: LLM_FFN_SEQ, il);
124
125 cur = ggml_mul(ctx: ctx0, a: cur, b: layer.gamma);
126
127 cur = ggml_cont(ctx: ctx0, a: ggml_transpose(ctx: ctx0, a: cur));
128
129 inpL = ggml_add(ctx: ctx0, a: cur, b: inpL);
130 }
131 cur = inpL;
132
133 cur = ggml_cont(ctx: ctx0, a: ggml_transpose(ctx: ctx0, a: cur));
134
135 cur = build_norm(cur,
136 mw: model.output_norm,
137 mb: model.output_norm_b,
138 type: LLM_NORM, il: -1);
139
140 // lm_head
141 cur = build_lora_mm(w: model.output, cur);
142
143 cur = ggml_add(ctx: ctx0, a: cur, b: model.output_b);
144
145 cb(cur, name: "result_embd", il: -1);
146 res->t_embd = cur;
147
148 ggml_build_forward_expand(cgraph: gf, tensor: cur);
149}
150