From 8c1d1cbaa513df1b63b9d054395ac1692526f28e Mon Sep 17 00:00:00 2001 From: OwnerSunshine530 Date: Sun, 14 Jun 2026 19:53:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20bench.py=20=E5=8A=A0=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E8=A1=8C=E5=8F=82=E6=95=B0=EF=BC=8C=E6=94=AF=E6=8C=81=E5=AD=90?= =?UTF-8?q?=E8=BF=9B=E7=A8=8B=E6=96=B9=E5=BC=8F=E8=B7=91=EF=BC=88=E7=BB=95?= =?UTF-8?q?=E5=BC=80=E5=86=85=E6=A0=B8torch=E9=99=90=E5=88=B6=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- 代码/code/bench.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/代码/code/bench.py b/代码/code/bench.py index e86967e..2d04e9e 100644 --- a/代码/code/bench.py +++ b/代码/code/bench.py @@ -115,5 +115,38 @@ def run_once(config_override=None, batch_size=50, max_batches=None, max_feasign_ return res +def _parse_args(): + import argparse + ap = argparse.ArgumentParser(description="CTI 推理测量闭环(以子进程方式跑:!python bench.py ...)") + ap.add_argument("--smoke", type=int, default=None, help="只跑前 N 个 batch(冒烟)") + ap.add_argument("--bs", type=int, default=50, help="batch_size(本地参考)") + ap.add_argument("--fp32", action="store_true", help="FP32 天花板 = 关 fp16 + 关 expert 合并") + ap.add_argument("--no-fp16", action="store_true", help="关闭半精度") + ap.add_argument("--no-merge", action="store_true", help="关闭 expert 合并") + ap.add_argument("--signid", choices=["clamp", "modulo"], default=None, help="sign-id 处理方式") + ap.add_argument("--merge-th", type=float, default=None, help="expert 合并余弦阈值") + ap.add_argument("--keep", type=str, default=None, + help="逗号分隔的 keep_fp32_modules,如 linear,rep_encoder.input_norm") + ap.add_argument("--feasign-none", action="store_true", + help="不截断特征(max_feasign_per_slot=None)") + return ap.parse_args() + + if __name__ == "__main__": - run_once({}) # 默认配置基准 + a = _parse_args() + cfg = {} + if a.fp32: + cfg["fp16"] = False + cfg["expert_merge"] = False + if a.no_fp16: + cfg["fp16"] = False + if a.no_merge: + cfg["expert_merge"] = False + if a.signid: + cfg["signid_mode"] = a.signid + if a.merge_th is not None: + cfg["merge_threshold"] = a.merge_th + if a.keep is not None: + cfg["keep_fp32_modules"] = tuple(x for x in a.keep.split(",") if x) + mf = None if a.feasign_none else {1: 2} + run_once(cfg, batch_size=a.bs, max_batches=a.smoke, max_feasign_per_slot=mf)