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
orangecat
ollama
Commits
d355d202
"src/runtime/vscode:/vscode.git/clone" did not exist on "a3ea4873d343d8876d961621ca3bfb889ec78501"
Commit
d355d202
authored
May 08, 2024
by
Patrick Devine
Committed by
Michael Yang
May 20, 2024
Browse files
add fixes for llama
parent
c8cf0d94
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
55 additions
and
24 deletions
+55
-24
cmd/cmd.go
cmd/cmd.go
+1
-1
convert/convert.go
convert/convert.go
+1
-3
convert/llama.go
convert/llama.go
+19
-14
convert/safetensors.go
convert/safetensors.go
+2
-0
convert/torch.go
convert/torch.go
+32
-6
No files found.
cmd/cmd.go
View file @
d355d202
...
@@ -208,7 +208,7 @@ func tempZipFiles(path string) (string, error) {
...
@@ -208,7 +208,7 @@ func tempZipFiles(path string) (string, error) {
// pytorch files might also be unresolved git lfs references; skip if they are
// pytorch files might also be unresolved git lfs references; skip if they are
// covers pytorch_model-x-of-y.bin, pytorch_model.fp32-x-of-y.bin, pytorch_model.bin
// covers pytorch_model-x-of-y.bin, pytorch_model.fp32-x-of-y.bin, pytorch_model.bin
files
=
append
(
files
,
pt
...
)
files
=
append
(
files
,
pt
...
)
}
else
if
pt
,
_
:=
glob
(
filepath
.
Join
(
path
,
"consolidated*.pth"
),
"application/
octet-stream
"
);
len
(
pt
)
>
0
{
}
else
if
pt
,
_
:=
glob
(
filepath
.
Join
(
path
,
"consolidated*.pth"
),
"application/
zip
"
);
len
(
pt
)
>
0
{
// pytorch files might also be unresolved git lfs references; skip if they are
// pytorch files might also be unresolved git lfs references; skip if they are
// covers consolidated.x.pth, consolidated.pth
// covers consolidated.x.pth, consolidated.pth
files
=
append
(
files
,
pt
...
)
files
=
append
(
files
,
pt
...
)
...
...
convert/convert.go
View file @
d355d202
...
@@ -74,11 +74,9 @@ func GetModelFormat(dirname string) (ModelFormat, error) {
...
@@ -74,11 +74,9 @@ func GetModelFormat(dirname string) (ModelFormat, error) {
}
}
for
_
,
fn
:=
range
files
{
for
_
,
fn
:=
range
files
{
slog
.
Debug
(
fmt
.
Sprintf
(
"file = %s"
,
fn
))
if
strings
.
HasSuffix
(
fn
,
".safetensors"
)
{
if
strings
.
HasSuffix
(
fn
,
".safetensors"
)
{
return
&
SafetensorFormat
{},
nil
return
&
SafetensorFormat
{},
nil
//} else if strings.HasSuffix(fn, ".bin") {
}
else
if
strings
.
HasSuffix
(
fn
,
".bin"
)
||
strings
.
HasSuffix
(
fn
,
".pth"
)
{
}
else
if
strings
.
HasSuffix
(
fn
,
".pth"
)
{
slog
.
Debug
(
"model is torch"
)
slog
.
Debug
(
"model is torch"
)
return
&
TorchFormat
{},
nil
return
&
TorchFormat
{},
nil
}
}
...
...
convert/llama.go
View file @
d355d202
...
@@ -23,12 +23,24 @@ type LlamaModel struct {
...
@@ -23,12 +23,24 @@ type LlamaModel struct {
}
}
func
llamaTorchLayerHandler
(
w
io
.
Writer
,
r
torchWriterTo
)
error
{
func
llamaTorchLayerHandler
(
w
io
.
Writer
,
r
torchWriterTo
)
error
{
slog
.
Debug
(
fmt
.
Sprintf
(
"repacking layer '%s'"
,
r
.
t
.
Name
))
data
:=
r
.
storage
.
(
*
pytorch
.
HalfStorage
)
.
Data
var
tData
[]
uint16
tData
:=
make
([]
uint16
,
len
(
data
))
switch
r
.
storage
.
(
type
)
{
for
cnt
,
v
:=
range
data
{
case
*
pytorch
.
HalfStorage
:
tData
[
cnt
]
=
uint16
(
float16
.
Fromfloat32
(
v
))
data
:=
r
.
storage
.
(
*
pytorch
.
HalfStorage
)
.
Data
tData
=
make
([]
uint16
,
len
(
data
))
for
cnt
,
v
:=
range
data
{
tData
[
cnt
]
=
uint16
(
float16
.
Fromfloat32
(
v
))
}
case
*
pytorch
.
BFloat16Storage
:
data
:=
r
.
storage
.
(
*
pytorch
.
BFloat16Storage
)
.
Data
tData
=
make
([]
uint16
,
len
(
data
))
for
cnt
,
v
:=
range
data
{
tData
[
cnt
]
=
uint16
(
float16
.
Fromfloat32
(
v
))
}
default
:
return
fmt
.
Errorf
(
"unknown storage type for torch"
)
}
}
var
err
error
var
err
error
...
@@ -44,8 +56,6 @@ func llamaTorchLayerHandler(w io.Writer, r torchWriterTo) error {
...
@@ -44,8 +56,6 @@ func llamaTorchLayerHandler(w io.Writer, r torchWriterTo) error {
return
fmt
.
Errorf
(
"unknown layer type"
)
return
fmt
.
Errorf
(
"unknown layer type"
)
}
}
slog
.
Debug
(
fmt
.
Sprintf
(
"heads = %d"
,
heads
))
tData
,
err
=
llamaRepack
(
tData
,
int
(
heads
),
r
.
t
.
Shape
)
tData
,
err
=
llamaRepack
(
tData
,
int
(
heads
),
r
.
t
.
Shape
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
...
@@ -106,7 +116,6 @@ func (m *LlamaModel) GetTensors() error {
...
@@ -106,7 +116,6 @@ func (m *LlamaModel) GetTensors() error {
for
_
,
l
:=
range
t
{
for
_
,
l
:=
range
t
{
matches
:=
re
.
FindAllStringSubmatch
(
l
.
Name
,
-
1
)
matches
:=
re
.
FindAllStringSubmatch
(
l
.
Name
,
-
1
)
if
len
(
matches
)
>
0
{
if
len
(
matches
)
>
0
{
slog
.
Debug
(
fmt
.
Sprintf
(
"setting handler for: %s"
,
l
.
Name
))
switch
m
.
Format
.
(
type
)
{
switch
m
.
Format
.
(
type
)
{
case
*
TorchFormat
:
case
*
TorchFormat
:
wt
:=
l
.
WriterTo
.
(
torchWriterTo
)
wt
:=
l
.
WriterTo
.
(
torchWriterTo
)
...
@@ -182,10 +191,8 @@ func (m *LlamaModel) WriteGGUF(ws io.WriteSeeker) error {
...
@@ -182,10 +191,8 @@ func (m *LlamaModel) WriteGGUF(ws io.WriteSeeker) error {
"llama.attention.head_count"
:
uint32
(
m
.
Params
.
AttentionHeads
),
"llama.attention.head_count"
:
uint32
(
m
.
Params
.
AttentionHeads
),
"llama.attention.head_count_kv"
:
uint32
(
m
.
Params
.
KeyValHeads
),
"llama.attention.head_count_kv"
:
uint32
(
m
.
Params
.
KeyValHeads
),
"llama.attention.layer_norm_rms_epsilon"
:
float32
(
m
.
Params
.
NormEPS
),
"llama.attention.layer_norm_rms_epsilon"
:
float32
(
m
.
Params
.
NormEPS
),
//"general.file_type": uint32(1),
"general.file_type"
:
uint32
(
2
),
"general.file_type"
:
uint32
(
2
),
"tokenizer.ggml.model"
:
"gpt2"
,
//"tokenizer.ggml.model": "llama",
"tokenizer.ggml.model"
:
"gpt2"
,
"tokenizer.ggml.tokens"
:
m
.
Vocab
.
Tokens
,
"tokenizer.ggml.tokens"
:
m
.
Vocab
.
Tokens
,
"tokenizer.ggml.token_type"
:
m
.
Vocab
.
Types
,
"tokenizer.ggml.token_type"
:
m
.
Vocab
.
Types
,
...
@@ -193,8 +200,6 @@ func (m *LlamaModel) WriteGGUF(ws io.WriteSeeker) error {
...
@@ -193,8 +200,6 @@ func (m *LlamaModel) WriteGGUF(ws io.WriteSeeker) error {
"tokenizer.ggml.bos_token_id"
:
uint32
(
m
.
Params
.
BoSTokenID
),
"tokenizer.ggml.bos_token_id"
:
uint32
(
m
.
Params
.
BoSTokenID
),
"tokenizer.ggml.eos_token_id"
:
uint32
(
m
.
Params
.
EoSTokenID
),
"tokenizer.ggml.eos_token_id"
:
uint32
(
m
.
Params
.
EoSTokenID
),
"tokenizer.ggml.unknown_token_id"
:
uint32
(
0
),
"tokenizer.ggml.unknown_token_id"
:
uint32
(
0
),
//"tokenizer.ggml.add_bos_token": true,
//"tokenizer.ggml.add_eos_token": false,
}
}
if
len
(
m
.
Vocab
.
Merges
)
>
0
{
if
len
(
m
.
Vocab
.
Merges
)
>
0
{
...
...
convert/safetensors.go
View file @
d355d202
...
@@ -131,6 +131,8 @@ func (m *SafetensorFormat) readTensors(fn string, offset uint64, params *Params)
...
@@ -131,6 +131,8 @@ func (m *SafetensorFormat) readTensors(fn string, offset uint64, params *Params)
shape
[
i
]
=
uint64
(
data
.
Shape
[
i
])
shape
[
i
]
=
uint64
(
data
.
Shape
[
i
])
}
}
slog
.
Debug
(
fmt
.
Sprintf
(
"'%45s': '%30s' %10d [%#v]"
,
k
,
ggufName
,
size
,
data
.
Shape
))
t
:=
llm
.
Tensor
{
t
:=
llm
.
Tensor
{
Name
:
ggufName
,
Name
:
ggufName
,
Kind
:
kind
,
Kind
:
kind
,
...
...
convert/torch.go
View file @
d355d202
...
@@ -33,11 +33,15 @@ type TorchFormat struct{}
...
@@ -33,11 +33,15 @@ type TorchFormat struct{}
func
(
tf
*
TorchFormat
)
GetTensors
(
dirpath
string
,
params
*
Params
)
([]
llm
.
Tensor
,
error
)
{
func
(
tf
*
TorchFormat
)
GetTensors
(
dirpath
string
,
params
*
Params
)
([]
llm
.
Tensor
,
error
)
{
slog
.
Debug
(
"getting torch tensors"
)
slog
.
Debug
(
"getting torch tensors"
)
//files, err := filepath.Glob(filepath.Join(dirpath, "pytorch_model-*.bin"))
var
files
[]
string
files
,
err
:=
filepath
.
Glob
(
filepath
.
Join
(
dirpath
,
"consolidatedr.*.pth"
))
var
err
error
files
,
err
=
filepath
.
Glob
(
filepath
.
Join
(
dirpath
,
"consolidated.*.pth"
))
if
err
!=
nil
{
if
err
!=
nil
{
slog
.
Error
(
"didn't find any torch files"
)
files
,
err
=
filepath
.
Glob
(
filepath
.
Join
(
dirpath
,
"pytorch_model-*.bin"
))
return
nil
,
err
if
err
!=
nil
{
slog
.
Error
(
"didn't find any torch files"
)
return
nil
,
err
}
}
}
var
offset
uint64
var
offset
uint64
...
@@ -78,7 +82,7 @@ func (tf *TorchFormat) GetTensors(dirpath string, params *Params) ([]llm.Tensor,
...
@@ -78,7 +82,7 @@ func (tf *TorchFormat) GetTensors(dirpath string, params *Params) ([]llm.Tensor,
slog
.
Error
(
err
.
Error
())
slog
.
Error
(
err
.
Error
())
return
nil
,
err
return
nil
,
err
}
}
slog
.
Debug
(
fmt
.
Sprintf
(
"
finding name for '%s' -> '%s'
"
,
k
.
(
string
),
ggufName
))
slog
.
Debug
(
fmt
.
Sprintf
(
"
'%35s': '%30s' %10d [%#v]
"
,
k
.
(
string
),
ggufName
,
size
,
tshape
))
shape
:=
[]
uint64
{
0
,
0
,
0
,
0
}
shape
:=
[]
uint64
{
0
,
0
,
0
,
0
}
for
i
:=
range
tshape
{
for
i
:=
range
tshape
{
...
@@ -236,7 +240,7 @@ func (r torchWriterTo) WriteTo(w io.Writer) (n int64, err error) {
...
@@ -236,7 +240,7 @@ func (r torchWriterTo) WriteTo(w io.Writer) (n int64, err error) {
return
0
,
r
.
handler
(
w
,
r
)
return
0
,
r
.
handler
(
w
,
r
)
}
}
switch
r
.
storage
.
(
type
)
{
switch
storage
:=
r
.
storage
.
(
type
)
{
case
*
pytorch
.
FloatStorage
:
case
*
pytorch
.
FloatStorage
:
slog
.
Warn
(
fmt
.
Sprintf
(
"unexpected storage found for layer '%s'; skipping"
,
r
.
t
.
Name
))
slog
.
Warn
(
fmt
.
Sprintf
(
"unexpected storage found for layer '%s'; skipping"
,
r
.
t
.
Name
))
return
0
,
nil
return
0
,
nil
...
@@ -259,6 +263,28 @@ func (r torchWriterTo) WriteTo(w io.Writer) (n int64, err error) {
...
@@ -259,6 +263,28 @@ func (r torchWriterTo) WriteTo(w io.Writer) (n int64, err error) {
return
0
,
err
return
0
,
err
}
}
}
}
case
*
pytorch
.
BFloat16Storage
:
data
:=
r
.
storage
.
(
*
pytorch
.
BFloat16Storage
)
.
Data
switch
r
.
t
.
Kind
{
case
0
:
if
err
=
binary
.
Write
(
w
,
r
.
bo
,
data
);
err
!=
nil
{
return
0
,
err
}
case
1
:
tData
:=
make
([]
uint16
,
len
(
data
))
for
cnt
,
v
:=
range
data
{
tData
[
cnt
]
=
uint16
(
float16
.
Fromfloat32
(
v
))
}
if
err
=
binary
.
Write
(
w
,
r
.
bo
,
tData
);
err
!=
nil
{
return
0
,
err
}
default
:
return
0
,
fmt
.
Errorf
(
"unknown storage kind: %d"
,
r
.
t
.
Kind
)
}
default
:
return
0
,
fmt
.
Errorf
(
"unknown storage type: %T"
,
storage
)
}
}
return
0
,
nil
return
0
,
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