@@ -298,6 +298,27 @@ static void common_params_print_usage(common_params_context & ctx_arg) {
298298 print_options (specific_options);
299299}
300300
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+
301322bool common_params_parse (int argc, char ** argv, common_params & params, llama_example ex, void (*print_usage)(int , char **)) {
302323 auto ctx_arg = common_params_parser_init (params, ex, print_usage);
303324 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
13141335 ).set_env (" LLAMA_ARG_NUMA" ));
13151336 add_opt (common_arg (
13161337 {" -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 "
13181339 " use --list-devices to see a list of available devices" ,
13191340 [](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);
13321342 }
13331343 ).set_env (" LLAMA_ARG_DEVICES" ));
13341344 add_opt (common_arg (
@@ -2074,21 +2084,10 @@ common_params_context common_params_parser_init(common_params & params, llama_ex
20742084 ).set_examples ({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER}));
20752085 add_opt (common_arg (
20762086 {" -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 "
20782088 " use --list-devices to see a list of available devices" ,
20792089 [](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);
20922091 }
20932092 ).set_examples ({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER}));
20942093 add_opt (common_arg (
0 commit comments