量化模型并证明它达标 —— 或者拿到一个明确的失败结论。 给它一个检查点、一个精度容忍度、一个性能目标;它在容器里跑…
30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/xiciyang/inference-quantization.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 11 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 12 处,展示前 12 条)
- 读取本地文件src/config.mjs:128
const raw = await fs.readFile(path, 'utf8') - 读取本地文件src/version.mjs:25
return readFileSync(join(PACKAGE_ROOT, 'manifest.yaml'), 'utf8') - 读取本地文件src/validate-existing.mjs:63
if (!existsSync(path)) { - 读取本地文件src/integrity.mjs:52
const stream = createReadStream(path, { highWaterMark: 4 * 1024 * 1024 }) - 发起网络请求src/util/http.mjs:29
const req = mod.request( - 执行外部命令来自配置/变量src/util/proc.mjs:31
child = spawn(cmd, args, { - 读取本地文件src/util/proc.mjs:112
await access(p, constants.X_OK) - 发起网络请求src/testing/perf.mjs:31
const req = mod.request({ - 执行外部命令来自配置/变量src/serving-client.mjs:95
this.child = spawn(process.execPath, [resolveServerEntry(this.serverPath)], { - 发起网络请求src/serving-client.mjs:106
await this.request('initialize', { - 发起网络请求src/serving-client.mjs:157
const res = await this.request('tools/call', { name, arguments: args }) - 发起网络请求src/serving-client.mjs:167
const res = await this.request('tools/list', {})
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
量化检查点并在 DSH 中验证:用无泄漏的校准集做 PTQ,通过真实服务端点独立跑精度与性能门禁,自动降级,审计签字或回滚。
README
由 DeepSeek 最新模型翻译生成inference-quantization
量化模型并证明它达标 —— 或者拿到一个明确的失败结论。 给它一个检查点、一个精度容忍度、一个性能目标;它在容器里跑 PTQ(默认 AWQ + INT4,走 llmcompressor),然后过两道独立的门禁:
- 精度门禁 —— 在无泄漏的切分上算困惑度退化(校准集与测试集的内容哈希交集必须为空;没有手动放行通道)。
- 测量成立性门禁 —— 这个数到底有没有意义?输出均匀、无区分力、结果与输入无关、权重不健康、「从未评到分」,一律以 E_MEASUREMENT_INVALID 失败,而不是报成「0% 损失」。
曾经有一份下载中断的模型量化了 436 秒,还被签收为「精度零损失」,因为它的输出是均匀分布,两个困惑度逐位相同。这两道门禁就是为这起事故而设。另一半是源模型结构预检(E_SOURCE_MODEL_INVALID)。
- 零运行时依赖,只用 Node 内建模块
- 源模型只读挂载,量化后重新校验哈希
- 降级有界:INT4 → INT8 → FP8 → W8A16 →(只出 QAT 计划,不训练)
- 每次运行都写哈希链审计轨迹
不适合你的情况:你只想要 llmcompressor 或 AutoAWQ 的配方 —— 量化由它们做;这一层是包在它们外面的证明层(门禁、降级、审计、回滚)。
展开完整文档(README 剩余 1 节)
inference-quantization
量化模型并证明它达标 —— 或者拿到一个明确的失败结论。 给它一个检查点、一个精度容忍度、一个性能目标;它在容器里跑 PTQ(默认 AWQ + INT4,走 llmcompressor),然后过两道独立的门禁:
- 精度门禁 —— 在无泄漏的切分上算困惑度退化(校准集与测试集的内容哈希交集必须为空;没有手动放行通道)。
- 测量成立性门禁 —— 这个数到底有没有意义?输出均匀、无区分力、结果与输入无关、权重不健康、「从未评到分」,一律以 E_MEASUREMENT_INVALID 失败,而不是报成「0% 损失」。
曾经有一份下载中断的模型量化了 436 秒,还被签收为「精度零损失」,因为它的输出是均匀分布,两个困惑度逐位相同。这两道门禁就是为这起事故而设。另一半是源模型结构预检(E_SOURCE_MODEL_INVALID)。
- 零运行时依赖,只用 Node 内建模块
- 源模型只读挂载,量化后重新校验哈希
- 降级有界:INT4 → INT8 → FP8 → W8A16 →(只出 QAT 计划,不训练)
- 每次运行都写哈希链审计轨迹
不适合你的情况:你只想要 llmcompressor 或 AutoAWQ 的配方 —— 量化由它们做;这一层是包在它们外面的证明层(门禁、降级、审计、回滚)。
真实路径需要 GPU、Docker 和量化器镜像(镜像缺失时 E_METHOD_UNAVAILABLE 就是明确的失败 —— 它绝不会悄悄「通过」)。
安装(DSH 插件 / 命令行)
dsh plugin --profile <name> add github:xiciyang/inference-quantization
or, from this repo:
npm pack && npm install -g ./xiciyang-inference-quantization-0.1.0.tgz
给模型 + 精度容忍 + 性能目标,量化它并证明它达标 —— 或者给你一个明确的失败结论。
输入 → 源模型哈希基线 + 结构预检(是完整模型吗) → 数据集准备(内容哈希去泄漏) → 选方法(默认 AWQ + INT4,走 llmcompressor) → 容器内 PTQ(源目录只读挂载) → 精度对比(同一测试集算困惑度退化) → 性能对比(经 MCP 让 inference-serving 起真实端点测吞吐) → 双门禁判定:数值是否达标 ∧ 测量是否成立 → 通过 → 写入量化矩阵标记 verified → 失败 → 降级 INT4→INT8→FP8→W8A16→(QAT 计划)→ 回退 → 源模型哈希复核(必须未变)
- 零运行时依赖(只用 Node 内建模块)
- 精度门禁独立:量化不能自己定阈值、自己签收精度
- 测量成立性门禁:不只看「损失是多少」,还看「这个数成不成立」(见下)
- 源模型结构预检:量化之前先确认这是一个完整的模型,不只是一堆能打开的文件
- 去泄漏是硬门禁:校准集与测试集的内容哈希交集必须为空,无人为放行通道
- 源模型只读:独立输出目录 + 量化前后哈希校验
- 降级有界:最多 5 级,第 5 级只出 QAT 计划不执行训练
为什么「测量成立性」必须单独判
真机出过一次事故:一份下载中断的模型(338 个张量里 223 个整块为零,含 model.norm.weight)被完整量化了 436 秒,并签收了「精度零损失」。原因是那份模型的输出恒为均匀分布,于是 perplexity 恰好等于词表大小、基线与候选逐位相同、drop = 0% —— 数值在数学上没错,在语义上毫无意义。
现在有两层独立防线:
| 防线 | 回答的问题 | 失败码 |
| 源模型结构预检 | 内容是不是一个完整模型(截断 / 整块为零 / 层数不符 / 分片缺失) | E_SOURCE_MODEL_INVALID |
| 测量成立性门禁 | 这次测量成不成立(均匀输出 / 无区分力 / 与输入无关 / 权重不健康 / 没评到分) | E_MEASUREMENT_INVALID |
两条都是不可降级的失败 —— 换量化档位解决不了,所以直接停,不浪费 GPU。status=verified 需要三条同时成立:数值达标 ∧ 决策为 sign ∧ 测量成立。
目录哈希(「内容有没有被改动」)与结构预检(「是不是完整模型」)是两个不同的问题。
只做前者,就会在一份从未损坏过的坏输入上一路绿灯。
安装
git clone https://github.com/xiciyang/inference-quantization.git
cd inference-quantization && npm pack
dsh plugin --profile <name> add ./xiciyang-inference-quantization-0.1.0.tgz
尚未发布到 npm(npm install -g 暂不可用);用上面的源码打包路径安装。
作为 DSH 插件:dsh plugin --profile web add <tgz>,重启后生效。
依赖:inference-serving(部署验证,通过 MCP 调用)。本插件按下列顺序定位它: options.servingPath → ~/.ai-infra/config/serving-path.txt → 同级目录 ../inference-serving → node_modules/。
找不到会明确报 E_SERVING_UNAVAILABLE,并列出探测过的路径。
快速上手
inference-quantization doctor # 环境 / 方法 / 镜像 / 沙箱 / 契约 自检 inference-quantization image verify --build # 量化镜像验证(依赖清单 + 漏洞扫描 + 签名 + digest)
inference-quantization quantize /path/to/models/<model> \
--max-accuracy-drop-pct 5 --min-perf-gain-pct 20
inference-quantization list --json # 量化矩阵 inference-quantization report <runId> # 完整报告
命令
| 命令 | 说明 |
| quantize <model> | 量化并过双门禁(幂等:同源+同方法+同切分 → 同一 runKey) |
| report [selector] | 读量化报告;不给 selector 则列全部 run |
| list [--status S] [--verified] | 列出量化矩阵(方法/精度/性能/平台/状态 五要素 + 完整性) |
| rollback <selector> [--purge-output] | 回退一次 run;可选删除产出目录(只删自己登记的,且校验不是源目录) |
| qat [--authorize --allow-sandbox-degrade] | 产出 QAT 计划(不执行训练) |
| dataset <prepare\|verify\|list> | 校准/测试集准备与去泄漏复核 |
| image <verify\|build> | 量化镜像验证 |
| metrics / audit-verify / doctor / contract | 指标 / 审计链 / 自检 / testing-core 契约 |
退出码:0 成功 · 1 业务失败 · 2 用法错误 · 3 需要确认。
MCP 工具
inference_quantization_quantize · validate · get_report · list · rollback · qat_plan (另有运维用 dataset_prepare / dataset_verify / image_verify / metrics / audit_verify / doctor)
validate(新增,2026-09-29):验收一个已存在的量化 checkpoint(不重新量化)——
baseline = 量化前的原始模型,candidate = 已有产出目录。
它复用与 quantize 完全相同的判据与阈值语义(同一个 parityCheck / assertMeasurementValid / evaluateAccuracyGate / evaluateGates / verifyQuantOutput / dataset prepare,同一条"显式参数 > gates.yaml > 拒绝"的阈值链),不改 quantize 的门禁语义,也不写量化矩阵(不改既有工具行为);验收记录落在 <runDir>/validate-existing/<id>.json。
解的是「外部产出的量化 checkpoint(例如 QAT 产出)无法被单独验收」这个跨插件缺口。
契约:../inference-contracts/contracts/qat-verification-contract.md。
stdio 与 streamable-http 两种传输:node mcp/server.mjs [--http --port N]。
DSH 侧走原生工具注册,两条通道共用 src/tools.mjs 的同一份规格与 src/api.mjs 的实现。
三道硬门禁
1. 去泄漏(E_CALIB_LEAKAGE_DETECTED)
判据是 内容 sha256 交集为空,不是"索引不重叠"。
同一段文本经常同时出现在数据集的 train / test 两个 split 里,按索引判断发现不了。
流程:容器内下载 → 按内容哈希去重 → 按种子切分 → 自检; 宿主侧用同一套纯函数独立复核(重算哈希、逐条比对血缘),不采信容器的自检结论。
血缘(来源 URL / revision / 种子 / 两段哈希清单 + listDigest)落盘,事后可重算。
没有"确认后放行"这条路径 —— 泄漏会让精度数字失去意义。
2. 源模型只读(E_SOURCE_MODEL_MODIFIED)
量化前后对源目录算内容哈希(排序后的 相对路径\0文件哈希 再哈希,不含 mtime/权限)。
不一致即中止。第一道防线是输出目录安全检查:不得等于 / 位于 / 祖先于源目录。
3. 双门禁(精度 + 性能)
- 精度阈值必须调用方传入(--max-accuracy-drop-pct);未传则读 ~/.ai-infra/config/gates.yaml;两者都无 → 拒绝执行(E_THRESHOLD_NOT_PROVIDED)。插件内没有默认阈值 ——否则「量化不能自己签收精度」就名存实亡。
- 精度损失 ≥ 阈值的 90% → 判为「接近上限」,需回传令牌确认后才签收。
- 性能只在精度通过后才测(精度不及格测性能是浪费)。
降级链
awq-w4a16(L1) → int8-w8a8(L2) → fp8-dynamic(L3) → w8a16(L4) → QAT 计划(L5) → 回退
- 最多 5 级;第 5 级只产出计划并停下等裁决(E_QAT_REQUIRES_APPROVAL),不执行训练;
- 不可降级的失败立即中止:源模型被改、校准泄漏、阈值缺失、serving 不可用、镜像未验证 ——换档位没用,重试只是假装在努力;
- 非最终档位用抽样粗筛(≥200 条,阈值放宽 2×)省成本,最终签收必须完整评测;
- 状态机最长路径 15 步(logicprobe 穷举实测)→ 超时预算按 16 留余量。
为什么是 llmcompressor 而不是 autoawq
autoawq 在 PyPI 无 wheel,其内核包 autoawq-kernels 只有 x86_64/win_amd64 wheel ——本机是 aarch64,装不上。而 llmcompressor 是纯 Python wheel,其 AWQ 变换器只依赖 torch。
语义上仍是 "AWQ + INT4"。已真机验证:产出能被 vLLM 加载并做真实前向(详见 docs/step0/PROJECT_CONTEXT.md §11)。
配置
~/.ai-infra/config/gates.yaml(首次运行生成空模板)
version: 1
max_accuracy_drop_pct: null # null = 未设置 → 调用时必须显式传参 min_perf_gain_pct: null near_limit_factor: 0.9 coarse_screen: min_samples: 200 relax_factor: 2.0
风险分级 / 网络策略 / headless 三份沿用 inference-serving 已固化的文件。
插件配置(DSH 行内 config)
root / quantImage / outputRoot / calibrationSamples / calibrationSeed /
datasetRepo / datasetConfig / maxDegradeSteps / quantTimeoutMs / evalTimeoutMs /
servingPath / headless / modelRoots / containerRuntime / exposeAdminTools / logLevel。
未知键、类型不符、maxDegradeSteps < 1 都会加载期响亮失败。
权限与安全
能力清单(manifest.yaml 是白名单)
| capability | risk | resources |
| quantize | write | model:read gpu:write disk:write state:write network:egress |
| get_report / list | read | state:read |
| rollback | write | disk:write state:write |
| qat_plan | write | state:write model:read |
| dataset_prepare / image_verify / image_build | write | network:egress disk:write state:write |
not_provided 显式声明设计上不做的事:qat_execute(训练,R3)、modify_source_model、 disable_leakage_gate、sudo_exec、install_driver。
沙箱
R0 只读不问沙箱;R2(本插件全部写操作)走容器级; R3–R5(含 QAT 训练)需 VM 级 → 本机没有 → 一律拒绝。
沙箱不可用不静默降级(E_SANDBOX_UNAVAILABLE)。
量化镜像
image verify 检查四件事并明确报告缺哪一项(不假装通过):固定 base digest(docker/base-digest.txt)、依赖版本清单、漏洞扫描(trivy/grype/docker scout)、签名(cosign/docker trust)。
未通过验证的镜像在量化时会被拒绝,除非显式传 allow_unverified_image(记入审计)。
量化镜像必须独立于推理镜像:llmcompressor 要求 compressed-tensors==0.19.0,而推理镜像钉 0.17.0 —— 装进推理镜像会破坏 vLLM 的依赖。
共享状态
~/.ai-infra/state/quantization-matrix.yaml 量化矩阵(五要素 + 去泄漏/哈希证据) ~/.ai-infra/state/datasets/ 数据集 + 血缘 ~/.ai-infra/state/images/ 镜像元数据 ~/.ai-infra/quantized/ 量化产出(独立于模型根目录) ~/.ai-infra/logs/audit/inference-quantization/ 审计({date}.jsonl,只追加 + 哈希链) ~/.ai-infra/reports/inference-quantization/ 完整报告
内置共享库(@internal)
题面把精度/性能验证划给共享库 @ai-infra/testing-core,但该库在本机不存在(npm/node_modules/工作区三处均无)。
按授权,本包内置最小实现并标注 @internal:
- src/testing/parity.mjs —— parityCheck():按 token 加权的 mean NLL / perplexity
- src/testing/perf.mjs —— perfValidation():走真实服务端点测 TTFT / decodeTps / throughput
- 契约版本 1.0.0,用 inference-quantization contract 可打印
- 真库一旦发布,替换 provider 即可,调用方零改动(迁移脚本见 scripts/migrate-to-testing-core.mjs)
开发
npm test # 单元 + 集成(不需要 GPU/Docker)
npm run check # 包规范 + 量化专项自检
npm run demo # 真机端到端演示(需要 GPU + Docker + 量化镜像)
量化方法插件化:新增一种方法 = 在 src/backends/ 加一个声明 + 在 docker/scripts/quantize.py 加一条 recipe,核心流程零改动。契约见 skills/quantization-method-authoring/SKILL.md。
License
MIT
兼容性
| 项 | 范围 |
| Node.js | >= 20.11 |
| DSH | engines.dsh: ">=0.2.0 <0.3.0",已在 0.2.0-rc.2 上验证 |
| 操作系统 | Linux / macOS(x64 / arm64);量化本身需要容器运行时 |
| 运行时依赖 | 零(只用 Node 内建模块);量化在容器内完成 |
| 后端 | Docker / Podman + llmcompressor 镜像 |
测试分层:npm run test:unit 在无 GPU 的 CI(GitHub 托管 runner)上运行; npm run test:integration 需要 GPU + 容器 + nvidia runtime —— 条件不满足时显式报 E_METHOD_UNAVAILABLE,不会静默跳过。本机实测 146/146。
跨包契约套件(inference-contracts)属于 monorepo 的内部闸门:单独 clone 本仓库时 npm run test:contract 会明确跳过,不会伪装成通过。
许可
MIT,见 LICENSE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
xiciyang/inference-quantization
量化模型并证明它达标 —— 或者拿到一个明确的失败结论。 给它一个检查点、一个精度容忍度、一个性能目标;它在容器里跑…
相关插件 · 其他
模型破甲清洗YuJunZhiXue/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 14,822已汉化DeepSeek 客户端
73
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 718已汉化DSH
71.2
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,261已汉化DSH
70.7
破甲评测WoYun520/dsh-purge
在本机分离宿主拦截与模型拒绝,做受控红队评测
★ 199已汉化DSH
69.7