MAC-AutoML/MindPipe · 上手攻略
- 仓库:MAC-AutoML/MindPipe
- 链接:https://github.com/MAC-AutoML/MindPipe
- 分类:ai
- 作者:Tom
- 更新:2026-08-23
它是什么
MindPipe 是一个统一的 LLM/VLM 模型压缩评估框架,用单一 main.py CLI 驱动 11 种量化方法、7 种剪枝方法、压缩-微调联合流程,以及 PPL / lm-eval-harness 零样本 / VLMEvalKit 多模态三类评估。核心设计理念是:一次配置,全流程可复现。
⚠️ 注意:本仓库同时支持 NVIDIA GPU 和华为昇腾 NPU(Ascend NPU)。NPU 支持状态各异(见下方法表),部分算法标注"⏳ In Progress"或"🔶 CUDA Only",使用前请查阅最新算法支持状态。
解决什么问题
模型压缩工具链极度碎片化:量化用 AWQ / GPTQ / QLoRA 各有各的脚本,剪枝用 Wanda / SparseGPT 又要换一套工具,评估又要接 lm-eval-harness 或 VLMEvalKit。MindPipe 的目标就是一个 CLI 搞定全流程:
| 痛点 | MindPipe 方案 |
|---|---|
| 工具繁多 | 统一 main.py CLI,所有方法一站搞定 |
| 量化 + 剪枝联合流程 | workflow/ 配置器支持链式执行 |
| 评估结果不可比 | JSON artifacts + 每轮指标,可追溯对比 |
| VLM 支持弱 | 独立 multimodal eval,PPL 和 VLM 都是一等公民 |
| 多硬件支持 | GPU + 昇腾 NPU 统一抽象 |
快速安装
# 1. 创建 conda 环境
conda create -n mindpipe python=3.10
conda activate mindpipe
# 2. 克隆(含 submodule)
git clone https://github.com/MAC-AutoML/MindPipe.git
cd MindPipe
git submodule update --init --recursive
# 3. 安装依赖
pip install -r requirements.txt
⚠️
git submodule update --init --recursive必须执行,否则 third_party 目录缺失会导致部分评估功能不可用。
核心用法
1. 量化(AWQ W4A16 示例)
CUDA_VISIBLE_DEVICES=0 python main.py \
--quantization awq \
--model_path /path/to/model \
--device_map auto \
--dtype float16 \
--calibration_dataset pileval \
--calibration_samples 128 \
--sequence_length 2048 \
--weight_bits 4 \
--group_size 128 \
--eval_ppl true \
--output_dir ./results/awq
⚠️
calibration_dataset、calibration_samples和sequence_length会显著影响量化精度——默认 128 样本可能不够(如需更高精度,建议 1024+ 样本,但推理时间会大幅增加)。
2. 剪枝(Wanda 50% 稀疏度)
CUDA_VISIBLE_DEVICES=0 python main.py \
--pruning wanda \
--model_path /path/to/model \
--device_map auto \
--dtype float16 \
--calibration_dataset c4 \
--calibration_samples 128 \
--sparsity_ratio 0.5 \
--eval_ppl true \
--output_dir ./results/wanda
3. 量化 + 剪枝联合流程
CUDA_VISIBLE_DEVICES=0,1 python main.py \
--pruning wanda_sp \
--quantization gptq \
--execution_order pruning_then_quantization \
--model_path /path/to/model \
--device_map auto \
--dtype float16 \
--calibration_dataset c4 \
--calibration_samples 128 \
--sequence_length 2048 \
--sparsity_ratio 0.2 \
--weight_bits 4 \
--group_size 128 \
--eval_ppl true \
--output_dir ./results/workflow
4. 全方位评估(PPL + 零样本)
CUDA_VISIBLE_DEVICES=0 python main.py \
--model_path /path/to/model \
--device_map auto \
--dtype float16 \
--attn_implementation sdpa \
--evaluation_dataset wikitext2 \
--sequence_length 2048 \
--batch_size 1 \
--max_eval_chunks 64 \
--eval_ppl true \
--eval_zero_shot true \
--zero_shot_tasks boolq piqa rte winogrande arc_easy arc_challenge openbookqa \
--zero_shot_num_fewshot 0 \
--zero_shot_batch_size 1 \
--output_dir ./results/fp_eval
5. VLM 多模态评估
CUDA_VISIBLE_DEVICES=0 python main.py \
--model_path /path/to/vlm \
--device_map auto \
--dtype float16 \
--attn_implementation sdpa \
--eval_ppl false \
--eval_zero_shot false \
--eval_vlm true \
--vlm_datasets OCRBench TextVQA_VAL ChartQA_TEST InfoVQA_VAL \
--vlm_mode all \
--vlm_api_nproc 1 \
--vlm_eval_kit_root /path/to/VLMEvalKit \
--output_dir ./results/vlm_eval
方法一览表
量化方法
| 方法 | CLI 值 | 类别 | 说明 | NPU |
|---|---|---|---|---|
| AWQ | awq |
PTQ | activation-aware weight-only quantization | ✅ |
| GPTQ | gptq |
PTQ | weight-only GPTQ | ✅ |
| MQuant | mquant |
PTQ | 多模态(语言+视觉分支) | ⏳ |
| OmniQuant | omniquant |
PTQ | 可学习 weight & activation 变换 | ✅ |
| QuaRot | quarot |
PTQ | 旋转式 W/A/KV 量化 | ⏳ |
| SmoothQuant | smoothquant |
PTQ | activation 平滑 | ✅ |
| SpinQuant | spinquant |
PTQ | 旋转式 W/A/KV | ⏳ |
| FlatQuant | flatquant |
QAT | 可训练变换矩阵 | ✅ |
| QLoRA | qlora |
QAT | 低位 fake-quant adapter 训练 | ✅ |
| QA-LoRA | qalora |
QAT | group-pooled adapter | 🔶 |
| SplitQuant | splitquant |
QAT | 可训练分裂变换 | ✅ |
剪枝方法
| 方法 | CLI 值 | 类型 | 校准数据 | NPU |
|---|---|---|---|---|
| ALPS | alps |
非结构化/n:m | c4 | ✅ |
| FLAP | flap |
结构化 | wikitext2 | ✅ |
| LLM-Pruner | llm_pruner |
结构化 | c4 | ✅ |
| ShortGPT | shortgpt |
Layer 剪枝 | pg19 | ✅ |
| SparseGPT | sparsegpt |
非结构化/n:m | c4 | ✅ |
| Wanda | wanda |
非结构化/n:m | c4 | ✅ |
| Wanda-SP | wanda_sp |
结构化 | c4 | ✅ |
✅ Ready | ⏳ In Progress | 🔶 CUDA Only
典型适用场景
| 场景 | 推荐程度 | 说明 |
|---|---|---|
| LLM 推理加速选型 | ✅ 强烈推荐 | 一个框架比较多种量化/剪枝效果 |
| 多方法对比实验 | ✅ 适用 | JSON artifacts 保证可复现性 |
| 昇腾 NPU 部署 | ⚠️ 部分适用 | 仅 AWQ/GPTQ/OmniQuant/FlatQuant 等已就绪 |
| VLM 压缩评测 | ✅ 适用 | OCRBench/TextVQA 等多模态基准 |
| 量化感知训练(QAT) | ⚠️ 注意 | QLoRA / FlatQuant 可用,但需更多 GPU 显存 |
坑与注意
-
GPU 显存要求:量化 7B 模型建议 24GB+ 显存(如 A100 40GB);7B 模型加 128 样本校准,约需 30GB 显存(⚠️ 标注,非精确值)。
-
NPU 支持参差不齐:部分算法(如 QuaRot、SparseGPT)标注 ⏳,昇腾 NPU 用户使用前必须核实算法兼容性。
-
方法 CLI 名称 vs 显示名称:README 特别提醒不要混淆,例如 QA-LoRA 的 CLI 值是
qalora,不是qa-lora或qalora。写错 CLI 值会导致报错。 -
校准数据集影响大:pileval / c4 / wikitext2 不同校准数据会产生不同的量化效果,MindPipe 默认 128 样本偏小,适合快速验证,生产调优建议增加样本数。
-
MoE 模型支持:README 明确说明 MoE 变体 support 取决于具体算法,建议在
algorithm/quantization/*/*/method.py中核查目标模型的支持情况。 -
vlmevalkit 需要额外配置:
--vlm_eval_kit_root需要指向已安装的 VLMEvalKit 目录,且vlm_api_nproc并行数建议从 1 开始逐步增加,防止 API 限流。
与同类对比
| 框架 | 量化方法 | 剪枝方法 | VLM 支持 | 多硬件 |
|---|---|---|---|---|
| MindPipe | 11 种 | 7 种 | ✅ VLMEvalKit | GPU + 昇腾 NPU |
| llm-compressor | 5 种 | 3 种 | ❌ | GPU |
| AutoGPTQ | 4 种 | ❌ | ❌ | GPU |
| TensorRT-LLM | ✅ 内置 | ✅ 内置 | ❌ | NVIDIA GPU |
| intel-extension-for-transformers | ✅ | ✅ | ⚠️ | CPU + Intel GPU |
一句话结论
MindPipe 是 LLM 压缩领域的瑞士军刀——11 种量化 + 7 种剪枝 + 统一评估 + GPU/NPU 双支持,使其成为模型压缩实验的首选框架;其 Registry 架构也方便添加新算法,是量化/剪枝研究人员和工程团队的效率利器。