convert.py : Get rope scale from HuggingFace models (#2772)

* Get rope scale from HF models

* Save rope scale only for linear scaling

* Rewrite for clarity
This commit is contained in:
Nigel Bosch 2023-08-25 09:41:52 -05:00 committed by GitHub
parent 154725c543
commit 28b2c996ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -105,6 +105,7 @@ class Params:
f_norm_eps: float f_norm_eps: float
f_rope_freq_base: Optional[float] = None f_rope_freq_base: Optional[float] = None
f_rope_scale: Optional[float] = None
ftype: Optional[GGMLFileType] = None ftype: Optional[GGMLFileType] = None
@ -169,6 +170,11 @@ class Params:
f_norm_eps = config["rms_norm_eps"] f_norm_eps = config["rms_norm_eps"]
f_rope_freq_base = config["rope_theta"] if "rope_theta" in config else None f_rope_freq_base = config["rope_theta"] if "rope_theta" in config else None
if "rope_scaling" in config and config["rope_scaling"].get("type") == "linear":
f_rope_scale = config["rope_scaling"].get("factor")
else:
f_rope_scale = None
n_mult = Params.find_n_mult(n_ff, n_embd) n_mult = Params.find_n_mult(n_ff, n_embd)
if "max_sequence_length" in config: if "max_sequence_length" in config:
@ -190,6 +196,7 @@ class Params:
n_head_kv = n_head_kv, n_head_kv = n_head_kv,
f_norm_eps = f_norm_eps, f_norm_eps = f_norm_eps,
f_rope_freq_base = f_rope_freq_base, f_rope_freq_base = f_rope_freq_base,
f_rope_scale = f_rope_scale,
) )
# LLaMA v2 70B params.json # LLaMA v2 70B params.json
@ -773,6 +780,9 @@ class OutputFile:
if params.f_rope_freq_base: if params.f_rope_freq_base:
self.gguf.add_rope_freq_base(params.f_rope_freq_base) self.gguf.add_rope_freq_base(params.f_rope_freq_base)
if params.f_rope_scale:
self.gguf.add_rope_scale_linear(params.f_rope_scale)
if params.ftype: if params.ftype:
self.gguf.add_file_type(params.ftype) self.gguf.add_file_type(params.ftype)