人工智能大模型模型优化模型量化模型压缩【免费下载链接】Model-OptimizerA unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc. It compresses deep learning models for downstream deployment frameworks like TensorRT-LLM, TensorRT, vLLM, etc. to optimize inference speed.项目地址https://gitcode.com/GitHub_Trending/te/Model-Optimizer点击查看免费下载本篇技术指南聚焦 NVIDIA Model-Optimizer 仓库中「Hugging Face 模型后训练量化PTQ」在 SLURM 集群上的完整落地路径涵盖容器镜像准备enroot/pyxis、依赖管理与常见陷阱、基于device_mapauto与 FSDP2 的 GPU 规模估算、多节点作业模板sbatch与手动torchrun以及提交前必做的冒烟测试流程。读完本文你将能基于 examples/hf_ptq 的hf_ptq.py入口在自己的 SLURM 集群上稳定、可复现地跑通从单卡 PTQ 到 200B 参数多节点 FSDP2 量化的完整作业。一、背景PTQ 为什么需要专门的 SLURM 配置PTQPost-Training Quantization用一小批校准样本通常 128~512 条确定量化缩放因子从而把模型压缩到 NVFP4、FP8、INT8、INT4 等低精度格式。Model-Optimizer 仓库的 HF PTQ 流程统一由 examples/hf_ptq/hf_ptq.py 驱动其加载模型时使用device_mapauto自动填充可用 GPU这决定了它与普通训练作业在集群规划上的差异单节点device_mapauto会自动把模型分层铺到本节点所有 GPU 上因此申请的 GPU 数量只需「够用」无需手动切分多节点200B 参数需要--use_fsdp2走 PyTorch FSDP2 分布式分片由 SLURM 逐节点拉起torchrun校准是前向过程相比训练显存与算力需求更低但对容器内 Python 依赖的版本极其敏感新架构模型往往需要更新的 transformers。仓库内为 PTQ skill 专门维护的 slurm-setup-ptq.md 与通用 skill 的 slurm-setup.md 共同构成了这套配置的知识体系本文按「容器 → GPU 规模 → 冒烟测试」三条主线展开。二、第一步准备容器镜像enroot / pyxisPTQ 校准必须运行在容器内推荐使用 TensorRT-LLM 发布镜像推荐的镜像版本号请以 examples/hf_ptq/README.md 为准例如nvcr.io/nvidia/tensorrt-llm/release:version。拿到版本号后先检查集群上是否已有可复用的.sqsh镜像文件ls *.sqsh ../*.sqsh ~/containers/*.sqsh 2/dev/null如果存在.sqsh直接使用--container-imagepath跳过导入步骤。这是最快的路径也避免后续每次 smoke test / 重跑都重新拉取镜像。如果不存在.sqsh用 enroot 导入导入产物会缓存供后续冒烟测试与重跑复用export ENROOT_CACHE_PATH/path/to/writable/enroot-cache export ENROOT_DATA_PATH/path/to/writable/enroot-data mkdir -p $ENROOT_CACHE_PATH $ENROOT_DATA_PATH enroot import --output /path/to/container.sqsh docker://nvcr.io#nvidia/tensorrt-llm/release:versionENROOT_CACHE_PATH与ENROOT_DATA_PATH必须指向可写目录尤其当你的工作目录位于 lustre 等并行文件系统时权限问题很常见。pyxis 内联拉取作为兜底若 enroot import 失败例如 lustre 上的权限错误可退化为 pyxis 内联拉取——直接把 NGC URI 传给--container-imagenvcr.io/nvidia/tensorrt-llm/release:version。注意这种方式的代价是每次作业都会重新拉取镜像不产生本地缓存。容器认证前置检查pyxis 在计算节点拉取私有仓库如nvcr.io镜像时需要集群上存在对应注册中心的凭据~/.config/enroot/.credentials否则srun会在拉取阶段报401 Unauthorized。提交任何会拉取镜像的作业前建议先按 slurm-setup.md 第 6 节的步骤核对grep -E ^\s*machine\s ~/.config/enroot/.credentials 2/dev/null并预检镜像可拉性凭据存在不代表镜像可访问enroot import --output /dev/null docker://registry#image 21 | head -10三、容器内的依赖管理三个关键陷阱镜像就绪只是第一步PTQ 作业的稳定性往往取决于容器内的 Python 依赖版本。以下是 slurm-setup-ptq.md 强调的三类高频问题。1. 新模型需要更新的 transformersTensorRT-LLM 容器内预装的 transformers 版本通常落后于最新模型架构的要求检查模型的config.json中transformers_version字段即可确认pip install -U transformers对于未在支持列表中、且需要未发布版 transformers如直接来自 transformers 仓库 git 源码的模型请参照 unsupported-models.md 的 Step A 处理。2. 优先 editable install而非 PYTHONPATH在容器内让 Model-Optimizer 源码可导入首选在仓库根目录执行pip install -e .[hf] --no-build-isolation这正是 multinode_fsdp2_ptq.slurm 所采用的作业初始化方式。与PYTHONPATH相比editable install 能在安装阶段暴露打包/编译问题而不是把问题掩盖到 import 时才爆发。避免从 PyPI 执行pip install -U nvidia-modelopt[hf]它可能连带升级 PyTorch 从而破坏容器内其他包。若确实需要保持容器内已装包不被改动例如绕开依赖冲突才退回PYTHONPATH——但要清楚它的代价跳过了 editable install缺失的编译扩展只会在 import 时报错export PYTHONPATH/path/to/Model-Optimizer:$PYTHONPATH3. NGC 容器的 PIP_CONSTRAINT 会引发ResolutionImpossibleNGC 容器通常通过环境变量PIP_CONSTRAINT钉住一组版本导致 pip 无法自由解析新依赖、直接报ResolutionImpossible。解决办法是先解除约束unset PIP_CONSTRAINT pip install -U transformers # 现在升级与解析都带上新依赖若仍冲突再退化为--no-deps跳过新依赖可能需要手动补装缺失项pip install -U transformers --no-deps依赖排查时的判读技巧源自 unsupported-models.mdResolutionImpossible是依赖冲突而非网络故障先看日志里有没有Connection refused/Name resolution failed再下结论。四、GPU 规模估算从单节点到 200B 多节点单节点让device_mapauto自动填充hf_ptq.py使用device_mapauto相关实现见 hf_ptq.py 中get_model的加载路径因此只需申请恰好够用的 GPU 数量不要多申请浪费配额。显存压力大时脚本还提供了这些缓解手段参数作用说明--use_seq_device_map改用顺序 device map模型可占用每张 GPU 约 80% 显存解决device_mapauto加载不均导致的 OOM--gpu_max_mem_percentage顺序加载时每卡可用显存比例默认0.8见 hf_ptq.py 参数解析--low_memory_mode校准前先把权重压到低精度再加载仅 FP8 / NVFP4 支持且与--recipe互斥--batch_size 0自动探测最大 batch默认行为探测时会考虑 AWQ/SmoothQuant 的额外显存开销hf_ptq.py中sample_memory_usage_ratio分别为 2 与 1.1多节点--use_fsdp2的取舍对于200B 参数的模型单节点放不下时启用 FSDP2 分布式分片world_size 节点数 × 每节点 GPU 数。多节点启动命令sbatch与手动torchrun以及--recipe格式请参见 examples/hf_ptq/README.md 的Multi-Node Post-Training Quantization with FSDP2一节。PTQ 路径上特有的规模判断依据当每 rank 的解码器分片逼近单卡容量低 rank 数下的 200B 模型二选一增加节点数更多 rank → 每个 rank 分片更小或加--cpu_offload把 decoder 分片在前向间隙留在 CPU换取 GPU 显存代价是 PCIe 流量增加——该参数定义见 hf_ptq.py层检测是自动的FSDP2 分片不需要写任何 YAML 层配置--cpu_offload必须与--use_fsdp2组合使用否则脚本直接报错hf_ptq.py 的参数校验逻辑同时--use_fsdp2要求以torchrun启动且不支持 KV-cache AutoQuantize recipe、sparsity、--cast_mxfp4_to_nvfp4等组合脚本在加载模型前就会拒绝见parse_args与load_model中的校验。性能提示FSDP2 本身面向训练设计校准与导出的耗时会比单节点更久想提速就尽量放大--batch_size并选合适的 GPU 数以减少不必要的通信见 examples/hf_ptq/README.md。五、多节点 FSDP2 作业模板逐行解析仓库提供了开箱即用的多节点作业脚本 slurm/multinode_fsdp2_ptq.slurm默认将nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16量化为 NVFP4 FP8 KV cache。其核心结构如下#SBATCH --job-namefsdp2-ptq #SBATCH --account{account} #SBATCH --partition{partition} #SBATCH --nodes2 #SBATCH --ntasks-per-node1 # 每节点一个 torchrun 启动器再由它按 GPU 数展开进程 #SBATCH --gpus-per-node8 #SBATCH --exclusive #SBATCH --time04:00:00 #SBATCH --output%x_%j.log set -euo pipefail # CONFIG 区容器镜像、仓库路径、模型路径、导出目录、HF 缓存、recipe 与校准规模 export CONTAINER_IMAGE{container_image} export MODELOPT_PATH{path_to_modelopt_repo} export MODEL_PATHnvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16 export EXPORT_PATH{path_to_export_dir} export HF_HOME{path_to_hf_cache} export RECIPEgeneral/ptq/nvfp4_default-kv_fp8_cast export CALIB_SIZE512 export BATCH_SIZE4 # Rendezvous节点 0 为主节点所有 rank 汇聚到 MASTER_ADDR:MASTER_PORT export MASTER_ADDR$(scontrol show hostnames $SLURM_JOB_NODELIST | head -1) export MASTER_PORT29531其中关键点--ntasks-per-node1srun --container-image容器相关标志--container-image、--container-mounts必须放在srun行上写成#SBATCH指令不生效这是通用模板中反复强调的硬性规则见 slurm-setup.mdsrun启动的 bash 内再调用torchrun--nnodes/--node_rank/--nproc_per_node分别取自 SLURM 环境变量实现每个节点按本节点 GPU 数展开进程容器挂载仓库、导出目录、HF 缓存全部挂入容器模型若为本地路径则额外挂载HF_HOME持久化可避免 repo id 每次重新下载容器内初始化pip install -e /modelopt[hf] --no-build-isolation即上文推荐的 editable install 方式pip install -r requirements.txt然后执行校准命令校准命令hf_ptq.py --pyt_ckpt_path ... --recipe general/ptq/nvfp4_default-kv_fp8_cast --calib_size 512 --batch_size 4 --export_path ... --use_fsdp2其中--recipe指向内置 recipe 名或自定义 YAML 路径。**手动启动无 SLURM**时在每台节点上自行执行等价的torchruntorchrun \ --nnodesnum_nodes --node_rankcurrent_node_rank \ --master_addrnode0_ip_addr --master_portport \ --nproc_per_nodenum_gpus_per_node \ hf_ptq.py \ --pyt_ckpt_path path_to_model \ --recipe general/ptq/nvfp4_default-kv_fp8_cast \ --batch_size calib_batch_size \ --calib_size num_calib_samples \ --export_path export_path \ --use_fsdp2多节点作业的外层 wrapper建议直接复用通用 skill slurm-setup.md 第 4 节的 multi-node 模板。另外注意--use_fsdp2要求每个srun任务保持 SLURM 分布式环境变量与单进程脚本不同因此不要像单节点脚本那样在容器内unset WORLD_SIZE/LOCAL_RANK/RANK——单节点device_mapauto路径才需要 unset否则 PyTorch 会误初始化进程组并把张量包装成 DTensor破坏 NVFP4 导出。六、提交前必做冒烟测试在正式校准作业默认--calib_size 512之前务必先提交一个冒烟测试用小代价提前暴露脚本错误避免浪费 GPU 配额# 冒烟测试极小校准规模 短时限 sbatch --time00:30:00 ... # 作业内使用 --calib_size 4冒烟测试的具体做法通用 skill slurm-setup.md 第 2 节使用逗号分隔的分区列表如--partitioninteractive,batch_short,batch_block1SLURM 会优先分配先可用者时限设为--time00:30:00注意 interactive/short 分区可能限制节点数若冒烟测试需要多节点把可容纳多节点的分区放在列表末尾作为兜底只有冒烟测试干净退出后才提交完整校准作业。这一「先 4 条样本、后 512 条样本」的节奏在 SKILL.md 与 unsupported-models.md 中同样被列为标准流程未在支持表中的模型尤其必须走这一步。七、作业提交、监控与结果核验提交与轮询监控mkdir -p log_dir JOBID$(sbatch script.sh | awk {print $4}) echo Submitted job $JOBID # 轮询直至完成sleep 式轮询避免后台任务/cron保持输出在当前会话 while squeue -j $JOBID -h 2/dev/null | grep -q .; do echo $(date): job $JOBID still running...; sleep 60 done echo Job $JOBID finished sacct -j $JOBID --formatJobID,State,ExitCode,Elapsed作业结束后tail 日志最后 50 行核验结果再向用户报告。结果核验ls -lh output_path/ # 期望config.json、tokenizer 文件、model-*.safetensors若使用了--recipePTQ recipe 或 AutoQuantize recipehf_ptq.py会以 recipe 为准recipe 与--qformat同时存在时 recipe 优先KV cache 行为也取决于 recipe 类型详见 examples/hf_ptq/README.md 的 Recipe-based Quantization 一节。校准数据集默认使用cnn_dailymail nemotron 后训练数据混合hf_ptq.py中cnn_nemotron_v2_mix也可用--dataset切换为代表性更强的nemotron-post-training-v3混合集。八、集群环境常见故障与规避症状成因对策容器内写缓存/导出目录报PermissionErrorNFSroot_squash把 root 映射为nobodydocker run --user $(id -u):$(id -g)或提交前chmod -R grwX仅限作业所需目录通用 skill 第 5 节QOSMinGRES/Requested node configuration is not available申请的gpus_per_node低于 QOS 整节点要求按sinfo -o %P %G核对节点 GPU 数如 GB300 必须整节点 4 卡B200 8 卡ResolutionImpossibleNGC 容器PIP_CONSTRAINT钉住版本先unset PIP_CONSTRAINT仍冲突则--no-deps新架构模型 AutoConfig 失败容器 transformers 过旧pip install -U transformers或按 unsupported-models.md Step A 处理未发布版本NVFP4 导出出错单进程脚本未 unset SLURM 分布式环境变量张量被包装为 DTensor在容器内unset SLURM_PROCID SLURM_LOCALID SLURM_NTASKS WORLD_SIZE LOCAL_RANK RANK仅限device_mapauto路径FSDP2 路径不要 unset--cpu_offload报错该参数与--use_fsdp2之外的组合不合法只与--use_fsdp2搭配使用九、总结一条可复用的 PTQ 上集群路径把本指南浓缩为可执行清单镜像确认推荐镜像版本 → 优先复用已有.sqsh否则 enroot import 并设好可写缓存目录import 失败退化为 pyxis 内联 URI依赖容器内pip install -e .[hf] --no-build-isolation安装仓库源码unset PIP_CONSTRAINT后按需升级 transformers避免从 PyPI 升级nvidia-modelopt[hf]规模单节点靠device_mapauto自动填充只申请够用的卡200B 用--use_fsdp2必要时叠加--cpu_offload或加节点直接用 multinode_fsdp2_ptq.slurm 改 CONFIG 后sbatch冒烟先以--calib_size 4--time00:30:00提交冒烟测试用逗号分隔分区列表干净退出后再跑--calib_size 512正式校准核验轮询至完成、tail 日志、检查导出目录产物。这套流程覆盖了从容器到规模估算、从模板到排障的完整闭环可以让 PTQ 校准作业在 SLURM 集群上稳定运行。关于更多 PTQ 本身的格式选择NVFP4/FP8/INT4-AWQ 等、支持矩阵与精度建议请继续阅读 examples/hf_ptq/README.md。赞分享人工智能大模型模型优化模型量化模型压缩【免费下载链接】Model-OptimizerA unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc. It compresses deep learning models for downstream deployment frameworks like TensorRT-LLM, TensorRT, vLLM, etc. to optimize inference speed.项目地址https://gitcode.com/GitHub_Trending/te/Model-Optimizer点击查看免费下载相关推荐Model-Optimizer 作业监控技能实战在 SLURM 集群上跟踪 PTQ、NEL 评估与部署作业的完整指南Model Optimizer 作业监控技能实战在 SLURM 集群上跟踪 PTQ、NEL 评估与部署作业的完整指南 导读 本文以 Model Optimiz人工智能大模型模型优化模型量化模型压缩Chainlink CCIP 冒烟测试运行指南从 Postgres 容器到 Test_CCIPBatching 全流程Chainlink CCIP 冒烟测试运行指南从 Postgres 容器到 Test_CCIPBatching 全流程 本指南基于 integration t区块链Web3后端Model-Optimizer PyTorch 量化实战指南PTQ、QAT 与 auto_quantize 完整解析Model Optimizer PyTorch 量化实战指南PTQ、QAT 与 auto_quantize 完整解析 本文是 Model Optimizer人工智能大模型模型优化模型量化模型压缩上一篇3步打造你的智能桌面伴侣BongoCat跨平台桌宠完全重塑指南下一篇AlphaFold编译构建从源码到二进制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
