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
72e7a49a
Commit
72e7a49a
authored
Nov 29, 2023
by
Michael Yang
Browse files
seek instead of copyn
parent
998f1785
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
50 additions
and
40 deletions
+50
-40
llm/ggml.go
llm/ggml.go
+22
-12
llm/gguf.go
llm/gguf.go
+28
-28
No files found.
llm/ggml.go
View file @
72e7a49a
...
...
@@ -83,7 +83,7 @@ type model interface {
type
container
interface
{
Name
()
string
Decode
(
*
readOffset
)
(
model
,
error
)
Decode
(
*
read
Seek
Offset
)
(
model
,
error
)
}
type
containerGGML
struct
{}
...
...
@@ -92,7 +92,7 @@ func (c *containerGGML) Name() string {
return
"ggml"
}
func
(
c
*
containerGGML
)
Decode
(
ro
*
readOffset
)
(
model
,
error
)
{
func
(
c
*
containerGGML
)
Decode
(
ro
*
read
Seek
Offset
)
(
model
,
error
)
{
return
nil
,
nil
}
...
...
@@ -104,7 +104,7 @@ func (c *containerGGMF) Name() string {
return
"ggmf"
}
func
(
c
*
containerGGMF
)
Decode
(
ro
*
readOffset
)
(
model
,
error
)
{
func
(
c
*
containerGGMF
)
Decode
(
ro
*
read
Seek
Offset
)
(
model
,
error
)
{
var
version
uint32
binary
.
Read
(
ro
,
binary
.
LittleEndian
,
&
version
)
...
...
@@ -126,7 +126,7 @@ func (c *containerGGJT) Name() string {
return
"ggjt"
}
func
(
c
*
containerGGJT
)
Decode
(
ro
*
readOffset
)
(
model
,
error
)
{
func
(
c
*
containerGGJT
)
Decode
(
ro
*
read
Seek
Offset
)
(
model
,
error
)
{
var
version
uint32
binary
.
Read
(
ro
,
binary
.
LittleEndian
,
&
version
)
...
...
@@ -152,7 +152,7 @@ func (c *containerLORA) Name() string {
return
"ggla"
}
func
(
c
*
containerLORA
)
Decode
(
ro
*
readOffset
)
(
model
,
error
)
{
func
(
c
*
containerLORA
)
Decode
(
ro
*
read
Seek
Offset
)
(
model
,
error
)
{
var
version
uint32
binary
.
Read
(
ro
,
binary
.
LittleEndian
,
&
version
)
...
...
@@ -180,8 +180,8 @@ const (
FILE_MAGIC_GGUF_BE
=
0x47475546
)
func
DecodeGGML
(
r
io
.
Reader
)
(
*
GGML
,
error
)
{
ro
:=
readOffset
{
Reader
:
r
}
func
DecodeGGML
(
r
io
.
Read
Seek
er
)
(
*
GGML
,
error
)
{
ro
:=
read
Seek
Offset
{
Read
Seek
er
:
r
}
var
magic
uint32
if
err
:=
binary
.
Read
(
&
ro
,
binary
.
LittleEndian
,
&
magic
);
err
!=
nil
{
...
...
@@ -219,13 +219,23 @@ func DecodeGGML(r io.Reader) (*GGML, error) {
},
nil
}
type
readOffset
struct
{
io
.
Reader
type
read
Seek
Offset
struct
{
io
.
Read
Seek
er
offset
int64
}
func
(
r
*
readOffset
)
Read
(
p
[]
byte
)
(
int
,
error
)
{
n
,
err
:=
r
.
Reader
.
Read
(
p
)
r
.
offset
+=
int64
(
n
)
func
(
rso
*
readSeekOffset
)
Seek
(
offset
int64
,
whence
int
)
(
int64
,
error
)
{
offset
,
err
:=
rso
.
ReadSeeker
.
Seek
(
offset
,
whence
)
if
err
!=
nil
{
return
0
,
err
}
rso
.
offset
=
offset
return
offset
,
nil
}
func
(
rso
*
readSeekOffset
)
Read
(
p
[]
byte
)
(
int
,
error
)
{
n
,
err
:=
rso
.
ReadSeeker
.
Read
(
p
)
rso
.
offset
+=
int64
(
n
)
return
n
,
err
}
llm/gguf.go
View file @
72e7a49a
...
...
@@ -29,18 +29,18 @@ func (c *containerGGUF) Name() string {
return
"gguf"
}
func
(
c
*
containerGGUF
)
Decode
(
ro
*
readOffset
)
(
model
,
error
)
{
binary
.
Read
(
ro
,
c
.
bo
,
&
c
.
Version
)
func
(
c
*
containerGGUF
)
Decode
(
r
s
o
*
read
Seek
Offset
)
(
model
,
error
)
{
binary
.
Read
(
r
s
o
,
c
.
bo
,
&
c
.
Version
)
switch
c
.
Version
{
case
1
:
binary
.
Read
(
ro
,
c
.
bo
,
&
c
.
V1
)
binary
.
Read
(
r
s
o
,
c
.
bo
,
&
c
.
V1
)
default
:
binary
.
Read
(
ro
,
c
.
bo
,
&
c
.
V2
)
binary
.
Read
(
r
s
o
,
c
.
bo
,
&
c
.
V2
)
}
model
:=
newGGUFModel
(
c
)
if
err
:=
model
.
Decode
(
ro
);
err
!=
nil
{
if
err
:=
model
.
Decode
(
r
s
o
);
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -154,49 +154,49 @@ func (llm *ggufModel) FileType() string {
return
"unknown"
}
func
(
llm
*
ggufModel
)
Decode
(
ro
*
readOffset
)
error
{
func
(
llm
*
ggufModel
)
Decode
(
r
s
o
*
read
Seek
Offset
)
error
{
// decode key-values
for
i
:=
0
;
uint64
(
i
)
<
llm
.
NumKV
();
i
++
{
k
,
err
:=
llm
.
readString
(
ro
)
k
,
err
:=
llm
.
readString
(
r
s
o
)
if
err
!=
nil
{
return
err
}
vtype
:=
llm
.
readU32
(
ro
)
vtype
:=
llm
.
readU32
(
r
s
o
)
var
v
any
switch
vtype
{
case
ggufTypeUint8
:
v
=
llm
.
readU8
(
ro
)
v
=
llm
.
readU8
(
r
s
o
)
case
ggufTypeInt8
:
v
=
llm
.
readI8
(
ro
)
v
=
llm
.
readI8
(
r
s
o
)
case
ggufTypeUint16
:
v
=
llm
.
readU16
(
ro
)
v
=
llm
.
readU16
(
r
s
o
)
case
ggufTypeInt16
:
v
=
llm
.
readI16
(
ro
)
v
=
llm
.
readI16
(
r
s
o
)
case
ggufTypeUint32
:
v
=
llm
.
readU32
(
ro
)
v
=
llm
.
readU32
(
r
s
o
)
case
ggufTypeInt32
:
v
=
llm
.
readI32
(
ro
)
v
=
llm
.
readI32
(
r
s
o
)
case
ggufTypeUint64
:
v
=
llm
.
readU64
(
ro
)
v
=
llm
.
readU64
(
r
s
o
)
case
ggufTypeInt64
:
v
=
llm
.
readI64
(
ro
)
v
=
llm
.
readI64
(
r
s
o
)
case
ggufTypeFloat32
:
v
=
llm
.
readF32
(
ro
)
v
=
llm
.
readF32
(
r
s
o
)
case
ggufTypeFloat64
:
v
=
llm
.
readF64
(
ro
)
v
=
llm
.
readF64
(
r
s
o
)
case
ggufTypeBool
:
v
=
llm
.
readBool
(
ro
)
v
=
llm
.
readBool
(
r
s
o
)
case
ggufTypeString
:
s
,
err
:=
llm
.
readString
(
ro
)
s
,
err
:=
llm
.
readString
(
r
s
o
)
if
err
!=
nil
{
return
err
}
v
=
s
case
ggufTypeArray
:
a
,
err
:=
llm
.
readArray
(
ro
)
a
,
err
:=
llm
.
readArray
(
r
s
o
)
if
err
!=
nil
{
return
err
}
...
...
@@ -211,20 +211,20 @@ func (llm *ggufModel) Decode(ro *readOffset) error {
// decode tensors
for
i
:=
0
;
uint64
(
i
)
<
llm
.
NumTensor
();
i
++
{
name
,
err
:=
llm
.
readString
(
ro
)
name
,
err
:=
llm
.
readString
(
r
s
o
)
if
err
!=
nil
{
return
err
}
dims
:=
llm
.
readU32
(
ro
)
dims
:=
llm
.
readU32
(
r
s
o
)
shape
:=
[
4
]
uint64
{
1
,
1
,
1
,
1
}
for
i
:=
0
;
uint32
(
i
)
<
dims
;
i
++
{
shape
[
i
]
=
llm
.
readU64
(
ro
)
shape
[
i
]
=
llm
.
readU64
(
r
s
o
)
}
kind
:=
llm
.
readU32
(
ro
)
offset
:=
llm
.
readU64
(
ro
)
kind
:=
llm
.
readU32
(
r
s
o
)
offset
:=
llm
.
readU64
(
r
s
o
)
var
blockSize
uint64
switch
{
...
...
@@ -285,10 +285,10 @@ func (llm *ggufModel) Decode(ro *readOffset) error {
alignment
=
32
}
io
.
CopyN
(
io
.
Discard
,
ro
,
int64
(
alignment
)
-
ro
.
offset
%
int64
(
alignment
))
rso
.
Seek
(
int64
(
alignment
)
-
r
s
o
.
offset
%
int64
(
alignment
)
,
io
.
SeekCurrent
)
for
_
,
tensor
:=
range
llm
.
tensors
{
padded
:=
(
int64
(
tensor
.
size
)
+
int64
(
alignment
)
-
1
)
&
^
(
int64
(
alignment
)
-
1
)
io
.
CopyN
(
io
.
Discard
,
ro
,
padded
)
rso
.
Seek
(
padded
,
io
.
SeekCurrent
)
}
return
nil
...
...
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