Skip to content

Commit 808d434

Browse files
committed
fixes
1 parent 1605605 commit 808d434

File tree

4 files changed

+56
-41
lines changed

4 files changed

+56
-41
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ endif
251251
#
252252

253253
# keep standard at C11 and C++11
254-
MK_CPPFLAGS = -Iggml/include -Iggml/src -Iinclude -Isrc -Icommon
254+
MK_CPPFLAGS = -Iggml/include -Iggml/src -Iinclude -Isrc -Icommon -DGGML_USE_CPU
255255
MK_CFLAGS = -std=c11 -fPIC
256256
MK_CXXFLAGS = -std=c++11 -fPIC
257257
MK_NVCCFLAGS = -std=c++11

examples/eval-callback/CMakeLists.txt

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ target_link_libraries(${TARGET} PRIVATE common llama ${CMAKE_THREAD_LIBS_INIT})
55
target_compile_features(${TARGET} PRIVATE cxx_std_11)
66

77
set(TEST_TARGET test-eval-callback)
8-
add_test(NAME ${TEST_TARGET} COMMAND llama-eval-callback --hf-repo ggml-org/models --hf-file tinyllamas/stories260K.gguf --model stories260K.gguf --prompt hello --seed 42 -ngl 0)
8+
add_test(NAME ${TEST_TARGET}
9+
COMMAND llama-eval-callback --hf-repo ggml-org/models --hf-file tinyllamas/stories260K.gguf --model stories260K.gguf --prompt hello --seed 42 -ngl 0
10+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../) # HACK for dl backends
911
set_property(TEST ${TEST_TARGET} PROPERTY LABELS eval-callback curl)

ggml/src/ggml-backend-reg.cpp

+51-38
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@
55
#include <cstring>
66
#include <vector>
77

8+
#ifdef _WIN32
9+
# define WIN32_LEAN_AND_MEAN
10+
# ifndef NOMINMAX
11+
# define NOMINMAX
12+
# endif
13+
# include <windows.h>
14+
#else
15+
# include <dlfcn.h>
16+
#endif
17+
18+
819
// Backend registry
920
#ifdef GGML_USE_CPU
1021
#include "ggml-cpu.h"
@@ -90,7 +101,8 @@ struct ggml_backend_registry {
90101

91102
~ggml_backend_registry() {
92103
while (!backends.empty()) {
93-
ggml_backend_unload(backends.back().reg);
104+
// use silent since the log system may have been destroyed at this point
105+
unload_backend(backends.back().reg, true);
94106
}
95107
}
96108

@@ -115,6 +127,43 @@ struct ggml_backend_registry {
115127
#endif
116128
devices.push_back(device);
117129
}
130+
131+
void unload_backend(ggml_backend_reg_t reg, bool silent) {
132+
if (!silent) {
133+
GGML_LOG_INFO("%s: unloading %s backend\n", __func__, ggml_backend_reg_name(reg));
134+
}
135+
auto it = std::find_if(backends.begin(), backends.end(),
136+
[reg](ggml_backend_reg_entry entry) { return entry.reg == reg; });
137+
138+
if (it == backends.end()) {
139+
if (!silent) {
140+
GGML_LOG_ERROR("%s: backend not found\n", __func__);
141+
}
142+
return;
143+
}
144+
145+
if (!silent) {
146+
GGML_LOG_DEBUG("%s: unloading %s backend\n", __func__, ggml_backend_reg_name(reg));
147+
}
148+
149+
// remove devices
150+
devices.erase(
151+
std::remove_if(devices.begin(), devices.end(),
152+
[reg](ggml_backend_dev_t dev) { return ggml_backend_dev_backend_reg(dev) == reg; }),
153+
devices.end());
154+
155+
// unload library
156+
if (it->handle) {
157+
#ifdef _WIN32
158+
FreeLibrary((HMODULE) it->handle);
159+
#else
160+
dlclose(it->handle);
161+
#endif
162+
}
163+
164+
// remove backend
165+
backends.erase(it);
166+
}
118167
};
119168

120169
static ggml_backend_registry & get_reg() {
@@ -209,16 +258,6 @@ ggml_backend_t ggml_backend_init_best(void) {
209258
return ggml_backend_dev_init(dev, nullptr);
210259
}
211260

212-
#ifdef _WIN32
213-
# define WIN32_LEAN_AND_MEAN
214-
# ifndef NOMINMAX
215-
# define NOMINMAX
216-
# endif
217-
# include <windows.h>
218-
#else
219-
# include <dlfcn.h>
220-
#endif
221-
222261
typedef ggml_backend_reg_t (*ggml_backend_init_t)(void);
223262

224263
ggml_backend_reg_t ggml_backend_load(const char * path) {
@@ -264,33 +303,7 @@ ggml_backend_reg_t ggml_backend_load(const char * path) {
264303
}
265304

266305
void ggml_backend_unload(ggml_backend_reg_t reg) {
267-
auto it = std::find_if(get_reg().backends.begin(), get_reg().backends.end(),
268-
[reg](ggml_backend_reg_entry entry) { return entry.reg == reg; });
269-
270-
if (it == get_reg().backends.end()) {
271-
GGML_LOG_ERROR("%s: backend not found\n", __func__);
272-
return;
273-
}
274-
275-
GGML_LOG_DEBUG("%s: unloading %s backend\n", __func__, ggml_backend_reg_name(reg));
276-
277-
// remove devices
278-
get_reg().devices.erase(
279-
std::remove_if(get_reg().devices.begin(), get_reg().devices.end(),
280-
[reg](ggml_backend_dev_t dev) { return ggml_backend_dev_backend_reg(dev) == reg; }),
281-
get_reg().devices.end());
282-
283-
// unload library
284-
if (it->handle) {
285-
#ifdef _WIN32
286-
FreeLibrary((HMODULE) it->handle);
287-
#else
288-
dlclose(it->handle);
289-
#endif
290-
}
291-
292-
// remove backend
293-
get_reg().backends.erase(it);
306+
get_reg().unload_backend(reg, true);
294307
}
295308

296309
void ggml_backend_load_all() {

src/llama.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -22209,7 +22209,7 @@ int llama_split_prefix(char * dest, size_t maxlen, const char * split_path, int
2220922209
const char * llama_print_system_info(void) {
2221022210
static std::string s;
2221122211

22212-
for (int i = 0; i < ggml_backend_reg_count(); i++) {
22212+
for (size_t i = 0; i < ggml_backend_reg_count(); i++) {
2221322213
auto * reg = ggml_backend_reg_get(i);
2221422214
auto * get_features_fn = (ggml_backend_get_features_t) ggml_backend_reg_get_proc_address(reg, "ggml_backend_get_features");
2221522215
if (get_features_fn) {

0 commit comments

Comments
 (0)