Skip to content

Commit 50f4281

Browse files
authored
llama : allow using iGPUs with --device (#15951)
* llama : allow using iGPUs with --device * mtmd : allow iGPU * rpc-server : allow iGPU
1 parent 55758b0 commit 50f4281

File tree

3 files changed

+8
-24
lines changed

3 files changed

+8
-24
lines changed

common/arg.cpp

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1304,7 +1304,7 @@ static std::vector<ggml_backend_dev_t> parse_device_list(const std::string & val
13041304
} else {
13051305
for (const auto & device : dev_names) {
13061306
auto * dev = ggml_backend_dev_by_name(device.c_str());
1307-
if (!dev || ggml_backend_dev_type(dev) != GGML_BACKEND_DEVICE_TYPE_GPU) {
1307+
if (!dev || ggml_backend_dev_type(dev) == GGML_BACKEND_DEVICE_TYPE_CPU) {
13081308
throw std::invalid_argument(string_format("invalid device: %s", device.c_str()));
13091309
}
13101310
devices.push_back(dev);
@@ -1314,7 +1314,7 @@ static std::vector<ggml_backend_dev_t> parse_device_list(const std::string & val
13141314
return devices;
13151315
}
13161316

1317-
static void add_rpc_devices(std::string servers) {
1317+
static void add_rpc_devices(const std::string & servers) {
13181318
auto rpc_servers = string_split<std::string>(servers, ',');
13191319
if (rpc_servers.empty()) {
13201320
throw std::invalid_argument("no RPC servers specified");
@@ -2516,24 +2516,15 @@ common_params_context common_params_parser_init(common_params & params, llama_ex
25162516
{"--list-devices"},
25172517
"print list of available devices and exit",
25182518
[](common_params &) {
2519-
std::vector<ggml_backend_dev_t> rpc_devices;
2520-
std::vector<ggml_backend_dev_t> all_devices;
2519+
std::vector<ggml_backend_dev_t> devices;
25212520
for (size_t i = 0; i < ggml_backend_dev_count(); ++i) {
25222521
auto * dev = ggml_backend_dev_get(i);
2523-
if (ggml_backend_dev_type(dev) == GGML_BACKEND_DEVICE_TYPE_GPU) {
2524-
ggml_backend_reg_t reg = ggml_backend_dev_backend_reg(dev);
2525-
if (ggml_backend_reg_name(reg) == std::string("RPC")) {
2526-
rpc_devices.push_back(dev);
2527-
} else {
2528-
all_devices.push_back(dev);
2529-
}
2522+
if (ggml_backend_dev_type(dev) != GGML_BACKEND_DEVICE_TYPE_CPU) {
2523+
devices.push_back(dev);
25302524
}
25312525
}
2532-
// insert RPC devices in front
2533-
all_devices.insert(all_devices.begin(), rpc_devices.begin(), rpc_devices.end());
25342526
printf("Available devices:\n");
2535-
for (size_t i = 0; i < all_devices.size(); ++i) {
2536-
auto * dev = all_devices[i];
2527+
for (auto * dev : devices) {
25372528
size_t free, total;
25382529
ggml_backend_dev_memory(dev, &free, &total);
25392530
printf(" %s: %s (%zu MiB, %zu MiB free)\n", ggml_backend_dev_name(dev), ggml_backend_dev_description(dev), total / 1024 / 1024, free / 1024 / 1024);

tools/mtmd/clip.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,7 @@ struct clip_ctx {
406406
}
407407
if (!backend) {
408408
backend = ggml_backend_init_by_type(GGML_BACKEND_DEVICE_TYPE_GPU, nullptr);
409+
backend = backend ? backend : ggml_backend_init_by_type(GGML_BACKEND_DEVICE_TYPE_IGPU, nullptr);
409410
}
410411
}
411412

tools/rpc/rpc-server.cpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -227,15 +227,7 @@ static ggml_backend_t create_backend(const rpc_server_params & params) {
227227
}
228228
}
229229

230-
// try to initialize a GPU backend first
231-
if (!backend) {
232-
backend = ggml_backend_init_by_type(GGML_BACKEND_DEVICE_TYPE_GPU, nullptr);
233-
}
234-
235-
// if there aren't GPU backends fallback to CPU backend
236-
if (!backend) {
237-
backend = ggml_backend_init_by_type(GGML_BACKEND_DEVICE_TYPE_CPU, nullptr);
238-
}
230+
backend = ggml_backend_init_best();
239231

240232
if (backend) {
241233
fprintf(stderr, "%s: using %s backend\n", __func__, ggml_backend_name(backend));

0 commit comments

Comments
 (0)