Skip to content

Commit d1dc8fb

Browse files
committed
accept --dev none to completely disable offloading
1 parent f4457cb commit d1dc8fb

File tree

1 file changed

+25
-26
lines changed

1 file changed

+25
-26
lines changed

common/arg.cpp

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
301322
bool 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

Comments
 (0)