Merge pull request #221 from jmorganca/embed-metal
embed ggml-metal.metal
This commit is contained in:
commit
e5b26c3aa2
3 changed files with 57 additions and 1 deletions
|
@ -1 +0,0 @@
|
||||||
llama/ggml-metal.metal
|
|
|
@ -86,6 +86,7 @@ llama_token llama_sample(
|
||||||
import "C"
|
import "C"
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"embed"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
@ -99,6 +100,9 @@ import (
|
||||||
"github.com/jmorganca/ollama/api"
|
"github.com/jmorganca/ollama/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//go:embed ggml-metal.metal
|
||||||
|
var fs embed.FS
|
||||||
|
|
||||||
type LLM struct {
|
type LLM struct {
|
||||||
params *C.struct_llama_context_params
|
params *C.struct_llama_context_params
|
||||||
model *C.struct_llama_model
|
model *C.struct_llama_model
|
||||||
|
|
53
llama/llama_darwin.go
Normal file
53
llama/llama_darwin.go
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
package llama
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
if err := initBackend(); err != nil {
|
||||||
|
log.Printf("WARNING: GPU could not be initialized correctly: %v", err)
|
||||||
|
log.Printf("WARNING: falling back to CPU")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func initBackend() error {
|
||||||
|
exec, err := os.Executable()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
exec, err = filepath.EvalSymlinks(exec)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
metal := filepath.Join(filepath.Dir(exec), "ggml-metal.metal")
|
||||||
|
if _, err := os.Stat(metal); err != nil {
|
||||||
|
if !errors.Is(err, os.ErrNotExist) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
dst, err := os.Create(filepath.Join(filepath.Dir(exec), "ggml-metal.metal"))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer dst.Close()
|
||||||
|
|
||||||
|
src, err := fs.Open("ggml-metal.metal")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer src.Close()
|
||||||
|
|
||||||
|
if _, err := io.Copy(dst, src); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in a new issue