常见问题解答
ModelOpt-Windows
ONNX PTQ
1. 为什么在ONNX量化过程中,awq-scale搜索耗时过长或卡在0%?
Awq-scale 搜索应在几分钟内完成,使用 NVIDIA GPU 加速。如果停滞:
GPU加速可能被禁用。 安装 cupy 及其依赖项(参见ModelOpt-Windows设置)。
GPU内存不足。 量化需要20-24GB的显存;内存不足会强制使用较慢的共享内存。
使用CPU进行量化。 安装ORT-GPU(支持CUDA EP)或ORT-DML(支持DML EP)以获得更快的速度。
2. 为什么在ONNX量化过程中会出现“CUDA EP未找到”错误?
在GenAI中使用的ORT可能与ModelOpt-Windows ORT发生冲突:
卸载ORT,运行
pip cache purge,然后重新安装nvidia-modelopt[onnx]。为GenAI和量化使用独立的虚拟环境(例如,使用venv或conda)。
3. 为什么在拥有CUDA工具包和cuDNN的情况下,ORT会话创建仍然失败?
这通常是由于CUDA和cuDNN版本不匹配或路径缺失导致的。请确保:
兼容的CUDA工具包和cuDNN版本(请查看CUDA EP要求)。
将cuDNN的bin和lib路径添加到PATH中,并重新启动命令提示符。
4. 为什么量化模型的大小在重新运行时会增加?
确保在每次量化运行之前输出目录是干净的,否则,现有的量化模型文件可能会在每次运行中被追加,导致模型大小增加并可能损坏它。
5. 在DirectML后端上运行量化的ONNX模型时出现以下错误。可能是什么问题?
错误 无法识别的属性:block_size 用于操作符 DequantizeLinear
ModelOpt-Windows 使用 ONNX 的 DequantizeLinear (DQ) 节点。block_size 属性在 Opset-21 的 DeQuantizeLinear 节点中被添加。确保量化模型的 opset 版本为 21 或更高。详情请参考 应用训练后量化 (PTQ)。
6. 在DirectML后端上运行INT4量化的ONNX模型时出现以下类型的错误。可能是什么问题?
错误:节点 (onnx::MatMul_6508_DequantizeLinear) 中操作符 (DequantizeLinear) 的输入参数 (onnx::MatMul_6508_i4) 的类型 'tensor(int4)' 无效。
上述错误的一个可能原因是INT4量化的ONNX模型的opset版本(默认或onnx域)小于21。确保INT4量化模型的opset版本为21或更高,因为DeQuantizeLinear ONNX节点中的INT4数据类型支持是在opset-21中引入的。
NAS/剪枝
并行搜索
如果你的mtn.search()中的score_func支持并行评估,你可以通过传入DistributedDataParallel模块来进行搜索。
猴子补丁函数
在转换过程中(mtn.convert()),我们使用了一个monkey patch来增强forward()、eval()和train()方法的功能。这使得ModelOpt转换过程与对这些方法的其他monkey patch不兼容。
# Internally in mtn.convert, we do:
model.forward = types.MethodType(nas_forward_func, model)
model.train = types.MethodType(nas_train_func, model)
已知问题
1. 使用FSDP时,use_orig_params=True可能导致内存泄漏
当使用FSDP并设置use_orig_params=True时,在训练过程中可能会存在内存泄漏问题,尤其是在与modelopt转换的模型一起使用时。请使用use_orig_params=False来避免这个问题。