convert.py : --vocab-only generates false but valid params (#7027)

An example of how this might be used in the style of baby-llama will be attached with this PR.
This commit is contained in:
20kdc 2024-05-08 13:22:32 +01:00 committed by GitHub
parent 229ffff872
commit ad211edef5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1508,25 +1508,27 @@ def main(args_in: list[str] | None = None) -> None:
if args.big_endian: if args.big_endian:
endianess = gguf.GGUFEndian.BIG endianess = gguf.GGUFEndian.BIG
params = Params.load(model_plus) params = None
if params.n_ctx == -1: if args.pad_vocab or not args.vocab_only:
if args.ctx is None: params = Params.load(model_plus)
msg = """\ if params.n_ctx == -1:
The model doesn't have a context size, and you didn't specify one with --ctx if args.ctx is None:
Please specify one with --ctx: msg = """\
- LLaMA v1: --ctx 2048 The model doesn't have a context size, and you didn't specify one with --ctx
- LLaMA v2: --ctx 4096""" Please specify one with --ctx:
parser.error(textwrap.dedent(msg)) - LLaMA v1: --ctx 2048
params.n_ctx = args.ctx - LLaMA v2: --ctx 4096"""
parser.error(textwrap.dedent(msg))
params.n_ctx = args.ctx
if args.outtype: if args.outtype:
params.ftype = { params.ftype = {
"f32": GGMLFileType.AllF32, "f32": GGMLFileType.AllF32,
"f16": GGMLFileType.MostlyF16, "f16": GGMLFileType.MostlyF16,
"q8_0": GGMLFileType.MostlyQ8_0, "q8_0": GGMLFileType.MostlyQ8_0,
}[args.outtype] }[args.outtype]
logger.info(f"params = {params}") logger.info(f"params = {params}")
model_parent_path = model_plus.paths[0].parent model_parent_path = model_plus.paths[0].parent
vocab_path = Path(args.vocab_dir or args.model or model_parent_path) vocab_path = Path(args.vocab_dir or args.model or model_parent_path)
@ -1539,6 +1541,17 @@ def main(args_in: list[str] | None = None) -> None:
if not args.outfile: if not args.outfile:
raise ValueError("need --outfile if using --vocab-only") raise ValueError("need --outfile if using --vocab-only")
outfile = args.outfile outfile = args.outfile
if params is None:
params = Params(
n_vocab = vocab.vocab_size,
n_embd = 1,
n_layer = 1,
n_ctx = 1,
n_ff = 1,
n_head = 1,
n_head_kv = 1,
f_norm_eps = 1e-5,
)
OutputFile.write_vocab_only(outfile, params, vocab, special_vocab, OutputFile.write_vocab_only(outfile, params, vocab, special_vocab,
endianess=endianess, pad_vocab=args.pad_vocab) endianess=endianess, pad_vocab=args.pad_vocab)
logger.info(f"Wrote {outfile}") logger.info(f"Wrote {outfile}")