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);
 | 
			
		||||
    // Load all known backends from dynamic libraries
 | 
			
		||||
    GGML_API void               ggml_backend_load_all(void);
 | 
			
		||||
    GGML_API void               ggml_backend_load_all_from_path(const char * dir_path);
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    // Backend scheduler
 | 
			
		||||
 
 | 
			
		||||
@@ -449,11 +449,21 @@ static std::string backend_filename_suffix() {
 | 
			
		||||
#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
 | 
			
		||||
     // TODO: search system paths
 | 
			
		||||
    std::vector<std::string> search_paths = { "./", get_executable_path() };
 | 
			
		||||
    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;
 | 
			
		||||
    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() {
 | 
			
		||||
    ggml_backend_load_all_from_path(nullptr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ggml_backend_load_all_from_path(const char * dir_path) {
 | 
			
		||||
#ifdef NDEBUG
 | 
			
		||||
    bool silent = true;
 | 
			
		||||
#else
 | 
			
		||||
    bool silent = false;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    ggml_backend_load_best("blas", silent);
 | 
			
		||||
    ggml_backend_load_best("cann", silent);
 | 
			
		||||
    ggml_backend_load_best("cuda", silent);
 | 
			
		||||
    ggml_backend_load_best("hip", silent);
 | 
			
		||||
    ggml_backend_load_best("kompute", silent);
 | 
			
		||||
    ggml_backend_load_best("metal", silent);
 | 
			
		||||
    ggml_backend_load_best("rpc", silent);
 | 
			
		||||
    ggml_backend_load_best("sycl", silent);
 | 
			
		||||
    ggml_backend_load_best("vulkan", silent);
 | 
			
		||||
    ggml_backend_load_best("musa", silent);
 | 
			
		||||
    ggml_backend_load_best("cpu", silent);
 | 
			
		||||
    ggml_backend_load_best("blas", silent, dir_path);
 | 
			
		||||
    ggml_backend_load_best("cann", silent, dir_path);
 | 
			
		||||
    ggml_backend_load_best("cuda", silent, dir_path);
 | 
			
		||||
    ggml_backend_load_best("hip", silent, dir_path);
 | 
			
		||||
    ggml_backend_load_best("kompute", silent, dir_path);
 | 
			
		||||
    ggml_backend_load_best("metal", silent, dir_path);
 | 
			
		||||
    ggml_backend_load_best("rpc", silent, dir_path);
 | 
			
		||||
    ggml_backend_load_best("sycl", silent, dir_path);
 | 
			
		||||
    ggml_backend_load_best("vulkan", silent, dir_path);
 | 
			
		||||
    ggml_backend_load_best("musa", silent, dir_path);
 | 
			
		||||
    ggml_backend_load_best("cpu", silent, dir_path);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user