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
4759ecae
Unverified
Commit
4759ecae
authored
Feb 04, 2025
by
Jeffrey Morgan
Committed by
GitHub
Feb 04, 2025
Browse files
ml/backend/ggml: fix library loading on macOS amd64 (#8827)
parent
65b7ecac
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
46 additions
and
23 deletions
+46
-23
CMakeLists.txt
CMakeLists.txt
+5
-0
llm/server.go
llm/server.go
+9
-3
ml/backend/ggml/ggml/src/ggml.go
ml/backend/ggml/ggml/src/ggml.go
+29
-17
scripts/build_darwin.sh
scripts/build_darwin.sh
+3
-3
No files found.
CMakeLists.txt
View file @
4759ecae
...
@@ -29,6 +29,11 @@ if((NOT CMAKE_OSX_ARCHITECTURES MATCHES "arm64")
...
@@ -29,6 +29,11 @@ if((NOT CMAKE_OSX_ARCHITECTURES MATCHES "arm64")
set
(
GGML_CPU_ALL_VARIANTS ON
)
set
(
GGML_CPU_ALL_VARIANTS ON
)
endif
()
endif
()
if
(
CMAKE_OSX_ARCHITECTURES MATCHES
"x86_64"
)
set
(
CMAKE_BUILD_RPATH
"@loader_path"
)
set
(
CMAKE_INSTALL_RPATH
"@loader_path"
)
endif
()
set
(
OLLAMA_BUILD_DIR
${
CMAKE_BINARY_DIR
}
/lib/ollama
)
set
(
OLLAMA_BUILD_DIR
${
CMAKE_BINARY_DIR
}
/lib/ollama
)
set
(
OLLAMA_INSTALL_DIR
${
CMAKE_INSTALL_PREFIX
}
/lib/ollama
)
set
(
OLLAMA_INSTALL_DIR
${
CMAKE_INSTALL_PREFIX
}
/lib/ollama
)
...
...
llm/server.go
View file @
4759ecae
...
@@ -281,9 +281,14 @@ func NewLlamaServer(gpus discover.GpuInfoList, model string, ggml *GGML, adapter
...
@@ -281,9 +281,14 @@ func NewLlamaServer(gpus discover.GpuInfoList, model string, ggml *GGML, adapter
finalParams
=
append
(
finalParams
,
params
...
)
finalParams
=
append
(
finalParams
,
params
...
)
finalParams
=
append
(
finalParams
,
"--port"
,
strconv
.
Itoa
(
port
))
finalParams
=
append
(
finalParams
,
"--port"
,
strconv
.
Itoa
(
port
))
pathEnv
:=
"LD_LIBRARY_PATH"
var
pathEnv
string
if
runtime
.
GOOS
==
"windows"
{
switch
runtime
.
GOOS
{
case
"windows"
:
pathEnv
=
"PATH"
pathEnv
=
"PATH"
case
"darwin"
:
pathEnv
=
"DYLD_LIBRARY_PATH"
default
:
pathEnv
=
"LD_LIBRARY_PATH"
}
}
var
libraryPaths
[]
string
var
libraryPaths
[]
string
...
@@ -385,7 +390,8 @@ func NewLlamaServer(gpus discover.GpuInfoList, model string, ggml *GGML, adapter
...
@@ -385,7 +390,8 @@ func NewLlamaServer(gpus discover.GpuInfoList, model string, ggml *GGML, adapter
strings
.
HasPrefix
(
ev
,
"HSA_"
)
||
strings
.
HasPrefix
(
ev
,
"HSA_"
)
||
strings
.
HasPrefix
(
ev
,
"GGML_"
)
||
strings
.
HasPrefix
(
ev
,
"GGML_"
)
||
strings
.
HasPrefix
(
ev
,
"PATH="
)
||
strings
.
HasPrefix
(
ev
,
"PATH="
)
||
strings
.
HasPrefix
(
ev
,
"LD_LIBRARY_PATH="
)
{
strings
.
HasPrefix
(
ev
,
"LD_LIBRARY_PATH="
)
||
strings
.
HasPrefix
(
ev
,
"DYLD_LIBRARY_PATH="
)
{
filteredEnv
=
append
(
filteredEnv
,
ev
)
filteredEnv
=
append
(
filteredEnv
,
ev
)
}
}
}
}
...
...
ml/backend/ggml/ggml/src/ggml.go
View file @
4759ecae
...
@@ -41,36 +41,48 @@ func sink(level C.int, text *C.char, _ unsafe.Pointer) {
...
@@ -41,36 +41,48 @@ func sink(level C.int, text *C.char, _ unsafe.Pointer) {
}
}
var
OnceLoad
=
sync
.
OnceFunc
(
func
()
{
var
OnceLoad
=
sync
.
OnceFunc
(
func
()
{
var
lib
struct
{
name
,
defaultValue
string
}
exe
,
err
:=
os
.
Executable
()
if
err
!=
nil
{
slog
.
Warn
(
"failed to get executable path"
,
"error"
,
err
)
exe
=
"."
}
// PATH, LD_LIBRARY_PATH, and DYLD_LIBRARY_PATH are often
// set by the parent process, however, use a default value
// if the environment variable is not set.
var
name
,
value
string
switch
runtime
.
GOOS
{
switch
runtime
.
GOOS
{
case
"darwin"
,
"linux"
:
case
"darwin"
:
lib
.
name
=
"LD_LIBRARY_PATH"
// On macOS, DYLD_LIBRARY_PATH is often not set, so
lib
.
defaultValue
=
"/usr/local/lib:/usr/lib"
// we use the directory of the executable as the default.
name
=
"DYLD_LIBRARY_PATH"
value
=
filepath
.
Dir
(
exe
)
case
"windows"
:
case
"windows"
:
lib
.
name
=
"PATH"
name
=
"PATH"
lib
.
defaultValue
=
"."
value
=
filepath
.
Join
(
filepath
.
Dir
(
exe
),
"lib"
,
"ollama"
)
default
:
default
:
return
name
=
"LD_LIBRARY_PATH"
value
=
filepath
.
Join
(
filepath
.
Dir
(
exe
),
".."
,
"lib"
,
"ollama"
)
}
}
paths
,
ok
:=
os
.
LookupEnv
(
lib
.
name
)
paths
,
ok
:=
os
.
LookupEnv
(
name
)
if
!
ok
{
if
!
ok
{
paths
=
lib
.
defaultValue
paths
=
value
}
if
runtime
.
GOOS
==
"darwin"
{
if
_
,
ok
:=
os
.
LookupEnv
(
"DYLD_LIBRARY_PATH"
);
!
ok
{
os
.
Setenv
(
"DYLD_LIBRARY_PATH"
,
paths
)
}
}
}
split
:=
filepath
.
SplitList
(
paths
)
split
:=
filepath
.
SplitList
(
paths
)
visited
:=
make
(
map
[
string
]
struct
{},
len
(
split
))
visited
:=
make
(
map
[
string
]
struct
{},
len
(
split
))
for
_
,
path
:=
range
split
{
for
_
,
path
:=
range
split
{
abspath
,
_
:=
filepath
.
Abs
(
path
)
abspath
,
err
:=
filepath
.
Abs
(
path
)
if
err
!=
nil
{
slog
.
Error
(
"failed to get absolute path"
,
"error"
,
err
)
continue
}
if
_
,
ok
:=
visited
[
abspath
];
!
ok
{
if
_
,
ok
:=
visited
[
abspath
];
!
ok
{
func
()
{
func
()
{
cpath
:=
C
.
CString
(
path
)
slog
.
Debug
(
"ggml backend load all from path"
,
"path"
,
abspath
)
cpath
:=
C
.
CString
(
abspath
)
defer
C
.
free
(
unsafe
.
Pointer
(
cpath
))
defer
C
.
free
(
unsafe
.
Pointer
(
cpath
))
C
.
ggml_backend_load_all_from_path
(
cpath
)
C
.
ggml_backend_load_all_from_path
(
cpath
)
}()
}()
...
...
scripts/build_darwin.sh
View file @
4759ecae
...
@@ -32,10 +32,10 @@ _build_darwin() {
...
@@ -32,10 +32,10 @@ _build_darwin() {
status
"Building darwin
$ARCH
dynamic backends"
status
"Building darwin
$ARCH
dynamic backends"
cmake
-B
build/darwin-
$ARCH
\
cmake
-B
build/darwin-
$ARCH
\
-DCMAKE_OSX_ARCHITECTURES
=
x86_64
\
-DCMAKE_OSX_ARCHITECTURES
=
x86_64
\
-DCMAKE_OSX_DEPLOYMENT_TARGET
=
11.3
-DCMAKE_OSX_DEPLOYMENT_TARGET
=
11.3
\
-DCMAKE_INSTALL_PREFIX
=
$INSTALL_PREFIX
cmake
--build
build/darwin-
$ARCH
--target
ggml-cpu
-j
cmake
--build
build/darwin-
$ARCH
--target
ggml-cpu
-j
install
-d
$INSTALL_PREFIX
/lib/ollama
cmake
--install
build/darwin-
$ARCH
--component
CPU
install
build/darwin-
$ARCH
/lib/ollama/
*
.
{
dylib,so
}
$INSTALL_PREFIX
/lib/ollama
fi
fi
done
done
}
}
...
...
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