@@ -298,6 +298,27 @@ static void common_params_print_usage(common_params_context & ctx_arg) {
298
298
print_options (specific_options);
299
299
}
300
300
301
+ static std::vector<ggml_backend_dev_t > parse_device_list (const std::string & value) {
302
+ std::vector<ggml_backend_dev_t > devices;
303
+ auto dev_names = string_split<std::string>(value, ' ,' );
304
+ if (dev_names.empty ()) {
305
+ throw std::invalid_argument (" no devices specified" );
306
+ }
307
+ if (dev_names.size () == 1 && dev_names[0 ] == " none" ) {
308
+ devices.push_back (nullptr );
309
+ } else {
310
+ for (const auto & device : dev_names) {
311
+ auto * dev = ggml_backend_dev_by_name (device.c_str ());
312
+ if (!dev || ggml_backend_dev_type (dev) != GGML_BACKEND_DEVICE_TYPE_GPU) {
313
+ throw std::invalid_argument (string_format (" invalid device: %s" , device.c_str ()));
314
+ }
315
+ devices.push_back (dev);
316
+ }
317
+ devices.push_back (nullptr );
318
+ }
319
+ return devices;
320
+ }
321
+
301
322
bool common_params_parse (int argc, char ** argv, common_params & params, llama_example ex, void (*print_usage)(int , char **)) {
302
323
auto ctx_arg = common_params_parser_init (params, ex, print_usage);
303
324
const common_params params_org = ctx_arg.params ; // the example can modify the default params
@@ -1314,21 +1335,10 @@ common_params_context common_params_parser_init(common_params & params, llama_ex
1314
1335
).set_env (" LLAMA_ARG_NUMA" ));
1315
1336
add_opt (common_arg (
1316
1337
{" -dev" , " --device" }, " <dev1,dev2,..>" ,
1317
- " comma-separated list of devices to use for offloading\n "
1338
+ " comma-separated list of devices to use for offloading (none = don't offload) \n "
1318
1339
" use --list-devices to see a list of available devices" ,
1319
1340
[](common_params & params, const std::string & value) {
1320
- auto devices = string_split<std::string>(value, ' ,' );
1321
- if (devices.empty ()) {
1322
- throw std::invalid_argument (" no devices specified" );
1323
- }
1324
- for (const auto & device : devices) {
1325
- auto * dev = ggml_backend_dev_by_name (device.c_str ());
1326
- if (!dev || ggml_backend_dev_type (dev) != GGML_BACKEND_DEVICE_TYPE_GPU) {
1327
- throw std::invalid_argument (string_format (" invalid device: %s" , device.c_str ()));
1328
- }
1329
- params.devices .push_back (dev);
1330
- }
1331
- params.devices .push_back (nullptr );
1341
+ params.devices = parse_device_list (value);
1332
1342
}
1333
1343
).set_env (" LLAMA_ARG_DEVICES" ));
1334
1344
add_opt (common_arg (
@@ -2074,21 +2084,10 @@ common_params_context common_params_parser_init(common_params & params, llama_ex
2074
2084
).set_examples ({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER}));
2075
2085
add_opt (common_arg (
2076
2086
{" -devd" , " --device-draft" }, " <dev1,dev2,..>" ,
2077
- " comma-separated list of devices to use for offloading the draft model\n "
2087
+ " comma-separated list of devices to use for offloading the draft model (none = don't offload) \n "
2078
2088
" use --list-devices to see a list of available devices" ,
2079
2089
[](common_params & params, const std::string & value) {
2080
- auto devices = string_split<std::string>(value, ' ,' );
2081
- if (devices.empty ()) {
2082
- throw std::invalid_argument (" no devices specified" );
2083
- }
2084
- for (const auto & device : devices) {
2085
- auto * dev = ggml_backend_dev_by_name (device.c_str ());
2086
- if (!dev || ggml_backend_dev_type (dev) != GGML_BACKEND_DEVICE_TYPE_GPU) {
2087
- throw std::invalid_argument (string_format (" invalid device: %s" , device.c_str ()));
2088
- }
2089
- params.speculative .devices .push_back (dev);
2090
- }
2091
- params.speculative .devices .push_back (nullptr );
2090
+ params.speculative .devices = parse_device_list (value);
2092
2091
}
2093
2092
).set_examples ({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER}));
2094
2093
add_opt (common_arg (
0 commit comments