book
book copied to clipboard
情感分析运行两遍Paddle.init()就会出core
这一段如果运行两次, 就会让notebook的内核crush掉.
错误日志是:
您好,感谢您提出问题,这里有几个问题跟您确认下:
-
您用的是v2版本吗?这个paddle.init在新的fluid版本中已经不再使用了,新版本只要更改以下图片所示的参数即可。现在我们的首页README没有及时更新,对此表示非常抱歉,待会会更新一下。
-
这里为什么需要运行两遍?错误原因也是说Log工具被初始化了两遍所以出错了,运行一遍的话应该不会有问题。
我是Baidu AI studio PM, 我们后台使用的是paddlepaddle. 大量的样例工程代码涉及到paddle.init(), 而我们也不能干预用户怎么操作, 他们很可能会执行两遍(事实上他们也是这么干的). 况且一个代码块执行两遍就出错, 也很奇怪吧. 是不是考虑添加一个单例模式之类的, 判断一下paddle状态先? 已经启动, 就不执行init()了? 没必要出core吧.......
了解了,确实有必要判断一下,不过这里可能有点困难,我追溯了一下这个错误,这个不是目前paddle里面的机制导致的,而是google的glog里面不允许这个二次Init操作。
现在paddle用了glog这个开源日志工具,使用这个日志工具需要调用Google提供的外部接口:
InitGoogleLogging
paddle也是这样使用的,包括现在的新版本fluid,paddle只能追溯到这一步了。
因此我追溯了glog的代码,触发这个错误的过程是这样的:
这里的CHECK导致了这个问题,但是这里不是我们的代码,这可能需要给google提下issues了。 建议暂时还是尽量提醒用户正确使用吧。
@weiexcelpro 类似的情况出现的概率如何,用户INIT两次的情况多吗? @chenwhql 如果影响严重,我们还是要想办法解决,不能等着google解决。用户不会关心底层是如何运行的,只会说是PaddlePaddle的问题。
@cheradam 由于我们的使用者以初学者为主, 容易进行误操作. 其次网络不佳的情况下, 用户容易多次点击. 整体概率虽然不算非常高, 但可以称得上常见.
@cheradam 可以,抱歉是我考虑不周全。我考虑有三种解决的方向:
- 可以在我们paddle v2代码初始化的时候加一个静态的状态记录变量,避免被二次调用
- 改下Google glog的源码
- 换用fluid版本,fluid版本里init这个操作用户是不能调用的,不会被二次使用
我先按第一种方向改一下
@weiexcelpro 您好,关于这个问题我后来找别的研发老师商量了一下,我之前考虑的解决方向可能带来隐患,不太合适。比较好的做法是在上层程序里用标志变量约束一下,比如假设init()背后是一个按钮,用户可能会点两次,那么就约束一下这个逻辑,避免用户点击两次。