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_datasetcalibration_samplessequence_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 显存

坑与注意

  1. GPU 显存要求:量化 7B 模型建议 24GB+ 显存(如 A100 40GB);7B 模型加 128 样本校准,约需 30GB 显存(⚠️ 标注,非精确值)。

  2. NPU 支持参差不齐:部分算法(如 QuaRot、SparseGPT)标注 ⏳,昇腾 NPU 用户使用前必须核实算法兼容性。

  3. 方法 CLI 名称 vs 显示名称:README 特别提醒不要混淆,例如 QA-LoRA 的 CLI 值是 qalora,不是 qa-loraqalora。写错 CLI 值会导致报错。

  4. 校准数据集影响大:pileval / c4 / wikitext2 不同校准数据会产生不同的量化效果,MindPipe 默认 128 样本偏小,适合快速验证,生产调优建议增加样本数。

  5. MoE 模型支持:README 明确说明 MoE 变体 support 取决于具体算法,建议在 algorithm/quantization/*/*/method.py 中核查目标模型的支持情况。

  6. 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 架构也方便添加新算法,是量化/剪枝研究人员和工程团队的效率利器。