Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
ollama
Commits
6600bd7d
Unverified
Commit
6600bd7d
authored
Feb 13, 2025
by
Jeffrey Morgan
Committed by
GitHub
Feb 13, 2025
Browse files
ml/backend/ggml: stable sort devices by score (#9081)
parent
ed443a03
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
18 additions
and
18 deletions
+18
-18
llama/patches/0014-sort-devices-by-score.patch
llama/patches/0014-sort-devices-by-score.patch
+11
-11
llama/patches/0017-try-catch-backend-load.patch
llama/patches/0017-try-catch-backend-load.patch
+1
-1
ml/backend/ggml/ggml/src/ggml-backend-reg.cpp
ml/backend/ggml/ggml/src/ggml-backend-reg.cpp
+6
-6
No files found.
llama/patches/0014-sort-devices-by-score.patch
View file @
6600bd7d
...
...
@@ -8,7 +8,7 @@ Subject: [PATCH] sort devices by score
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/ggml/src/ggml-backend-reg.cpp b/ggml/src/ggml-backend-reg.cpp
index 899d16f2..
ac5cda07
100644
index 899d16f2..
135f7df0
100644
--- a/ggml/src/ggml-backend-reg.cpp
+++ b/ggml/src/ggml-backend-reg.cpp
@@ -150,7 +150,7 @@
struct ggml_backend_reg_entry {
...
...
@@ -29,7 +29,7 @@ index 899d16f2..ac5cda07 100644
if (!reg) {
return;
}
@@ -206,15 +206,
15
@@
struct ggml_backend_registry {
@@ -206,15 +206,
20
@@
struct ggml_backend_registry {
#endif
backends.push_back({ reg, std::move(handle) });
for (size_t i = 0; i < ggml_backend_reg_dev_count(reg); i++) {
...
...
@@ -45,10 +45,15 @@ index 899d16f2..ac5cda07 100644
#endif
- devices.push_back(device);
+ devices.push_back({device, score});
+ std::stable_sort(devices.begin(), devices.end(),
+ [](const auto & a, const auto & b) {
+ return a.second > b.second;
+ }
+ );
}
ggml_backend_reg_t load_backend(const std::wstring & path, bool silent) {
@@ -257,7 +2
57
,7 @@
struct ggml_backend_registry {
@@ -257,7 +2
62
,7 @@
struct ggml_backend_registry {
GGML_LOG_INFO("%s: loaded %s backend from %s\n", __func__, ggml_backend_reg_name(reg), utf16_to_utf8(path).c_str());
...
...
@@ -57,7 +62,7 @@ index 899d16f2..ac5cda07 100644
return reg;
}
@@ -280,7 +28
0
,7 @@
struct ggml_backend_registry {
@@ -280,7 +28
5
,7 @@
struct ggml_backend_registry {
// remove devices
devices.erase(
std::remove_if(devices.begin(), devices.end(),
...
...
@@ -66,17 +71,12 @@ index 899d16f2..ac5cda07 100644
devices.end());
// remove backend
@@ -338,7 +3
38,12
@@
size_t ggml_backend_dev_count() {
@@ -338,7 +3
43,7
@@
size_t ggml_backend_dev_count() {
ggml_backend_dev_t ggml_backend_dev_get(size_t index) {
GGML_ASSERT(index < ggml_backend_dev_count());
- return get_reg().devices[index];
+ auto devices = get_reg().devices;
+ if (!std::is_heap(devices.begin(), devices.end())) {
+ std::make_heap(devices.begin(), devices.end(), [](const auto & a, const auto & b) { return a.second < b.second; });
+ }
+
+ return devices[index].first;
+ return get_reg().devices[index].first;
}
ggml_backend_dev_t ggml_backend_dev_by_name(const char * name) {
llama/patches/0017-try-catch-backend-load.patch
View file @
6600bd7d
...
...
@@ -8,7 +8,7 @@ Subject: [PATCH] try/catch backend load
1 file changed, 23 insertions(+), 22 deletions(-)
diff --git a/ggml/src/ggml-backend-reg.cpp b/ggml/src/ggml-backend-reg.cpp
index
ac5cda07..374c3b21
100644
index
135f7df0..84b21dd8
100644
--- a/ggml/src/ggml-backend-reg.cpp
+++ b/ggml/src/ggml-backend-reg.cpp
@@ -512,32 +512,33 @@
static ggml_backend_reg_t ggml_backend_load_best(const char * name, bool silent,
...
...
ml/backend/ggml/ggml/src/ggml-backend-reg.cpp
View file @
6600bd7d
...
...
@@ -215,6 +215,11 @@ struct ggml_backend_registry {
GGML_LOG_DEBUG
(
"%s: registered device %s (%s)
\n
"
,
__func__
,
ggml_backend_dev_name
(
device
),
ggml_backend_dev_description
(
device
));
#endif
devices
.
push_back
({
device
,
score
});
std
::
stable_sort
(
devices
.
begin
(),
devices
.
end
(),
[](
const
auto
&
a
,
const
auto
&
b
)
{
return
a
.
second
>
b
.
second
;
}
);
}
ggml_backend_reg_t
load_backend
(
const
std
::
wstring
&
path
,
bool
silent
)
{
...
...
@@ -338,12 +343,7 @@ size_t ggml_backend_dev_count() {
ggml_backend_dev_t
ggml_backend_dev_get
(
size_t
index
)
{
GGML_ASSERT
(
index
<
ggml_backend_dev_count
());
auto
devices
=
get_reg
().
devices
;
if
(
!
std
::
is_heap
(
devices
.
begin
(),
devices
.
end
()))
{
std
::
make_heap
(
devices
.
begin
(),
devices
.
end
(),
[](
const
auto
&
a
,
const
auto
&
b
)
{
return
a
.
second
<
b
.
second
;
});
}
return
devices
[
index
].
first
;
return
get_reg
().
devices
[
index
].
first
;
}
ggml_backend_dev_t
ggml_backend_dev_by_name
(
const
char
*
name
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment