点击左上方蓝字关注我们
【故事的开始…】
小张是一名AI算法攻城狮,听闻飞桨乃国产开源深度学习框架之光,心想炎黄子孙当自强,用自己的深度学习框架,实现中国的AI梦……
他尝试在的笔记本上使用飞桨搭建线性回归示例模型。
噼里啪啦…噼里啪啦…键盘敲的热血澎湃。跑下试试……
然而,模型的打印结果让小张满怀期待的小心情顿时哇凉哇凉的。
丹还没炼成,炉咋就坏了呢?这铺天盖地的error,要怎么分析和处理?
【故事的转折…】
同学且慢,经官方鉴定,小张大概率使用的是较早版本的飞桨,飞桨开源框架1.7及之后版本断然不会出现这么繁杂的报错信息了。
这是因为飞桨工程师们一直期望产品不但好用,而且易用,可以给开发者带来一点点工作上的愉悦。报错信息对调试分析至关重要,飞桨工程师也一直在持续地进行改进和优化。
解读最新的飞桨报错信息
飞桨报错信息总体上分为两种:一种是直接在Python层拦截报出的错误,这种问题一般比较直观,根据Python原生的报错栈即可以定位程序中的问题,和大家使用Python写程序报错分析的流程一致;一种是飞桨的C++ core中的报错,这种报错包含的信息量较大。下面我们以此类报错信息的为例,解读分析过程。
首先我们了解下目前飞桨最新版本报错信息的结构,如下图:
报错信息为四段式结构,由上至下依次为Python默认错误信息栈、C++错误信息栈、飞桨Python错误信息栈(仅声明式编程模式)、核心错误概要。
-
Python默认错误信息栈:执行Python程序默认记录的执行路径,对定位报错位置很有帮助。这是Python本身特性,此处不展开介绍。
-
C++错误信息栈:程序在Paddle C++ core中的错误路径,即为模块paddle.fluid.core中的程序执行路径,这部分信息对开发者帮助有限。但当开发者通过Issue向飞桨开发人员提问时,提供C++报错栈的信息将有助于开发人员快速定位问题。(目前C++错误信息栈仅支持Unix平台,Windows平台暂不支持)
-
Paddle Python错误信息栈:为什么这里还有一个Paddle Python错误信息栈呢?因为在声明式编程模式(静态图)下,模型编译和执行是分离的。执行时报错的路径由Python默认