Merge pull request #1785 from dhiltgen/win_native_cli

Load dynamic cpu lib on windows
This commit is contained in:
Daniel Hiltgen 2024-01-04 08:55:01 -08:00 committed by GitHub
commit b5939008a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 16 additions and 8 deletions

View file

@ -1,8 +1,6 @@
package llm
import (
"fmt"
"github.com/jmorganca/ollama/api"
)
@ -10,6 +8,5 @@ func newDefaultExtServer(model string, adapters, projectors []string, numLayers
// On windows we always load the llama.cpp libraries dynamically to avoid startup DLL dependencies
// This ensures we can update the PATH at runtime to get everything loaded
// Should not happen
return nil, fmt.Errorf("no default impl on windows - all dynamic")
return newDynamicShimExtServer(AvailableShims["cpu"], model, adapters, projectors, numLayers, opts)
}

View file

@ -49,6 +49,9 @@ function install {
md "${script:buildDir}/lib" -ea 0 > $null
cp "${script:buildDir}/bin/${script:config}/ext_server_shared.dll" "${script:buildDir}/lib"
cp "${script:buildDir}/bin/${script:config}/llama.dll" "${script:buildDir}/lib"
# Display the dll dependencies in the build log
dumpbin /dependents "${script:buildDir}/bin/${script:config}/ext_server_shared.dll" | select-string ".dll"
}
function cleanup {

View file

@ -87,7 +87,8 @@ func newLlmServer(library, model string, adapters, projectors []string, numLayer
if err == nil {
return srv, nil
}
log.Printf("Failed to load dynamic library - falling back to CPU mode %s", err)
log.Printf("Failed to load dynamic library %s - falling back to CPU mode %s", library, err)
// TODO - update some state to indicate we were unable to load the GPU library for future "info" ux
}
return newDefaultExtServer(model, adapters, projectors, numLayers, opts)

View file

@ -4,6 +4,7 @@ import (
"embed"
"log"
"os"
"path/filepath"
"strings"
)
@ -11,14 +12,20 @@ import (
var libEmbed embed.FS
func updatePath(dir string) {
tmpDir := filepath.Dir(dir)
pathComponents := strings.Split(os.Getenv("PATH"), ";")
i := 0
for _, comp := range pathComponents {
// Case incensitive
if strings.ToLower(comp) == strings.ToLower(dir) {
if strings.EqualFold(comp, dir) {
return
}
// Remove any other prior paths to our temp dir
if !strings.HasPrefix(strings.ToLower(comp), strings.ToLower(tmpDir)) {
pathComponents[i] = comp
i++
}
}
newPath := strings.Join(append(pathComponents, dir), ";")
newPath := strings.Join(append([]string{dir}, pathComponents...), ";")
log.Printf("Updating PATH to %s", newPath)
os.Setenv("PATH", newPath)
}