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
01811c17
Commit
01811c17
authored
Apr 23, 2024
by
Michael Yang
Browse files
comments
parent
a7248f6e
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
86 additions
and
80 deletions
+86
-80
llm/filetype.go
llm/filetype.go
+74
-72
llm/ggml.go
llm/ggml.go
+1
-1
llm/llm.go
llm/llm.go
+1
-1
server/images.go
server/images.go
+5
-5
server/model.go
server/model.go
+5
-1
No files found.
llm/filetype.go
View file @
01811c17
...
@@ -2,137 +2,139 @@ package llm
...
@@ -2,137 +2,139 @@ package llm
import
"fmt"
import
"fmt"
type
file
t
ype
uint32
type
file
T
ype
uint32
const
(
const
(
filetypeF32
filetype
=
iota
fileTypeF32
fileType
=
iota
filetypeF16
fileTypeF16
filetypeQ4_0
fileTypeQ4_0
filetypeQ4_1
fileTypeQ4_1
filetypeQ4_1_F16
fileTypeQ4_1_F16
filetypeQ8_0
filetype
=
iota
+
2
fileTypeQ4_2
// unused
filetypeQ5_0
fileTypeQ4_3
// unused
filetypeQ5_1
fileTypeQ8_0
filetypeQ2_K
fileTypeQ5_0
filetypeQ3_K_S
fileTypeQ5_1
filetypeQ3_K_M
fileTypeQ2_K
filetypeQ3_K_L
fileTypeQ3_K_S
filetypeQ4_K_S
fileTypeQ3_K_M
filetypeQ4_K_M
fileTypeQ3_K_L
filetypeQ5_K_S
fileTypeQ4_K_S
filetypeQ5_K_M
fileTypeQ4_K_M
filetypeQ6_K
fileTypeQ5_K_S
filetypeIQ2_XXS
fileTypeQ5_K_M
filetypeIQ2_XS
fileTypeQ6_K
filetypeQ2_K_S
fileTypeIQ2_XXS
filetypeQ3_K_XS
fileTypeIQ2_XS
filetypeIQ3_XXS
fileTypeQ2_K_S
fileTypeQ3_K_XS
fileTypeIQ3_XXS
file
t
ypeUnknown
file
T
ypeUnknown
)
)
func
ParseFileType
(
s
string
)
(
file
t
ype
,
error
)
{
func
ParseFileType
(
s
string
)
(
file
T
ype
,
error
)
{
switch
s
{
switch
s
{
case
"F32"
:
case
"F32"
:
return
file
t
ypeF32
,
nil
return
file
T
ypeF32
,
nil
case
"F16"
:
case
"F16"
:
return
file
t
ypeF16
,
nil
return
file
T
ypeF16
,
nil
case
"Q4_0"
:
case
"Q4_0"
:
return
file
t
ypeQ4_0
,
nil
return
file
T
ypeQ4_0
,
nil
case
"Q4_1"
:
case
"Q4_1"
:
return
file
t
ypeQ4_1
,
nil
return
file
T
ypeQ4_1
,
nil
case
"Q4_1_F16"
:
case
"Q4_1_F16"
:
return
file
t
ypeQ4_1_F16
,
nil
return
file
T
ypeQ4_1_F16
,
nil
case
"Q8_0"
:
case
"Q8_0"
:
return
file
t
ypeQ8_0
,
nil
return
file
T
ypeQ8_0
,
nil
case
"Q5_0"
:
case
"Q5_0"
:
return
file
t
ypeQ5_0
,
nil
return
file
T
ypeQ5_0
,
nil
case
"Q5_1"
:
case
"Q5_1"
:
return
file
t
ypeQ5_1
,
nil
return
file
T
ypeQ5_1
,
nil
case
"Q2_K"
:
case
"Q2_K"
:
return
file
t
ypeQ2_K
,
nil
return
file
T
ypeQ2_K
,
nil
case
"Q3_K_S"
:
case
"Q3_K_S"
:
return
file
t
ypeQ3_K_S
,
nil
return
file
T
ypeQ3_K_S
,
nil
case
"Q3_K_M"
:
case
"Q3_K_M"
:
return
file
t
ypeQ3_K_M
,
nil
return
file
T
ypeQ3_K_M
,
nil
case
"Q3_K_L"
:
case
"Q3_K_L"
:
return
file
t
ypeQ3_K_L
,
nil
return
file
T
ypeQ3_K_L
,
nil
case
"Q4_K_S"
:
case
"Q4_K_S"
:
return
file
t
ypeQ4_K_S
,
nil
return
file
T
ypeQ4_K_S
,
nil
case
"Q4_K_M"
:
case
"Q4_K_M"
:
return
file
t
ypeQ4_K_M
,
nil
return
file
T
ypeQ4_K_M
,
nil
case
"Q5_K_S"
:
case
"Q5_K_S"
:
return
file
t
ypeQ5_K_S
,
nil
return
file
T
ypeQ5_K_S
,
nil
case
"Q5_K_M"
:
case
"Q5_K_M"
:
return
file
t
ypeQ5_K_M
,
nil
return
file
T
ypeQ5_K_M
,
nil
case
"Q6_K"
:
case
"Q6_K"
:
return
file
t
ypeQ6_K
,
nil
return
file
T
ypeQ6_K
,
nil
case
"IQ2_XXS"
:
case
"IQ2_XXS"
:
return
file
t
ypeIQ2_XXS
,
nil
return
file
T
ypeIQ2_XXS
,
nil
case
"IQ2_XS"
:
case
"IQ2_XS"
:
return
file
t
ypeIQ2_XS
,
nil
return
file
T
ypeIQ2_XS
,
nil
case
"Q2_K_S"
:
case
"Q2_K_S"
:
return
file
t
ypeQ2_K_S
,
nil
return
file
T
ypeQ2_K_S
,
nil
case
"Q3_K_XS"
:
case
"Q3_K_XS"
:
return
file
t
ypeQ3_K_XS
,
nil
return
file
T
ypeQ3_K_XS
,
nil
case
"IQ3_XXS"
:
case
"IQ3_XXS"
:
return
file
t
ypeIQ3_XXS
,
nil
return
file
T
ypeIQ3_XXS
,
nil
default
:
default
:
return
file
t
ypeUnknown
,
fmt
.
Errorf
(
"unknown file
t
ype: %s"
,
s
)
return
file
T
ypeUnknown
,
fmt
.
Errorf
(
"unknown file
T
ype: %s"
,
s
)
}
}
}
}
func
(
t
file
t
ype
)
String
()
string
{
func
(
t
file
T
ype
)
String
()
string
{
switch
t
{
switch
t
{
case
file
t
ypeF32
:
case
file
T
ypeF32
:
return
"F32"
return
"F32"
case
file
t
ypeF16
:
case
file
T
ypeF16
:
return
"F16"
return
"F16"
case
file
t
ypeQ4_0
:
case
file
T
ypeQ4_0
:
return
"Q4_0"
return
"Q4_0"
case
file
t
ypeQ4_1
:
case
file
T
ypeQ4_1
:
return
"Q4_1"
return
"Q4_1"
case
file
t
ypeQ4_1_F16
:
case
file
T
ypeQ4_1_F16
:
return
"Q4_1_F16"
return
"Q4_1_F16"
case
file
t
ypeQ8_0
:
case
file
T
ypeQ8_0
:
return
"Q8_0"
return
"Q8_0"
case
file
t
ypeQ5_0
:
case
file
T
ypeQ5_0
:
return
"Q5_0"
return
"Q5_0"
case
file
t
ypeQ5_1
:
case
file
T
ypeQ5_1
:
return
"Q5_1"
return
"Q5_1"
case
file
t
ypeQ2_K
:
case
file
T
ypeQ2_K
:
return
"Q2_K"
return
"Q2_K"
case
file
t
ypeQ3_K_S
:
case
file
T
ypeQ3_K_S
:
return
"Q3_K_S"
return
"Q3_K_S"
case
file
t
ypeQ3_K_M
:
case
file
T
ypeQ3_K_M
:
return
"Q3_K_M"
return
"Q3_K_M"
case
file
t
ypeQ3_K_L
:
case
file
T
ypeQ3_K_L
:
return
"Q3_K_L"
return
"Q3_K_L"
case
file
t
ypeQ4_K_S
:
case
file
T
ypeQ4_K_S
:
return
"Q4_K_S"
return
"Q4_K_S"
case
file
t
ypeQ4_K_M
:
case
file
T
ypeQ4_K_M
:
return
"Q4_K_M"
return
"Q4_K_M"
case
file
t
ypeQ5_K_S
:
case
file
T
ypeQ5_K_S
:
return
"Q5_K_S"
return
"Q5_K_S"
case
file
t
ypeQ5_K_M
:
case
file
T
ypeQ5_K_M
:
return
"Q5_K_M"
return
"Q5_K_M"
case
file
t
ypeQ6_K
:
case
file
T
ypeQ6_K
:
return
"Q6_K"
return
"Q6_K"
case
file
t
ypeIQ2_XXS
:
case
file
T
ypeIQ2_XXS
:
return
"IQ2_XXS"
return
"IQ2_XXS"
case
file
t
ypeIQ2_XS
:
case
file
T
ypeIQ2_XS
:
return
"IQ2_XS"
return
"IQ2_XS"
case
file
t
ypeQ2_K_S
:
case
file
T
ypeQ2_K_S
:
return
"Q2_K_S"
return
"Q2_K_S"
case
file
t
ypeQ3_K_XS
:
case
file
T
ypeQ3_K_XS
:
return
"Q3_K_XS"
return
"Q3_K_XS"
case
file
t
ypeIQ3_XXS
:
case
file
T
ypeIQ3_XXS
:
return
"IQ3_XXS"
return
"IQ3_XXS"
default
:
default
:
return
"unknown"
return
"unknown"
}
}
}
}
func
(
t
file
t
ype
)
Value
()
uint32
{
func
(
t
file
T
ype
)
Value
()
uint32
{
return
uint32
(
t
)
return
uint32
(
t
)
}
}
llm/ggml.go
View file @
01811c17
...
@@ -47,7 +47,7 @@ func (kv KV) ParameterCount() uint64 {
...
@@ -47,7 +47,7 @@ func (kv KV) ParameterCount() uint64 {
func
(
kv
KV
)
FileType
()
string
{
func
(
kv
KV
)
FileType
()
string
{
if
u64
:=
kv
.
u64
(
"general.file_type"
);
u64
>
0
{
if
u64
:=
kv
.
u64
(
"general.file_type"
);
u64
>
0
{
return
file
t
ype
(
uint32
(
u64
))
.
String
()
return
file
T
ype
(
uint32
(
u64
))
.
String
()
}
}
return
"unknown"
return
"unknown"
...
...
llm/llm.go
View file @
01811c17
...
@@ -20,7 +20,7 @@ func SystemInfo() string {
...
@@ -20,7 +20,7 @@ func SystemInfo() string {
return
C
.
GoString
(
C
.
llama_print_system_info
())
return
C
.
GoString
(
C
.
llama_print_system_info
())
}
}
func
Quantize
(
infile
,
outfile
string
,
ftype
file
t
ype
)
error
{
func
Quantize
(
infile
,
outfile
string
,
ftype
file
T
ype
)
error
{
cinfile
:=
C
.
CString
(
infile
)
cinfile
:=
C
.
CString
(
infile
)
defer
C
.
free
(
unsafe
.
Pointer
(
cinfile
))
defer
C
.
free
(
unsafe
.
Pointer
(
cinfile
))
...
...
server/images.go
View file @
01811c17
...
@@ -344,9 +344,9 @@ func CreateModel(ctx context.Context, name, modelFileDir, quantization string, m
...
@@ -344,9 +344,9 @@ func CreateModel(ctx context.Context, name, modelFileDir, quantization string, m
switch
c
.
Name
{
switch
c
.
Name
{
case
"model"
,
"adapter"
:
case
"model"
,
"adapter"
:
var
l
ayers
2
*
ordered
.
Map
[
*
Layer
,
*
llm
.
GGML
]
var
baseL
ayers
*
ordered
.
Map
[
*
Layer
,
*
llm
.
GGML
]
if
name
:=
model
.
ParseName
(
c
.
Args
,
""
);
name
.
IsValid
()
{
if
name
:=
model
.
ParseName
(
c
.
Args
,
""
);
name
.
IsValid
()
{
l
ayers
2
,
err
=
parseFromModel
(
ctx
,
name
,
fn
)
baseL
ayers
,
err
=
parseFromModel
(
ctx
,
name
,
fn
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -362,14 +362,14 @@ func CreateModel(ctx context.Context, name, modelFileDir, quantization string, m
...
@@ -362,14 +362,14 @@ func CreateModel(ctx context.Context, name, modelFileDir, quantization string, m
}
}
defer
blob
.
Close
()
defer
blob
.
Close
()
l
ayers
2
,
err
=
parseFromFile
(
ctx
,
blob
,
fn
)
baseL
ayers
,
err
=
parseFromFile
(
ctx
,
blob
,
fn
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
}
else
if
file
,
err
:=
os
.
Open
(
realpath
(
modelFileDir
,
c
.
Args
));
err
==
nil
{
}
else
if
file
,
err
:=
os
.
Open
(
realpath
(
modelFileDir
,
c
.
Args
));
err
==
nil
{
defer
file
.
Close
()
defer
file
.
Close
()
l
ayers
2
,
err
=
parseFromFile
(
ctx
,
file
,
fn
)
baseL
ayers
,
err
=
parseFromFile
(
ctx
,
file
,
fn
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -381,7 +381,7 @@ func CreateModel(ctx context.Context, name, modelFileDir, quantization string, m
...
@@ -381,7 +381,7 @@ func CreateModel(ctx context.Context, name, modelFileDir, quantization string, m
var
tempfiles
[]
*
os
.
File
var
tempfiles
[]
*
os
.
File
// TODO(mxyng): replace with rangefunc
// TODO(mxyng): replace with rangefunc
l
ayers
2
.
Items
()(
func
(
layer
*
Layer
,
ggml
*
llm
.
GGML
)
bool
{
baseL
ayers
.
Items
()(
func
(
layer
*
Layer
,
ggml
*
llm
.
GGML
)
bool
{
if
quantization
!=
""
&&
ggml
!=
nil
&&
ggml
.
Name
()
==
"gguf"
{
if
quantization
!=
""
&&
ggml
!=
nil
&&
ggml
.
Name
()
==
"gguf"
{
ftype
,
err
:=
llm
.
ParseFileType
(
quantization
)
ftype
,
err
:=
llm
.
ParseFileType
(
quantization
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
server/model.go
View file @
01811c17
...
@@ -27,7 +27,11 @@ func parseFromModel(ctx context.Context, name model.Name, fn func(api.ProgressRe
...
@@ -27,7 +27,11 @@ func parseFromModel(ctx context.Context, name model.Name, fn func(api.ProgressRe
return
nil
,
err
return
nil
,
err
}
}
return
parseFromModel
(
ctx
,
name
,
fn
)
modelpath
=
ParseModelPath
(
name
.
DisplayLongest
())
manifest
,
_
,
err
=
GetManifest
(
modelpath
)
if
err
!=
nil
{
return
nil
,
err
}
case
err
!=
nil
:
case
err
!=
nil
:
return
nil
,
err
return
nil
,
err
}
}
...
...
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