关于Jittor的NaN和Inf处理

Python Jittor似乎不提供isnan()和isinf()的判断接口,似乎唯一提供的nan/inf相关内容是环境变量JT_CHECK_NAN,该环境变量置为1会使得在出现inf或nan时python程序和c程序同时抛出异常。我现在有一个需求,即在出现nan或inf时并不停止我的python程序,而是捕获所有异常进行一些处理并让程序继续运行,请问是否有可能的解决方案?

您好,如果需要手动检查某个变量是否存在 nan/inf,目前可以通过 var.data 取出其 numpy 数组再通过 numpy 的 isnan / isinf 检查。我们将在下个版本增加 Jittor Var 的 isnan,isinf 的接口。

如果需要自动检查 nan / inf 并且只报 python 异常而不报 c 异常,这个应用场景可以进一步讨论。我们目前实现自动检查的方式是在自动编译生成的c/cuda代码中加入多次检查,因此这会比较明显地降低计算速度,只适合算法研究调试时使用,不适合在实际部署时使用。

您的网络出现 nan / inf 是合理的吗,是什么样的应用场景呢?

您好,感谢您的解答,已进行简单测试证明第一个方案可行。另,这种场景可能会出现在测试或模型自动生成等情况,我们希望程序在发现模型错误后只是抛弃掉某个模型同时进行记录,并继续某种探索过程,而不是遇到出错模型即立即终止。一般仅在实验调试中出现,不会出现在实际的模型部署及生产环境。

谢谢您的反馈,我们在最新版本的jittor 1.3.1.59版本已经加上了isinf,isnan,isfinite,isposinf,isneginf一系列浮点数判断函数,相关commit:add isnan and isinf check · Jittor/jittor@3948cba · GitHub