Closed gmx1992 closed 1 month ago
感谢您的关注,正如论文中所提到的,torch.cdist在转onnx部署时会遇到问题,对于此问题,我们建议您使用自定义函数来实现torch.cdist。以下我们提供了一个函数可以替代torch.cdist计算过程“
感谢您的关注,正如论文中所提到的,torch.cdist在转onnx部署时会遇到问题,对于此问题,我们建议您使用自定义函数来实现torch.cdist。以下我们提供了一个函数可以替代torch.cdist计算过程“
首先感谢您的回复,我之前也是实现了2个算子,均以超时告终; 其次,读论文时漏了最后的附录D ,导致走了一些弯路,再次感谢。
你好作者,我使用了您的模型训练了自己的数据集,在使用onnxruntime-gpu进行推理时报错:::DivMod(int) 函数中,它在处理除法时遇到无效的除数(即除数 d 不在合理的范围内,或小于 1),从而引发异常(内存爆出等)。
我可视化graph同时查看源码发现,在超图计算模块时(源码位置:ultralytics/nn/modules/block.py ...distance = torch.cdist(feature, feature))用到了torch.cdist,而onnx将该算子拆分为Sub、ReduceSum、Pow等算子,最终在Sub算子处报错。 目前我的CUDA版本11.7,ort-gpu版本是1.17,尝试将ort-gpu升级到1.19时,结果推理不报错,但是推理时间延长。
想请教,您的onnxruntime-gpu如何推理成功的。
[E:onnxruntime:, sequential_executor.cc:514 ExecuteKernel] Non-zero status code returned while running Sub node. Name:'/model.16/Sub' Status Message: /onnxruntime_src/onnxruntime/core/providers/cuda/shared_inc/fast_divmod.h:50 onnxruntime::cuda::DivMod<int>::DivMod(int) d_ >= 1 && d_ <= static_cast<uint32_t>(std::numeric_limits<int>::max()) was false.
错误表明:这是由 CUDA 设备上的整数除法运算问题引起的。具体来说,问题出在 fastdivmod.h 文件的 DivMod