Skip to content

Commit c8ade30

Browse files
authored
Mtmd: add a way to select device for vision encoder (ggml-org#14236)
* Mtmd: add a way to select device for vision encoder * simplify * format * Warn user if manual device selection failed * initialize backend to nullptr
1 parent e28c0b8 commit c8ade30

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

tools/mtmd/clip.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -367,8 +367,8 @@ struct clip_ctx {
367367
std::vector<ggml_backend_t> backend_ptrs;
368368
std::vector<ggml_backend_buffer_type_t> backend_buft;
369369

370-
ggml_backend_t backend;
371-
ggml_backend_t backend_cpu;
370+
ggml_backend_t backend = nullptr;
371+
ggml_backend_t backend_cpu = nullptr;
372372
ggml_backend_buffer_ptr buf;
373373

374374
int max_nodes = 8192;
@@ -384,9 +384,18 @@ struct clip_ctx {
384384
if (!backend_cpu) {
385385
throw std::runtime_error("failed to initialize CPU backend");
386386
}
387-
backend = ctx_params.use_gpu
388-
? ggml_backend_init_by_type(GGML_BACKEND_DEVICE_TYPE_GPU, nullptr)
389-
: nullptr;
387+
if (ctx_params.use_gpu) {
388+
auto backend_name = std::getenv("MTMD_BACKEND_DEVICE");
389+
if (backend_name != nullptr) {
390+
backend = ggml_backend_init_by_name(backend_name, nullptr);
391+
if (!backend) {
392+
LOG_WRN("%s: Warning: Failed to initialize \"%s\" backend, falling back to default GPU backend\n", __func__, backend_name);
393+
}
394+
}
395+
if (!backend) {
396+
backend = ggml_backend_init_by_type(GGML_BACKEND_DEVICE_TYPE_GPU, nullptr);
397+
}
398+
}
390399

391400
if (backend) {
392401
LOG_INF("%s: CLIP using %s backend\n", __func__, ggml_backend_name(backend));

0 commit comments

Comments
 (0)