UR error: 45 (UR_RESULT_ERROR_INVALID_ARGUMENT) [PYI-2512:ERROR] Failed to execu...
🚨 错误信息
Traceback (most recent call last):
File "main.py", line 243, in <module>
File "main.py", line 222, in main
File "lada\restorationpipeline\__init__.py", line 28, in load_models
File "lada\models\basicvsrpp\inference.py", line 55, in load_model
File "torch\nn\modules\module.py", line 1199, in half
return self._apply(lambda t: t.half() if t.is_floating_point() else t)
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "torch\nn\modules\module.py", line 930, in _apply
module._apply(fn)
~~~~~~~~~~~~~^^^^
File "torch\nn\modules\module.py", line 1022, in _apply
self._buffers[key] = fn(buf)
~~^^^^^
File "torch\nn\modules\module.py", line 1199, in <lambda>
return self._apply(lambda t: t.half() if t.is_floating_point() else t)
~~~~~~^^
RuntimeError: UR error: 45 (UR_RESULT_ERROR_INVALID_ARGUMENT)
[PYI-2512:ERROR] Failed to execute script 'main' due to unhandled exception!
🤖 AI解决方案
报错分析报告
1.错误翻译
原文:RuntimeError: UR error: 45 (UR_RESULT_ERROR_INVALID_ARGUMENT)
译文:运行时错误:UR错误45(UR_RESULT_ERROR_INVALID_ARGUMENT,参数无效错误)
2.原因分析
half()转换要求(如非浮点型或数据无效)。 torch.nn.Module._apply处理模型缓冲区时,调用t.half()触发底层UR运行时错误(堆栈中lada\models\basicvsrpp\inference.py第55行的load_model调用了half())。3.解决方案
若无需半精度推理,可移除
half()转换;若需半精度,需确保张量兼容。修复示例(以inference.py第55行为例):python
原代码(推测):model = model.half()
修复后(方案1:禁用半精度)
model = model.float() # 或直接移除half(),保持FP32修复后(方案2:安全转换,仅浮点型张量转half)
def safe_half(module):
for param in module.parameters():
if param.is_floating_point():
param.data = param.data.half()
for buffer in module.buffers():
if buffer.is_floating_point():
buffer.data = buffer.data.half()
return modulemodel = safe_half(model)
4.️ 预防措施
tensor.is_floating_point()检查张量类型,避免对整数/布尔张量调用half()。 torch.cuda.amp自动混合精度(GradScaler)替代手动half(),减少低级错误。 ---
注:若需更精准修复,请提供lada\models\basicvsrpp\inference.py第55行附近的load_model函数代码。