Mtmd: add a way to select device for vision encoder (#14236)

* Mtmd: add a way to select device for vision encoder

* simplify

* format

* Warn user if manual device selection failed

* initialize backend to nullptr
This commit is contained in:
stduhpf
2025-07-22 12:51:03 +02:00
committed by GitHub
parent e28c0b80c2
commit c8ade30036

View File

@ -367,8 +367,8 @@ struct clip_ctx {
std::vector<ggml_backend_t> backend_ptrs; std::vector<ggml_backend_t> backend_ptrs;
std::vector<ggml_backend_buffer_type_t> backend_buft; std::vector<ggml_backend_buffer_type_t> backend_buft;
ggml_backend_t backend; ggml_backend_t backend = nullptr;
ggml_backend_t backend_cpu; ggml_backend_t backend_cpu = nullptr;
ggml_backend_buffer_ptr buf; ggml_backend_buffer_ptr buf;
int max_nodes = 8192; int max_nodes = 8192;
@ -384,9 +384,18 @@ struct clip_ctx {
if (!backend_cpu) { if (!backend_cpu) {
throw std::runtime_error("failed to initialize CPU backend"); throw std::runtime_error("failed to initialize CPU backend");
} }
backend = ctx_params.use_gpu if (ctx_params.use_gpu) {
? ggml_backend_init_by_type(GGML_BACKEND_DEVICE_TYPE_GPU, nullptr) auto backend_name = std::getenv("MTMD_BACKEND_DEVICE");
: nullptr; if (backend_name != nullptr) {
backend = ggml_backend_init_by_name(backend_name, nullptr);
if (!backend) {
LOG_WRN("%s: Warning: Failed to initialize \"%s\" backend, falling back to default GPU backend\n", __func__, backend_name);
}
}
if (!backend) {
backend = ggml_backend_init_by_type(GGML_BACKEND_DEVICE_TYPE_GPU, nullptr);
}
}
if (backend) { if (backend) {
LOG_INF("%s: CLIP using %s backend\n", __func__, ggml_backend_name(backend)); LOG_INF("%s: CLIP using %s backend\n", __func__, ggml_backend_name(backend));