mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-11-03 09:22:01 +00:00 
			
		
		
		
	ggml: load all backends from a user-provided search path (#10699)
* feat: load all backends from a user-provided search path * fix: Windows search path * refactor: rename `ggml_backend_load_all_in_search_path` to `ggml_backend_load_all_from_path` * refactor: rename `search_path` to `dir_path` * fix: change `NULL` to `nullptr` Co-authored-by: Diego Devesa <slarengh@gmail.com> * fix: change `NULL` to `nullptr` --------- Co-authored-by: Diego Devesa <slarengh@gmail.com>
This commit is contained in:
		@@ -228,6 +228,7 @@ extern "C" {
 | 
				
			|||||||
    GGML_API void               ggml_backend_unload(ggml_backend_reg_t reg);
 | 
					    GGML_API void               ggml_backend_unload(ggml_backend_reg_t reg);
 | 
				
			||||||
    // Load all known backends from dynamic libraries
 | 
					    // Load all known backends from dynamic libraries
 | 
				
			||||||
    GGML_API void               ggml_backend_load_all(void);
 | 
					    GGML_API void               ggml_backend_load_all(void);
 | 
				
			||||||
 | 
					    GGML_API void               ggml_backend_load_all_from_path(const char * dir_path);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    // Backend scheduler
 | 
					    // Backend scheduler
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -449,11 +449,21 @@ static std::string backend_filename_suffix() {
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static ggml_backend_reg_t ggml_backend_load_best(const char * name, bool silent) {
 | 
					static ggml_backend_reg_t ggml_backend_load_best(const char * name, bool silent, const char * user_search_path) {
 | 
				
			||||||
    // enumerate all the files that match [lib]ggml-name-*.[so|dll] in the search paths
 | 
					    // enumerate all the files that match [lib]ggml-name-*.[so|dll] in the search paths
 | 
				
			||||||
     // TODO: search system paths
 | 
					     // TODO: search system paths
 | 
				
			||||||
    std::vector<std::string> search_paths = { "./", get_executable_path() };
 | 
					 | 
				
			||||||
    std::string file_prefix = backend_filename_prefix() + name + "-";
 | 
					    std::string file_prefix = backend_filename_prefix() + name + "-";
 | 
				
			||||||
 | 
					    std::vector<std::string> search_paths;
 | 
				
			||||||
 | 
					    if (user_search_path == nullptr) {
 | 
				
			||||||
 | 
					        search_paths.push_back("./");
 | 
				
			||||||
 | 
					        search_paths.push_back(get_executable_path());
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					#if defined(_WIN32)
 | 
				
			||||||
 | 
					        search_paths.push_back(std::string(user_search_path) + "\\");
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        search_paths.push_back(std::string(user_search_path) + "/");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int best_score = 0;
 | 
					    int best_score = 0;
 | 
				
			||||||
    std::string best_path;
 | 
					    std::string best_path;
 | 
				
			||||||
@@ -509,21 +519,25 @@ static ggml_backend_reg_t ggml_backend_load_best(const char * name, bool silent)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ggml_backend_load_all() {
 | 
					void ggml_backend_load_all() {
 | 
				
			||||||
 | 
					    ggml_backend_load_all_from_path(nullptr);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ggml_backend_load_all_from_path(const char * dir_path) {
 | 
				
			||||||
#ifdef NDEBUG
 | 
					#ifdef NDEBUG
 | 
				
			||||||
    bool silent = true;
 | 
					    bool silent = true;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    bool silent = false;
 | 
					    bool silent = false;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ggml_backend_load_best("blas", silent);
 | 
					    ggml_backend_load_best("blas", silent, dir_path);
 | 
				
			||||||
    ggml_backend_load_best("cann", silent);
 | 
					    ggml_backend_load_best("cann", silent, dir_path);
 | 
				
			||||||
    ggml_backend_load_best("cuda", silent);
 | 
					    ggml_backend_load_best("cuda", silent, dir_path);
 | 
				
			||||||
    ggml_backend_load_best("hip", silent);
 | 
					    ggml_backend_load_best("hip", silent, dir_path);
 | 
				
			||||||
    ggml_backend_load_best("kompute", silent);
 | 
					    ggml_backend_load_best("kompute", silent, dir_path);
 | 
				
			||||||
    ggml_backend_load_best("metal", silent);
 | 
					    ggml_backend_load_best("metal", silent, dir_path);
 | 
				
			||||||
    ggml_backend_load_best("rpc", silent);
 | 
					    ggml_backend_load_best("rpc", silent, dir_path);
 | 
				
			||||||
    ggml_backend_load_best("sycl", silent);
 | 
					    ggml_backend_load_best("sycl", silent, dir_path);
 | 
				
			||||||
    ggml_backend_load_best("vulkan", silent);
 | 
					    ggml_backend_load_best("vulkan", silent, dir_path);
 | 
				
			||||||
    ggml_backend_load_best("musa", silent);
 | 
					    ggml_backend_load_best("musa", silent, dir_path);
 | 
				
			||||||
    ggml_backend_load_best("cpu", silent);
 | 
					    ggml_backend_load_best("cpu", silent, dir_path);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user