Download zscore.py from chen459664/quantization2: direct link, hf CLI and curl.
- Browser
- Download file 1.51 kB
-
https://huggingface.co/chen459664/quantization2/resolve/0dfd8d2a71a75ba1b625c8e2b4d43e6ad0e22dfd/zscore.py
- Command line
-
hf download hf://chen459664/quantization2@0dfd8d2a71a75ba1b625c8e2b4d43e6ad0e22dfd/zscore.py
-
curl -L -o zscore.py https://huggingface.co/chen459664/quantization2/resolve/0dfd8d2a71a75ba1b625c8e2b4d43e6ad0e22dfd/zscore.py
1.51 kB
| import numpy as np | |
| import json | |
| def kurtosis_outlier_layers(kurtosis_values, threshold=3.0, method="subtract"): | |
| """ | |
| 根据 Kurtosis 值列表,计算差分并用 z-score 检测异常层 | |
| 参数: | |
| kurtosis_values (list or np.ndarray): Kurtosis 值序列 (s1, s2, ..., sn) | |
| threshold (float): z-score 阈值 (默认 3.0) | |
| method (str): 差分方式 | |
| "subtract" -> si+1 - si | |
| "divide" -> si+1 / si | |
| 返回: | |
| z_scores (np.ndarray): 差分的 z-score | |
| outlier_indices (list): 被判定为异常的层索引 (对应原始 Kurtosis 序列中的层号) | |
| """ | |
| values = np.array(kurtosis_values, dtype=float) | |
| # Step 1: 差分 | |
| if method == "subtract": | |
| diffs = np.diff(values) # s2-s1, s3-s2, ... | |
| elif method == "divide": | |
| diffs = values[1:] / values[:-1] | |
| else: | |
| raise ValueError("method must be 'subtract' or 'divide'") | |
| # Step 2: 计算 z-score | |
| mean = np.mean(diffs) | |
| std = np.std(diffs, ddof=1) # 样本标准差 | |
| z_scores = abs((diffs - mean) / std) | |
| results = [(i+1, z) for i, z in enumerate(z_scores)] | |
| results.sort(key=lambda x: x[1], reverse=False) | |
| print(results) | |
| results = [i[0] for i in results] | |
| return results | |
| k_path = '/mnt/bn/life-mllm/users/cxr/quantization/lm-quant-toolkit/kurtosis_means/kurtosis_means-Llama-2-7b-hf.json' | |
| with open(k_path, "r", encoding="utf-8") as f: | |
| kurtosis_values = json.load(f) | |
| kurtosis_outlier_layers(kurtosis_values) |