| 91 | } |
| 92 | |
| 93 | static std::vector<std::string> tensor_names() { |
| 94 | std::vector<std::string> names = { |
| 95 | "causal_mask", |
| 96 | "text_token_embed", |
| 97 | "text_after_pos_embed", |
| 98 | "text_final_ln", |
| 99 | "text_features_2d", |
| 100 | }; |
| 101 | |
| 102 | for (int i = 0; i < 24; ++i) { |
| 103 | char name[64]; |
| 104 | |
| 105 | snprintf(name, sizeof(name), "text_block_%02d_after_ln1", i); |
| 106 | names.emplace_back(name); |
| 107 | |
| 108 | snprintf(name, sizeof(name), "text_block_%02d_qkv", i); |
| 109 | names.emplace_back(name); |
| 110 | |
| 111 | snprintf(name, sizeof(name), "text_block_%02d_attn_out", i); |
| 112 | names.emplace_back(name); |
| 113 | |
| 114 | snprintf(name, sizeof(name), "text_block_%02d_after_attn_residual", i); |
| 115 | names.emplace_back(name); |
| 116 | |
| 117 | snprintf(name, sizeof(name), "text_block_%02d_after_ln2", i); |
| 118 | names.emplace_back(name); |
| 119 | |
| 120 | snprintf(name, sizeof(name), "text_block_%02d_mlp_fc1", i); |
| 121 | names.emplace_back(name); |
| 122 | |
| 123 | snprintf(name, sizeof(name), "text_block_%02d_mlp_gelu", i); |
| 124 | names.emplace_back(name); |
| 125 | |
| 126 | snprintf(name, sizeof(name), "text_block_%02d_mlp_out", i); |
| 127 | names.emplace_back(name); |
| 128 | |
| 129 | snprintf(name, sizeof(name), "text_block_%02d_out", i); |
| 130 | names.emplace_back(name); |
| 131 | } |
| 132 | |
| 133 | return names; |
| 134 | } |
| 135 | |
| 136 | static void update_summary(summary_row & row, |
| 137 | const std::string & tensor_name, |