quantization 指定哪些层使用哪种精度,顶层 rules 指定执行 kernel。加载未量化的 FP16、BF16 或 FP32 checkpoint 后,系统按配置对权重做 PTQ。
加载 kernel policy
将下一节的配置保存为kernel-policy.yaml。在已安装 PhyAI 和 humming-kernels 的 Python 环境中,通过环境变量指定文件:
run_model.py 替换为你的模型启动脚本,并保留原来的 checkpoint 等参数。模型应以 BF16 或 FP16 运行。
使用 Python 时,把包含 KernelConfig 的配置传给 EngineArgs(config=config):
kernel_policy 和 config.kernel.config_path。
PHYAI_KERNEL_CONFIG 会在 Engine 启动时覆盖 Python 或服务 YAML 的设置。改用后两种入口前,清除旧环境变量:
定制量化范围和精度
下面是一份完整配置:MLP 权重用 INT4,attention 投影权重用 INT8,第 0 层保持原精度。示例假设层 prefix 以model.layers.<层号> 开头;使用时替换成自己模型的 prefix。
quantization.rules 从上往下匹配,第一条命中后停止。把排除规则放在前面;scheme: null 表示跳过,default: null 表示未匹配的层保留其配置精度。当前加载时 PTQ 使用 method: rtn、stage: load。
每条量化规则的 match 只能使用一种选择器:
这些名字是创建 PhyAI Linear 时传入的
prefix,不是 checkpoint 的 tensor key,也不一定等于 named_modules() 的路径。查看模型创建 Linear 的位置,确认其 prefix。如果模型融合了 q_proj/k_proj/v_proj,要匹配融合层 qkv_proj;融合的 gate_proj/up_proj 同理匹配 gate_up_proj。
常用精度字段:
常用组合如下。
input: null 表示 BF16/FP16 激活;设置 A8 时,同时指定 granularity: per_channel 和 dynamic: true。
例如,给某条规则替换以下
weight 和 input,即可改用 FP8 E4M3 block A8:
quantization 后,重新创建 Engine 并加载权重。已有实例不会随着 YAML 修改而切换精度。省略整个 quantization 段时,系统沿用 checkpoint 和模型的原有配置;已有量化 checkpoint 应使用其原有加载方式。
定制执行 kernel
顶层rules 配置执行 kernel。可以按算子、角色、dtype、设备和调用形状限制候选。例如,在上面文件的顶层 rules 列表中追加 attention 规则:
kernel 的
match 中,各字段必须同时满足。常用写法包括 dtype.input: bf16、quant.format: int4、device.arch: ">=sm80"、shape.M: "<=64"。这里的 role 是算子角色,不是层 prefix;kernel match 不接受量化规则的 glob 或 regex。
普通 kernel 规则必须选择一种候选配置:
restrict_to:一个完整 kernel ID,或 ID 通配符,例如"humming.gemm.*"。prefer:完整 kernel ID 的有序列表,例如[flashinfer.gemm.bf16, torch.gemm.bf16]。未列出的普通实现不会自动加入候选;默认允许兼容的 reference 回退。
defaults: {fallback: error}。Humming 量化权重必须使用兼容的 Humming kernel,不能强制交给普通 BF16 GEMM。
params 传递所选 kernel 支持的参数。例如,给 Humming 的规则加上:
params 不会合并。改变权重格式请修改 quantization;仅修改 prefer、restrict_to 或 params 不会重新量化权重。
检查配置
先列出当前安装版本的 GEMM kernel ID:INT8,把层号改成 0 则返回 None。解析检查不验证 checkpoint 内容、GPU 能力或模型精度;随后用正常模型入口加载和推理。

