// the find
MAC-AutoML/MindPipe
A powerful model compression framework for LLMs and LVLMs, adapted for NVIDIA GPUs and Huawei Ascend NPUs.
MindPipe is a unified CLI for compressing LLMs and vision-language models, wrapping 11 quantization methods and 7 pruning methods behind a single `main.py` entrypoint. It targets researchers and ML engineers who need to compare techniques like AWQ, GPTQ, Wanda, and SparseGPT without maintaining separate codebases for each. The Huawei Ascend NPU support is the most distinctive angle — most compression tools don't bother.
The single-entrypoint design is genuinely useful: you can swap `--quantization awq` for `--quantization gptq` and get comparable results without touching anything else, which matters a lot when you're running ablations. The output structure with `metrics.json` and `artifacts.json` per run is well thought out — you won't lose track of which hyperparameters produced which numbers. Reproducibility scripts with `DRY_RUN` mode and `MODEL_FILTER` are the kind of small operational detail most research repos skip and then regret. NPU parity is real work; having `algorithm/common/device.py` abstract over CUDA and Ascend means the pruning and quantization logic isn't littered with device conditionals.
The `algorithm/*/source/` pattern — vendoring each algorithm's source inline rather than taking package dependencies — means you're maintaining frozen forks of AWQ, SparseGPT, Wanda, etc. When the upstream papers release bug fixes or new model support, you get nothing. There's a backup file sitting in the tree (`model_ops.merge_replay_backup_20260414_0700.py`) which is a sign the internal development discipline hasn't caught up to the public presentation. Several methods are marked ⏳ (QuaRot, SpinQuant, MQuant, Compression LoRA on MoE), and the README doesn't say what ⏳ actually means in practice — is the NPU kernel missing, is the code broken, or is it just untested? The `--quantization` and `--pruning` flags share a single `main.py` argument namespace, which will get messy as method-specific flags proliferate; there's no clear story for how per-algorithm config and global config interact when they conflict.