Skip to content

Commit 9113f6b

Browse files
Feature: method to list possible layers to parse, set max number of layers to offload to gpu
1 parent d512b8b commit 9113f6b

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

examples/eval-callback/eval-callback.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
137141
int 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

Comments
 (0)