@@ -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