chen459664's picture
Add files using upload-large-folder tool
55c92b3 verified
#!/usr/bin/env python
"""Console script for lm-quant-toolkit."""
import argparse
import sys
from timeit import default_timer as timer
from lm_quant_toolkit.prep.fnorm import calc_fnorm_for_model
from lm_quant_toolkit.prep.sensitivity import measure_sensitivity
from lm_quant_toolkit.prep.wdist import calculate_kurtosis_llm
from lm_quant_toolkit.utils.hub import (
LLAMA_MODELS,
get_hf_model_storge_base_dir,
)
def get_parser_args():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
parser_sensi = subparsers.add_parser(
"sensi", help="Evaluate and dump sensitivity data"
)
parser_sensi.set_defaults(which="sensi")
parser_sensi.add_argument(
"--model",
type=str,
nargs="+",
default="1",
help="Model to evaluate",
)
parser_sensi.add_argument(
"--quant-method",
type=str,
choices=[
"hqq",
"rtn",
"bnb",
],
default="hqq",
help="Output file location",
)
parser_sensi.add_argument(
"--output-file",
type=str,
default="sensi.csv",
help="Output file location",
)
parser_sensi.add_argument(
"--config",
default=None,
type=str,
nargs="+",
help="bit-group configurations",
)
parser_sensi.add_argument(
"--calib-dataset",
default=None,
type=str,
nargs="+",
help="calibration dataset(s) to use",
)
parser_fnorm = subparsers.add_parser("fnorm", help="Evaluate and dump FNorm data")
parser_fnorm.set_defaults(which="fnorm")
parser_fnorm.add_argument(
"--model",
type=str,
nargs="+",
help="Model to evaluate",
)
parser_fnorm.add_argument(
"--output-dir",
type=str,
default="data",
help="Output directory",
)
parser_kurt = subparsers.add_parser(
"kurtosis", help="Evaluate and dump model kurtosis data"
)
parser_kurt.set_defaults(which="kurtosis")
parser_kurt.add_argument(
"--model",
type=str,
nargs="+",
help="Model to evaluate",
)
parser_kurt.add_argument(
"--output-dir",
type=str,
default="data",
help="Output directory",
)
args = parser.parse_args()
return parser, args
def main():
parser, base = get_parser_args()
print(base)
if not hasattr(base, "which"):
parser.print_help()
return 2
try:
if base.which == "sensi":
main_sensi(base)
elif base.which == "fnorm":
main_fnorm(base)
elif base.which == "kurtosis":
main_kurt(base)
except Exception as e:
print(e)
return 1
return 0
def main_sensi(args):
csv_fp = args.output_file
models = args.model
cfgs = args.config
calib_ds = args.calib_dataset
quant_method = args.quant_method
measure_sensitivity(models, quant_method, cfgs, calib_ds, csv_fp)
def main_fnorm(args):
if not args.model or len(args.model) < 1:
raise ValueError("At least one model is required")
output_dir = args.output_dir
for model_id in args.model:
model = LLAMA_MODELS[model_id]
if not model:
raise ValueError(f"Unsupported model: {model_id}")
t1 = timer()
base_dir = model.get("base_dir", None)
model_base_dir = get_hf_model_storge_base_dir(model_id, base_dir)
calc_fnorm_for_model(
model_id,
model_base_dir,
model["layers"],
output_dir,
)
t2 = timer()
print(f"Finished {model_id} Frobenius norm metrics calc in {t2 - t1} seconds")
def main_kurt(args):
if not args.model or len(args.model) < 1:
raise ValueError("At least one model is required")
output_dir = args.output_dir
for model_id in args.model:
model = LLAMA_MODELS[model_id]
print(model)
if not model:
raise ValueError(f"Unsupported model: {model_id}")
t1 = timer()
base_dir = model.get("base_dir", None)
# print(base_dir)
model_base_dir = get_hf_model_storge_base_dir(model_id, base_dir)
print(model_base_dir)
calculate_kurtosis_llm(
model_id,
model_base_dir,
model["layers"],
output_dir,
)
t2 = timer()
print(f"Finished {model_id} Kurtosis metrics calc in {t2 - t1} seconds")
if __name__ == "__main__":
sys.exit(main()) # pragma: no cover