std::vector<ggml_backend_t> backend_ptrs;
std::vector<ggml_backend_buffer_type_t> backend_buft;
- ggml_backend_t backend;
- ggml_backend_t backend_cpu;
+ ggml_backend_t backend = nullptr;
+ ggml_backend_t backend_cpu = nullptr;
ggml_backend_buffer_ptr buf;
int max_nodes = 8192;
if (!backend_cpu) {
throw std::runtime_error("failed to initialize CPU backend");
}
- backend = ctx_params.use_gpu
- ? ggml_backend_init_by_type(GGML_BACKEND_DEVICE_TYPE_GPU, nullptr)
- : nullptr;
+ if (ctx_params.use_gpu) {
+ auto backend_name = std::getenv("MTMD_BACKEND_DEVICE");
+ 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) {
LOG_INF("%s: CLIP using %s backend\n", __func__, ggml_backend_name(backend));