@@ -55,6 +55,10 @@ static bool ggml_debug(struct ggml_tensor * t, bool ask, void * user_data) {
5555 auto * cb_data = (callback_data *) user_data;
5656
5757 if (ask) {
58+ if (cb_data->parse_layer_name == " __LIST__" ) {
59+ std::cout << t->name << " \n " ;
60+ return false ;
61+ }
5862 return std::string (t->name ) == cb_data->parse_layer_name ;
5963 }
6064
@@ -137,11 +141,15 @@ static bool run(llama_context * ctx, const common_params & params, callback_data
137141int main (int argc, char **argv) {
138142 callback_data cb_data;
139143 common_params params;
144+ bool list_layers = false ;
145+ std::string list_layers_filter = " " ;
140146 std::string parse_layer_value;
141147 std::vector<char *> filtered_argv;
142148 std::vector<std::string> prompts;
143149
144150 filtered_argv.push_back (argv[0 ]);
151+ params.n_gpu_layers = 20 ;
152+
145153
146154 for (int i = 1 ; i < argc; i++) {
147155 std::string arg = argv[i];
@@ -165,11 +173,27 @@ int main(int argc, char **argv) {
165173 return 1 ;
166174 }
167175 continue ;
176+ } else if (arg == " --n-gpu-layers" ) {
177+ if (i + 1 < argc) {
178+ params.n_gpu_layers = std::stoi (argv[++i]); // override default
179+ } else {
180+ fprintf (stderr, " error: --n-gpu-layers requires an integer argument\n " );
181+ return 1 ;
182+ }
183+ continue ;
184+ }
185+ else if (arg == " --list-layers" ) {
186+ list_layers = true ;
187+ if (i + 1 < argc && argv[i + 1 ][0 ] != ' -' ) {
188+ list_layers_filter = argv[++i]; // take optional argument
189+ }
190+ continue ;
168191 }
169192
170193 filtered_argv.push_back (argv[i]);
171194 }
172195
196+
173197 if (!common_params_parse ((int )filtered_argv.size (), filtered_argv.data (), params, LLAMA_EXAMPLE_COMMON)) {
174198 return 1 ;
175199 }
@@ -187,6 +211,7 @@ int main(int argc, char **argv) {
187211 params.cb_eval_user_data = &cb_data;
188212 params.warmup = false ;
189213
214+
190215 common_init_result llama_init = common_init_from_params (params);
191216 llama_model * model = llama_init.model .get ();
192217 llama_context * ctx = llama_init.context .get ();
@@ -204,6 +229,18 @@ int main(int argc, char **argv) {
204229 prompts.emplace_back (" What is the capital of France?" ); // Fallback default
205230 }
206231
232+ if (list_layers) {
233+ cb_data.parse_layer_name = " __LIST__" ;
234+ params.n_predict = 1 ;
235+ params.prompt = " dummy" ; // any valid prompt to trigger eval
236+
237+ if (!run (ctx, params, cb_data)) {
238+ LOG_ERR (" Failed during layer listing run\n " );
239+ return 1 ;
240+ }
241+ return 0 ;
242+
243+ }
207244
208245 for (const auto & prompt : prompts) {
209246 LOG_INF (" Running prompt: %s\n " , prompt.c_str ());
0 commit comments